From 3b8abfeafc90830af507c8ea4aa282556e35a50b Mon Sep 17 00:00:00 2001 From: zy Date: Thu, 18 Sep 2025 23:19:00 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E6=B5=81=E7=A8=8B=20-=20PR=20=E5=90=88=E5=B9=B6?= =?UTF-8?q?=E6=97=B6=E8=A7=A6=E5=8F=91=EF=BC=8C=E8=87=AA=E5=8A=A8=E6=B8=85?= =?UTF-8?q?=E7=90=86=E6=97=A7=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 主要改进: - 改为 PR 合并到 main 时触发(不是每次 push) - 自动删除超过 10 个的旧 Release,保持发布历史整洁 - 移除 prerelease 标记,所有自动构建都是正式 Release - 恢复使用 v 前缀的版本号格式 - 清理了现有的 Draft 状态 Release 工作流程: 1. PR 合并到 main 分支时自动构建并发布 2. 自动清理,只保留最近 10 个 Release 3. 手动触发 tag-release.yml 发布语义化版本 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .claude/settings.local.json | 4 +++- .github/workflows/release.yml | 39 +++++++++++++++++++++++------------ 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/.claude/settings.local.json b/.claude/settings.local.json index dc42b38..c17ebd4 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -20,7 +20,9 @@ "mcp__playwright__browser_navigate", "mcp__playwright__browser_click", "mcp__playwright__browser_tab_select", - "Bash(gh pr merge:*)" + "Bash(gh pr merge:*)", + "Bash(gh release list:*)", + "Bash(awk:*)" ], "deny": [] } diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 25f8648..a7e0600 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,12 +1,9 @@ name: Build and Release on: - push: + pull_request: + types: [closed] branches: [ main ] - paths: - - '**.go' - - 'go.mod' - - 'go.sum' workflow_dispatch: permissions: @@ -15,6 +12,8 @@ permissions: jobs: build: runs-on: ubuntu-latest + # 只在 PR 被合并时运行,或手动触发 + if: (github.event.pull_request.merged == true) || (github.event_name == 'workflow_dispatch') steps: - uses: actions/checkout@v4 @@ -31,9 +30,9 @@ jobs: run: | TIMESTAMP=$(date +%Y.%m.%d.%H%M) COMMIT_SHA=$(git rev-parse --short HEAD) - RELEASE_NAME="Build-${TIMESTAMP}-${COMMIT_SHA}" - echo "release_name=${RELEASE_NAME}" >> $GITHUB_OUTPUT - echo "Generated release: ${RELEASE_NAME}" + VERSION="v${TIMESTAMP}-${COMMIT_SHA}" + echo "version=${VERSION}" >> $GITHUB_OUTPUT + echo "Generated version: ${VERSION}" - name: Build for multiple platforms run: | @@ -54,13 +53,27 @@ jobs: GOOS=linux GOARCH=amd64 go build -o xiaohongshu-mcp-linux-amd64 . GOOS=linux GOARCH=amd64 go build -o xiaohongshu-login-linux-amd64 ./cmd/login - - name: Create Release (without permanent tag) + - name: Clean up old releases + run: | + # 获取所有自动构建的 releases (v开头的时间戳格式) + RELEASES=$(gh release list --limit 100 | grep -E '^v[0-9]{4}\.[0-9]{2}\.[0-9]{2}\.[0-9]{4}-' | awk '{print $3}' | tail -n +11) + + # 删除超过 10 个的旧 releases 和对应的 tags + for release in $RELEASES; do + echo "Deleting old release: $release" + gh release delete "$release" --yes --cleanup-tag + done + env: + GH_TOKEN: ${{ github.token }} + continue-on-error: true + + - name: Create Release uses: softprops/action-gh-release@v1 with: - tag_name: ${{ steps.version.outputs.release_name }} - name: ${{ steps.version.outputs.release_name }} + tag_name: ${{ steps.version.outputs.version }} + name: Release ${{ steps.version.outputs.version }} draft: false - prerelease: true + prerelease: false body: | ## 🔧 自动构建版本 @@ -94,7 +107,7 @@ jobs: - **Commit**: ${{ github.sha }} - **Branch**: main - - **Build Time**: ${{ steps.version.outputs.release_name }} + - **Build Time**: ${{ steps.version.outputs.version }} files: | xiaohongshu-mcp-darwin-arm64 xiaohongshu-mcp-darwin-amd64