diff --git a/.github/workflows/post-merge-verify.yml b/.github/workflows/post-merge-verify.yml index 2403f3f..ce79404 100644 --- a/.github/workflows/post-merge-verify.yml +++ b/.github/workflows/post-merge-verify.yml @@ -71,6 +71,11 @@ jobs: RECENT=$(gh api "repos/$REPO/pulls?state=all&sort=created&direction=desc&per_page=20" \ --jq '[.[] | select(.title | test("\\[auto-revert\\]")) | select(.created_at > (now - 3600 | todateiso8601))] | length') echo "recent=$RECENT" >> "$GITHUB_OUTPUT" + # 闸 3(P2-6 T3 熔断,ADR-0041):24h 窗口内已合并的 [auto-revert] PR ≥ 3 + # → 暂停该仓自动回滚(防"坏了合、合了 revert"振荡烧额度),直接升级 P0 叫人 + RCNT=$(gh api "repos/$REPO/pulls?state=all&sort=updated&direction=desc&per_page=50" --jq '[.[] | select(.title | test("\[auto-revert\]")) | select(.merged_at != null) | select(.merged_at > (now - 86400 | todateiso8601))] | length') + echo "reverts_24h=$RCNT" >> "$GITHUB_OUTPUT" + echo "熔断检查:24h 内已合并 auto-revert = $RCNT(>=3 触发暂停)" - name: App 令牌(AG-1 身份——revert PR 的 gate 须能被触发;GITHUB_TOKEN 造的 PR 不触发工作流) id: app continue-on-error: true # App 未安装本仓时降级为仅告警(不静默——下方有判定) @@ -83,7 +88,7 @@ jobs: permission-contents: write permission-pull-requests: write - name: 自动 revert(REST revert 端点 + auto-merge) - if: steps.guard.outputs.nested != 'true' && steps.guard.outputs.recent == '0' && steps.app.outcome == 'success' + if: steps.guard.outputs.nested != 'true' && steps.guard.outputs.recent == '0' && steps.guard.outputs.reverts_24h < '3' && steps.app.outcome == 'success' env: GH_TOKEN: ${{ steps.app.outputs.token }} run: | @@ -100,13 +105,13 @@ jobs: echo "revert PR #$RESP 已建,enable auto-merge" gh pr merge "$RESP" --repo "$REPO" --auto --squash - name: 降级/兜底告警(revert 不可用或被闸拦) - if: failure() || steps.app.outcome != 'success' || steps.guard.outputs.nested == 'true' || steps.guard.outputs.recent != '0' + if: failure() || steps.app.outcome != 'success' || steps.guard.outputs.nested == 'true' || steps.guard.outputs.recent != '0' || steps.guard.outputs.reverts_24h >= '3' env: GH_TOKEN: ${{ github.token }} run: | gh issue create --repo "$REPO" \ --title "P0: post-merge 冒烟失败且自动 revert 未执行(run ${{ github.run_id }})" \ - --body "合并 ${SHA:0:8} 后冒烟失败。自动 revert 未执行的原因:App 令牌不可用(未安装本仓?)/ 防回环闸(嵌套 revert 或 1h 限频)/ 无关联 PR。人工复核并回滚:$RUN_URL(ADR-0041)" \ + --body "合并 ${SHA:0:8} 后冒烟失败。自动 revert 未执行的原因:App 令牌不可用(未安装本仓?)/ 防回环闸(嵌套 revert 或 1h 限频)/ 熔断(24h 已合并 revert >=3,暂停自动回滚防振荡)/ 无关联 PR。人工复核并回滚:$RUN_URL(ADR-0041)" \ --label P0 || \ gh issue create --repo "$REPO" \ --title "P0: post-merge 冒烟失败且自动 revert 未执行(run ${{ github.run_id }})" \