fix: check_ci_status按时间取最新status,修复auto-merge一直等pending的bug #698

Merged
xiaoxia merged 1 commits from fix/check-ci-status-order into develop 2026-07-22 08:58:00 +08:00
Owner

问题

auto-merge workflow里的check_ci_status.py假设statuses API按时间倒序返回,但Gitea实际是正序(旧→新)。导致取到第一条是最早的pending状态,一直等不到success,最终超时。

修复

用max()按created_at取最新的一条status,确保拿到的是最终状态。

影响

  • auto-merge和auto-approve都依赖这个脚本
  • 修复后auto-merge能正确识别CI已通过的PR,不会再出现「全绿但不合并」的情况(之前#691 #694 #696都遇到了)
## 问题 auto-merge workflow里的check_ci_status.py假设statuses API按时间倒序返回,但Gitea实际是正序(旧→新)。导致取到第一条是最早的pending状态,一直等不到success,最终超时。 ## 修复 用max()按created_at取最新的一条status,确保拿到的是最终状态。 ## 影响 - auto-merge和auto-approve都依赖这个脚本 - 修复后auto-merge能正确识别CI已通过的PR,不会再出现「全绿但不合并」的情况(之前#691 #694 #696都遇到了)
xiaoxia added 1 commit 2026-07-22 08:43:39 +08:00
fix: check_ci_status按创建时间取最新status,修复auto-merge误等pending的bug
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 / Check if frontend-only change (pull_request) Successful in 30s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m12s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 45s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 2m39s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 3m45s
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 / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 1m45s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 4m34s
AI Code Review / AI Code Review (pull_request) Successful in 5m58s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 3m28s
CI/CD Pipeline / Deploy Production (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 / PR Build Worker Image (pull_request) Successful in 8m8s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 29s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m18s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 38m58s
b5b15d1f76

🚀 预览环境已部署

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

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

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

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

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

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-07-22 08:50:07 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
Collaborator

代码审查结果 - PR #698

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

  1. scripts/check_ci_status.py 第43行max(matching, key=lambda s: s.get("created_at", "")) 存在严重的逻辑隐患。如果 API 返回的最新状态记录中缺失 created_at 字段,该记录的 key 将回退为空字符串 ""。在字符串比较中,"" 小于任何有效的时间戳字符串,导致 max 函数错误地选择了时间戳较早的旧记录,从而使脚本输出过时的 CI 状态,可能导致 CI 判断错误。

💡 建议(1个可选)

  1. 代码注释提到“Gitea statuses API按时间正序返回”,如果此 API 行为稳定,建议直接使用 matching[-1] 获取最新记录。这不仅避免了字段缺失导致的排序错误,逻辑也更简洁,且时间复杂度从 O(N) 降低为 O(1)。

格式检查通过 | 逻辑审查需修改 | 性能无明显问题


🤖 由 AI 代码审查机器人自动生成 | 2026-07-22 08:51:26 | 模型:

## 代码审查结果 - PR #698 ### ⚠️ 问题(1个需要修改) 1. **scripts/check_ci_status.py 第43行**:`max(matching, key=lambda s: s.get("created_at", ""))` 存在严重的逻辑隐患。如果 API 返回的最新状态记录中缺失 `created_at` 字段,该记录的 key 将回退为空字符串 `""`。在字符串比较中,`""` 小于任何有效的时间戳字符串,导致 `max` 函数错误地选择了时间戳较早的旧记录,从而使脚本输出过时的 CI 状态,可能导致 CI 判断错误。 ### 💡 建议(1个可选) 1. 代码注释提到“Gitea statuses API按时间正序返回”,如果此 API 行为稳定,建议直接使用 `matching[-1]` 获取最新记录。这不仅避免了字段缺失导致的排序错误,逻辑也更简洁,且时间复杂度从 O(N) 降低为 O(1)。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能无明显问题 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-22 08:51:26 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia merged commit 809339fee3 into develop 2026-07-22 08:58:00 +08:00

🗑️ 预览环境已清理

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

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

🗑️ **预览环境已清理** PR #698 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.