From 16ece31d57527d339a5418291d33c2297a8aac02 Mon Sep 17 00:00:00 2001 From: kory Date: Mon, 28 Sep 2026 10:30:27 +0800 Subject: [PATCH] ci(release): generate formatted markdown changelog and release notes for each release --- .github/workflows/release.yml | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8718a98..7a96538 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -20,13 +20,11 @@ jobs: with: fetch-depth: 0 - - name: Determine Version Tag & Generate Notes + - name: Determine Version Tag & Generate Notes id: versioning run: | PREV_TAG=$(git tag -l "v*" --sort=-v:refname | head -n1) - if [ -z "$PREV_TAG" ]; then - PREV_TAG="" - fi + echo "Previous tag: $PREV_TAG" if [[ "${{ github.ref }}" == refs/tags/v* ]]; then TAG="${GITHUB_REF#refs/tags/}" @@ -48,17 +46,23 @@ jobs: fi echo "tag=$TAG" >> $GITHUB_OUTPUT - # 生成有意义的变更日志内容 - echo "### 🚀 What's Changed in ${TAG}" > release_notes.md - echo "" >> release_notes.md + # 生成详细的 Release Changelog 正文 + cat << NOTES > release_notes.md + ### 🚀 What's Changed in ${TAG} + + NOTES + if [ -n "$PREV_TAG" ]; then git log "${PREV_TAG}..HEAD" --pretty=format:"- %s (%h by @%an)" >> release_notes.md else git log -n 10 --pretty=format:"- %s (%h by @%an)" >> release_notes.md fi + echo "" >> release_notes.md echo "" >> release_notes.md - echo "**Full Changelog**: https://github.com/${{ github.repository }}/compare/${PREV_TAG}...${TAG}" >> release_notes.md + if [ -n "$PREV_TAG" ]; then + echo "**Full Changelog**: https://github.com/${{ github.repository }}/compare/${PREV_TAG}...${TAG}" >> release_notes.md + fi cat release_notes.md - name: Set up Go @@ -82,11 +86,11 @@ jobs: sha256sum * > checksums.txt cd .. - - name: Create GitHub Release + - name: Create GitHub Release uses: softprops/action-gh-release@v2 with: tag_name: ${{ steps.versioning.outputs.tag }} name: Release ${{ steps.versioning.outputs.tag }} body_path: release_notes.md files: | - dist/* \ No newline at end of file + dist/*