fix: check_ci_status按时间取最新status,修复auto-merge一直等pending的bug #698
Reference in New Issue
Block a user
Delete Branch "fix/check-ci-status-order"
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 workflow里的check_ci_status.py假设statuses API按时间倒序返回,但Gitea实际是正序(旧→新)。导致取到第一条是最早的pending状态,一直等不到success,最终超时。
修复
用max()按created_at取最新的一条status,确保拿到的是最终状态。
影响
🚀 预览环境已部署
CI全绿,自动审批通过。
CI全绿,自动审批通过。
代码审查结果 - PR #698
⚠️ 问题(1个需要修改)
max(matching, key=lambda s: s.get("created_at", ""))存在严重的逻辑隐患。如果 API 返回的最新状态记录中缺失created_at字段,该记录的 key 将回退为空字符串""。在字符串比较中,""小于任何有效的时间戳字符串,导致max函数错误地选择了时间戳较早的旧记录,从而使脚本输出过时的 CI 状态,可能导致 CI 判断错误。💡 建议(1个可选)
matching[-1]获取最新记录。这不仅避免了字段缺失导致的排序错误,逻辑也更简洁,且时间复杂度从 O(N) 降低为 O(1)。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能无明显问题
🤖 由 AI 代码审查机器人自动生成 | 2026-07-22 08:51:26 | 模型:
🗑️ 预览环境已清理
PR #698 已关闭或合并,对应的预览环境已被清理。