fix(ci): 修复自动合并竞态问题 - auto-merge 需等待 auto-approve 完成 #1648

Closed
xiaoxia wants to merge 1 commits from fix/auto-merge-race-condition into develop
Owner

问题

auto-merge job 和 auto-approve job 并行执行,auto-merge 在审批完成前就检查审批状态,发现无审批后直接 exit 0。等审批完成时 merge job 已结束,无人再触发合并,PR 卡住。

实核:PR #1602 CI 全绿 + 已审批(auto-approve-bot APPROVED),但至今未合并。auto-merge job 在 6m43s 退出,auto-approve job 在 8m8s 才完成。

修复

1. pr-automation.yml: 添加 job 依赖

  • auto-merge 添加 needs: [auto-approve],确保审批完成后再尝试合并
  • auto-approve timeout: 3min → 10min
  • auto-merge timeout: 3min → 15min

2. auto_merge.sh: 改为轮询模式

  • 初始等待 60s → 30s
  • CI pending 时 exit 0(直接退出)→ return 1(继续重试)
  • 外层循环从固定 3 次改为 60 次 × 10s(最多 10 分钟轮询)
  • 每轮检查 PR 是否仍然 open,避免无意义等待
## 问题 auto-merge job 和 auto-approve job 并行执行,auto-merge 在审批完成前就检查审批状态,发现无审批后直接 exit 0。等审批完成时 merge job 已结束,无人再触发合并,PR 卡住。 **实核**:PR #1602 CI 全绿 + 已审批(auto-approve-bot APPROVED),但至今未合并。auto-merge job 在 6m43s 退出,auto-approve job 在 8m8s 才完成。 ## 修复 ### 1. pr-automation.yml: 添加 job 依赖 - auto-merge 添加 `needs: [auto-approve]`,确保审批完成后再尝试合并 - auto-approve timeout: 3min → 10min - auto-merge timeout: 3min → 15min ### 2. auto_merge.sh: 改为轮询模式 - 初始等待 60s → 30s - CI pending 时 `exit 0`(直接退出)→ `return 1`(继续重试) - 外层循环从固定 3 次改为 60 次 × 10s(最多 10 分钟轮询) - 每轮检查 PR 是否仍然 open,避免无意义等待
xiaoxia added 1 commit 2026-09-03 15:48:00 +08:00
fix(ci): 修复自动合并竞态问题
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 16s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Failing after 27s
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 54s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 38s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m16s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m5s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m17s
AI Code Review / AI Code Review (pull_request) Successful in 5m51s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 5m37s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 7m21s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 3m58s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Failing after 57s
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Failing after 18s
ffd02a3ec8
问题:auto-merge job 和 auto-approve job 并行执行,auto-merge
在审批完成前就检查审批状态,发现无审批后直接退出。等审批完成时
merge job 已结束,无人再触发合并,PR 卡住无法自动合并。

实核:PR #1602 CI 全绿 + 已审批,但 PR 至今未合并。
auto-merge 在 6m43s 退出,auto-approve 在 8m8s 才完成。

修复:
1. pr-automation.yml: auto-merge 添加 needs: [auto-approve],
   确保审批完成后再尝试合并
2. pr-automation.yml: auto-approve timeout 从 3min 增至 10min,
   auto-merge timeout 从 3min 增至 15min
3. auto_merge.sh: 将单次检查改为轮询模式(30s初始等待 + 60次×10s
   轮询 = 最多10分钟),CI pending 时 return 1 继续重试而非 exit 0
   直接退出

🚀 预览环境已部署

项目 详情
PR号 #1648
预览链接 https://pr-1648.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1648 | | 预览链接 | [https://pr-1648.preview.xiaoxiajianji.com](https://pr-1648.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
Collaborator

代码审查结果 - PR #1648

⚠️ 问题(0个需要修改)

💡 建议(0个可选)


格式检查通过 | 逻辑审查通过 | 性能良好


🤖 由 AI 代码审查机器人自动生成 | 2026-09-03 07:53:46 | 模型:

## 代码审查结果 - PR #1648 ### ⚠️ 问题(0个需要修改) 无 ### 💡 建议(0个可选) 无 --- ✅ 格式检查通过 | ✅ 逻辑审查通过 | ✅ 性能良好 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-09-03 07:53:46 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia closed this pull request 2026-09-03 15:55:20 +08:00

🗑️ 预览环境已清理

PR #1648 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #1648 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Some checks are pending
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 26s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 24s

Pull request closed

Sign in to join this conversation.