From 0100b771b09c0fe4c6a59b6ac86d0a6db05a123f Mon Sep 17 00:00:00 2001 From: Syngnat Date: Fri, 20 Mar 2026 16:07:25 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20ci(release):=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=20Release=20Notes=20=E8=87=AA=E5=8A=A8=E7=94=9F?= =?UTF-8?q?=E6=88=90=EF=BC=8C=E6=8C=89=20commit=20=E5=89=8D=E7=BC=80?= =?UTF-8?q?=E5=88=86=E7=B1=BB=E5=B1=95=E7=A4=BA=E8=AF=A6=E7=BB=86=E5=8F=98?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 替换 generate_release_notes 为 git log 提取 commit message - 按 emoji 前缀分 6 组:✨新功能、🐛修复、⚡性能、♻️重构、🌐国际化、🔧其他 - 底部附加 compare 链接,空分类自动跳过 --- .github/workflows/release.yml | 68 ++++++++++++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5c041b1..8987a7a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -613,6 +613,72 @@ jobs: sha256sum "${FILES[@]}" > SHA256SUMS fi + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Generate Changelog + id: changelog + shell: bash + run: | + set -euo pipefail + TAG="${{ github.ref_name }}" + # 获取上一个 tag + PREV_TAG=$(git tag --sort=-creatordate | grep -E '^v' | sed -n '2p' || true) + if [ -z "$PREV_TAG" ]; then + echo "⚠️ 未找到上一个 tag,使用全部 commit" + RANGE="$TAG" + else + RANGE="${PREV_TAG}..${TAG}" + fi + + echo "📋 生成更新日志:$RANGE" + + # 提取 commit 消息(排除 merge commit) + COMMITS=$(git log "$RANGE" --no-merges --pretty=format:'%s' 2>/dev/null || true) + if [ -z "$COMMITS" ]; then + BODY="暂无提交记录。" + else + CAT_FEAT="" + CAT_FIX="" + CAT_PERF="" + CAT_REFACTOR="" + CAT_I18N="" + CAT_OTHER="" + + while IFS= read -r line; do + [ -z "$line" ] && continue + case "$line" in + ✨*|*feat*) CAT_FEAT="${CAT_FEAT}\n- ${line}" ;; + 🐛*|*fix*) CAT_FIX="${CAT_FIX}\n- ${line}" ;; + ⚡*|*perf*) CAT_PERF="${CAT_PERF}\n- ${line}" ;; + ♻️*|*refactor*) CAT_REFACTOR="${CAT_REFACTOR}\n- ${line}" ;; + 🌐*) CAT_I18N="${CAT_I18N}\n- ${line}" ;; + 🔧*|🔨*|*chore*) CAT_OTHER="${CAT_OTHER}\n- ${line}" ;; + *) CAT_OTHER="${CAT_OTHER}\n- ${line}" ;; + esac + done <<< "$COMMITS" + + BODY="" + [ -n "$CAT_FEAT" ] && BODY="${BODY}## ✨ 新功能\n${CAT_FEAT}\n\n" + [ -n "$CAT_FIX" ] && BODY="${BODY}## 🐛 问题修复\n${CAT_FIX}\n\n" + [ -n "$CAT_PERF" ] && BODY="${BODY}## ⚡ 性能优化\n${CAT_PERF}\n\n" + [ -n "$CAT_REFACTOR" ] && BODY="${BODY}## ♻️ 重构\n${CAT_REFACTOR}\n\n" + [ -n "$CAT_I18N" ] && BODY="${BODY}## 🌐 国际化\n${CAT_I18N}\n\n" + [ -n "$CAT_OTHER" ] && BODY="${BODY}## 🔧 其他变更\n${CAT_OTHER}\n\n" + + # 附加 compare 链接 + if [ -n "$PREV_TAG" ]; then + REPO_URL="${{ github.server_url }}/${{ github.repository }}" + BODY="${BODY}---\n**完整变更**: [${PREV_TAG}...${TAG}](${REPO_URL}/compare/${PREV_TAG}...${TAG})\n" + fi + fi + + # 写入到文件避免多行环境变量问题 + printf '%b' "$BODY" > /tmp/changelog.md + echo "changelog_file=/tmp/changelog.md" >> "$GITHUB_OUTPUT" + - name: Create Release uses: softprops/action-gh-release@v2 if: startsWith(github.ref, 'refs/tags/') @@ -620,6 +686,6 @@ jobs: files: release-assets/* draft: true make_latest: true - generate_release_notes: true + body_path: ${{ steps.changelog.outputs.changelog_file }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}