From 002c097def5421a6b034c2b8dc46551604a0db49 Mon Sep 17 00:00:00 2001 From: LanQin Date: Sun, 21 Jun 2026 02:49:06 +0800 Subject: [PATCH] =?UTF-8?q?ci(.github):=20=E8=87=AA=E5=8A=A8=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=B9=B6=E5=8F=91=E5=B8=83=20GitHub=20Release?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 `.github/release.yml`,统一分类发布说明中的变更类型。 - 扩展 Docker 发布工作流,生成基于 tag 的发布说明并创建或更新 GitHub Release。 - 同步补充镜像列表、使用文档和回退逻辑,提升发布信息完整性。 --- .github/release.yml | 34 +++++++++++++ .github/workflows/docker.yml | 95 +++++++++++++++++++++++++++++++++++- 2 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 .github/release.yml diff --git a/.github/release.yml b/.github/release.yml new file mode 100644 index 0000000..3efda1c --- /dev/null +++ b/.github/release.yml @@ -0,0 +1,34 @@ +changelog: + exclude: + labels: + - skip-changelog + - ignore-for-release + categories: + - title: 🚨 破坏性变更 + labels: + - breaking-change + - breaking change + - title: 🔒 安全更新 + labels: + - security + - title: ✨ 新功能 + labels: + - feature + - enhancement + - title: 🐛 问题修复 + labels: + - bug + - fix + - title: 📚 文档 + labels: + - documentation + - docs + - title: 🧰 工程维护 + labels: + - chore + - ci + - dependencies + - refactor + - title: 其他更新 + labels: + - "*" diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 538bd95..66f7590 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -6,8 +6,10 @@ on: - "v*" permissions: - contents: read + contents: write packages: write + pull-requests: read + issues: read concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -161,3 +163,94 @@ jobs: VITE_RELEASE_URL=${{ needs.release.outputs.release_url }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} + + github-release: + name: Create GitHub release + runs-on: ubuntu-latest + needs: + - release + - docker + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Generate release notes + env: + GH_TOKEN: ${{ github.token }} + shell: bash + run: | + tag="${{ needs.release.outputs.tag }}" + version="${{ needs.release.outputs.version }}" + repo="${GITHUB_REPOSITORY}" + repo_url="https://github.com/${repo}" + image_base="${REGISTRY}/${repo}" + image_base="${image_base,,}" + current_commit="$(git rev-list -n 1 "${tag}")" + previous_tag="$(git describe --tags --abbrev=0 "${current_commit}^" 2>/dev/null || true)" + generate_args=(-f "tag_name=${tag}") + if [[ -n "${previous_tag}" ]]; then + generate_args+=(-f "previous_tag_name=${previous_tag}") + fi + + if ! gh api -X POST "repos/${repo}/releases/generate-notes" "${generate_args[@]}" --jq '.body' > generated-release-notes.md; then + echo "GitHub 自动生成更新日志失败,已回退到提交列表。" > generated-release-notes.md + echo >> generated-release-notes.md + if [[ -n "${previous_tag}" ]]; then + git log --reverse --pretty=format:"- %s ([%h](${repo_url}/commit/%H))" "${previous_tag}..${tag}" >> generated-release-notes.md + echo >> generated-release-notes.md + echo >> generated-release-notes.md + echo "完整更新日志: [${previous_tag}...${tag}](${repo_url}/compare/${previous_tag}...${tag})" >> generated-release-notes.md + else + echo "- 首个公开版本。" >> generated-release-notes.md + echo >> generated-release-notes.md + echo "当前提交: [${GITHUB_SHA:0:7}](${repo_url}/commit/${GITHUB_SHA})" >> generated-release-notes.md + fi + fi + + cat > release-notes.md <> release-notes.md + + - name: Create or update GitHub release + env: + GH_TOKEN: ${{ github.token }} + shell: bash + run: | + tag="${{ needs.release.outputs.tag }}" + title="LanQin Email ${tag}" + if gh release view "${tag}" >/dev/null 2>&1; then + gh release edit "${tag}" --title "${title}" --notes-file release-notes.md --latest + else + gh release create "${tag}" --verify-tag --title "${title}" --notes-file release-notes.md --latest + fi