refactor: 优化发布流程 - PR 合并时触发,自动清理旧版本

主要改进:
- 改为 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 <noreply@anthropic.com>
This commit is contained in:
zy
2025-09-18 23:19:00 +08:00
parent 4c4b9cb47a
commit 3b8abfeafc
2 changed files with 29 additions and 14 deletions

View File

@@ -20,7 +20,9 @@
"mcp__playwright__browser_navigate", "mcp__playwright__browser_navigate",
"mcp__playwright__browser_click", "mcp__playwright__browser_click",
"mcp__playwright__browser_tab_select", "mcp__playwright__browser_tab_select",
"Bash(gh pr merge:*)" "Bash(gh pr merge:*)",
"Bash(gh release list:*)",
"Bash(awk:*)"
], ],
"deny": [] "deny": []
} }

View File

@@ -1,12 +1,9 @@
name: Build and Release name: Build and Release
on: on:
push: pull_request:
types: [closed]
branches: [ main ] branches: [ main ]
paths:
- '**.go'
- 'go.mod'
- 'go.sum'
workflow_dispatch: workflow_dispatch:
permissions: permissions:
@@ -15,6 +12,8 @@ permissions:
jobs: jobs:
build: build:
runs-on: ubuntu-latest runs-on: ubuntu-latest
# 只在 PR 被合并时运行,或手动触发
if: (github.event.pull_request.merged == true) || (github.event_name == 'workflow_dispatch')
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
@@ -31,9 +30,9 @@ jobs:
run: | run: |
TIMESTAMP=$(date +%Y.%m.%d.%H%M) TIMESTAMP=$(date +%Y.%m.%d.%H%M)
COMMIT_SHA=$(git rev-parse --short HEAD) COMMIT_SHA=$(git rev-parse --short HEAD)
RELEASE_NAME="Build-${TIMESTAMP}-${COMMIT_SHA}" VERSION="v${TIMESTAMP}-${COMMIT_SHA}"
echo "release_name=${RELEASE_NAME}" >> $GITHUB_OUTPUT echo "version=${VERSION}" >> $GITHUB_OUTPUT
echo "Generated release: ${RELEASE_NAME}" echo "Generated version: ${VERSION}"
- name: Build for multiple platforms - name: Build for multiple platforms
run: | 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-mcp-linux-amd64 .
GOOS=linux GOARCH=amd64 go build -o xiaohongshu-login-linux-amd64 ./cmd/login 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 uses: softprops/action-gh-release@v1
with: with:
tag_name: ${{ steps.version.outputs.release_name }} tag_name: ${{ steps.version.outputs.version }}
name: ${{ steps.version.outputs.release_name }} name: Release ${{ steps.version.outputs.version }}
draft: false draft: false
prerelease: true prerelease: false
body: | body: |
## 🔧 自动构建版本 ## 🔧 自动构建版本
@@ -94,7 +107,7 @@ jobs:
- **Commit**: ${{ github.sha }} - **Commit**: ${{ github.sha }}
- **Branch**: main - **Branch**: main
- **Build Time**: ${{ steps.version.outputs.release_name }} - **Build Time**: ${{ steps.version.outputs.version }}
files: | files: |
xiaohongshu-mcp-darwin-arm64 xiaohongshu-mcp-darwin-arm64
xiaohongshu-mcp-darwin-amd64 xiaohongshu-mcp-darwin-amd64