fix(ci): 修复CI状态检查误判导致提前合并的bug #486
Reference in New Issue
Block a user
Delete Branch "fix/check-ci-status-false-positive"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
问题
auto-merge 有时会在CI还没跑完的时候就去合并,返回405。
根因
scripts/check_ci_status.py里,如果找不到目标context的status,就返回 "success"(假设该workflow没触发不需要检查)。但实际上更常见的情况是CI还没开始写status(pending状态还没出现)。特别是把 auto-merge.yml 的 checkout 从 actions/checkout@v3 改成 tar.gz 方式后,checkout 速度变快很多,CI还没来得及写第一个status,脚本就全找不到context、全返回success,导致误判全绿。
修复内容
1. scripts/check_ci_status.py(核心修复)
2. auto-merge.yml 405处理优化
3. auto-approve.yml 同步保护
4. 增加"至少等待一轮"保护
修改文件
代码审查结果 - PR #486
⚠️ 问题(2个需要修改)
success改为pending存在死锁风险。如果 CI 因路径过滤或其他规则被跳过(且未发送skipped状态),脚本将一直返回pending,导致外层循环空转直至超时(20-30分钟),严重影响自动化效率。ANY_PENDING变量已定义并赋值,但在合并判断逻辑中未被使用。由于ALL_SUCCESS初始化为true,当 CI 状态为pending时,脚本仍会尝试执行合并操作,导致产生不必要的 405 错误并消耗 API 配额,仅靠重试机制来掩盖逻辑缺陷。💡 建议(1个可选)
MAX_405_RETRIES=6)仅能覆盖约60秒的窗口。如果 CI 启动或执行较慢,可能导致重试次数耗尽而误报失败。建议根据实际 CI 耗时适当增加重试次数或延长单次休眠时间。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能
🤖 由 AI 代码审查机器人自动生成 | 2026-07-17 20:43:54 | 模型:
CI全绿,自动审批通过。
CI全绿,自动审批通过。