diff --git a/.gitea/workflows/auto-merge.yml b/.gitea/workflows/auto-merge.yml index d02d1b141..64f386b20 100644 --- a/.gitea/workflows/auto-merge.yml +++ b/.gitea/workflows/auto-merge.yml @@ -1,4 +1,4 @@ -name: Auto Merge PRs (main) +name: Auto Merge CI PRs on: pull_request: @@ -6,9 +6,9 @@ on: jobs: auto-merge: - name: Auto Merge on CI Green + Approved (main) - runs-on: ubuntu-latest - if: github.event_name == 'pull_request' && !github.event.pull_request.draft && github.event.pull_request.base.ref == 'main' + name: Auto Merge on CI Green + Approved + runs-on: ci-check + if: github.event_name == 'pull_request' && !github.event.pull_request.draft && github.event.pull_request.base.ref == 'develop' timeout-minutes: 30 steps: - name: Checkout code @@ -28,19 +28,33 @@ jobs: echo "PR #${PR_NUMBER} - 检查CI状态+审批并自动合并到${BASE_REF}" echo - # 只合main分支 - if [ "$BASE_REF" != "main" ]; then - echo "Skip: 目标分支不是main" + # 只合develop分支 + if [ "$BASE_REF" != "develop" ]; then + echo "Skip: 目标分支不是develop" exit 0 fi - # main分支门禁:Validate + Frontend Lint - CONTEXTS=( - "CI/CD Pipeline / Validate Code Quality And Tests (pull_request)" - "Tests / test (pull_request)" - "CI/CD Pipeline / Frontend Lint (pull_request)" - ) - echo "检查门禁: ${#CONTEXTS[@]} 项" + # 判断是否纯前端改动 + FILES=$(curl -s -H "Authorization: token ${GITHUB_TOKEN}" \ + "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/pulls/${PR_NUMBER}/files?limit=300" \ + | python3 -c "import sys,json; [print(f['filename']) for f in json.load(sys.stdin)]") + TOTAL=$(echo "$FILES" | grep -cv '^$' || true) + FRONTEND_COUNT=$(echo "$FILES" | grep -c '^apps/web/' || true) + BACKEND_COUNT=$((TOTAL - FRONTEND_COUNT)) + echo "变更文件: ${TOTAL} 个 (前端: ${FRONTEND_COUNT}, 后端/公共: ${BACKEND_COUNT})" + + if [ "$BACKEND_COUNT" = "0" ] && [ "$FRONTEND_COUNT" -gt "0" ]; then + CONTEXTS=("CI/CD Pipeline / Frontend Lint (pull_request)") + echo "纯前端改动,只检查Frontend Lint" + else + CONTEXTS=( + "CI/CD Pipeline / Validate Code Quality And Tests (pull_request)" + "CI/CD Pipeline / Unit Tests (pull_request)" + "CI/CD Pipeline / Frontend Lint (pull_request)" + "CI/CD Pipeline / Integration Tests (pull_request)" + ) + echo "检查全部四门禁" + fi echo # 轮询等待,最多30分钟(180次x10秒) @@ -85,12 +99,12 @@ jobs: exit 0 fi - # 执行merge(main分支用merge,保留历史) + # 执行squash merge HTTP_CODE=$(curl -s -o /tmp/merge_resp.json -w "%{http_code}" \ -X POST \ -H "Authorization: token ${MERGE_TOKEN}" \ -H "Content-Type: application/json" \ - -d '{"do":"merge","merge_title_field":"","merge_message_field":"","delete_branch_after_merge":true,"force_merge":false}' \ + -d '{"do":"squash","merge_title_field":"","merge_message_field":"","delete_branch_after_merge":true,"force_merge":false}' \ "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/pulls/${PR_NUMBER}/merge") echo "合并API HTTP状态: $HTTP_CODE" @@ -130,3 +144,4 @@ jobs: echo echo "等待超时(30分钟)" exit 0 +