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