Add release notes generation workflow for Gitea

This commit is contained in:
2026-02-23 14:56:02 +03:00
parent 365f80a79d
commit caaa7fa6fe
2 changed files with 128 additions and 0 deletions
+128
View File
@@ -0,0 +1,128 @@
name: Release Notes Template
on:
workflow_call:
inputs:
previous_release:
description: 'Previous release tag'
required: true
type: string
current_release:
description: 'Current release tag'
required: true
type: string
gitea_url:
description: 'Gitea URL'
required: false
type: string
default: 'https://gitea.technarts.com'
repo_owner:
description: 'Repository owner'
required: true
type: string
repo_name:
description: 'Repository name'
required: true
type: string
update_release:
description: 'Update release description'
required: false
type: boolean
default: false
release_id:
description: 'Release ID to update'
required: false
type: string
default: ''
secrets:
gitea_token:
description: 'Gitea API token'
required: true
jobs:
generate-and-update:
runs-on: ubuntu-latest
steps:
- name: Generate and update release notes
env:
GITEA_TOKEN: ${{ secrets.gitea_token }}
GITEA_URL: ${{ inputs.gitea_url }}
REPO_OWNER: ${{ inputs.repo_owner }}
REPO_NAME: ${{ inputs.repo_name }}
PREVIOUS_RELEASE: ${{ inputs.previous_release }}
CURRENT_RELEASE: ${{ inputs.current_release }}
UPDATE_RELEASE: ${{ inputs.update_release }}
RELEASE_ID: ${{ inputs.release_id }}
run: |
echo "Generating release notes: $PREVIOUS_RELEASE -> $CURRENT_RELEASE"
echo "Repository: $REPO_OWNER/$REPO_NAME"
# Get releases
RELEASES=$(curl -s -H "Authorization: token $GITEA_TOKEN" \
"$GITEA_URL/api/v1/repos/$REPO_OWNER/$REPO_NAME/releases")
# Get release dates
PREVIOUS_DATE=$(echo "$RELEASES" | jq -r --arg tag "$PREVIOUS_RELEASE" \
'.[] | select(.tag_name == $tag) | .created_at')
CURRENT_DATE=$(echo "$RELEASES" | jq -r --arg tag "$CURRENT_RELEASE" \
'.[] | select(.tag_name == $tag) | .created_at')
if [ -z "$PREVIOUS_DATE" ] || [ "$PREVIOUS_DATE" = "null" ]; then
echo "ERROR: Release not found: $PREVIOUS_RELEASE"
exit 1
fi
if [ -z "$CURRENT_DATE" ] || [ "$CURRENT_DATE" = "null" ]; then
echo "ERROR: Release not found: $CURRENT_RELEASE"
exit 1
fi
echo "Date range: $PREVIOUS_DATE to $CURRENT_DATE"
# Get merged PRs
PRS=$(curl -s -H "Authorization: token $GITEA_TOKEN" \
"$GITEA_URL/api/v1/repos/$REPO_OWNER/$REPO_NAME/pulls?state=closed&limit=200")
# Build release notes
NOTES_HEADER="# Release Notes: $CURRENT_RELEASE"$'\n\n'"## Changes"$'\n\n'
# Filter and format PRs
PR_LIST=$(echo "$PRS" | jq -r --arg prev_date "$PREVIOUS_DATE" --arg curr_date "$CURRENT_DATE" '
[.[] | select(.merged == true and .merged_at > $prev_date and .merged_at <= $curr_date)] |
sort_by(.merged_at) |
reverse |
.[] |
"* **\(.title)** ([#\(.number)](\(.html_url)))\n Author: @\(.user.username)\n Merged: \(.merged_at | split("T")[0])\n"
')
# Count PRs
PR_COUNT=$(echo "$PRS" | jq --arg prev_date "$PREVIOUS_DATE" --arg curr_date "$CURRENT_DATE" \
'[.[] | select(.merged == true and .merged_at > $prev_date and .merged_at <= $curr_date)] | length')
NOTES_FOOTER=$'\n\n'"---"$'\n\n'"**Total changes:** $PR_COUNT pull requests merged"
FULL_NOTES="${NOTES_HEADER}${PR_LIST}${NOTES_FOOTER}"
echo "Release notes generated: $PR_COUNT PRs found"
echo "======================================"
echo "$FULL_NOTES"
echo "======================================"
# Update release if requested
if [ "$UPDATE_RELEASE" = "true" ] && [ -n "$RELEASE_ID" ]; then
echo "Updating release description..."
NOTES_JSON=$(echo "$FULL_NOTES" | jq -Rs .)
curl -X PATCH \
-H "Authorization: token $GITEA_TOKEN" \
-H "Content-Type: application/json" \
"$GITEA_URL/api/v1/repos/$REPO_OWNER/$REPO_NAME/releases/$RELEASE_ID" \
-d "{\"body\":$NOTES_JSON}"
echo "Release description updated successfully!"
else
echo "Skipping release update"
fi