Prhub

#25018 rerun-test: show running state in reply comment

原始 PR 作者 hnyls2002 合并时间 2026-05-12 08:04 文件变更 3 提交数 1 评论 5 代码增减 +173 / -108

执行摘要

rerun-test 回复新增运行态图标

PR body 指出:当前 reply comment 仅在调度(⏳)和完成(✅/❌)之间切换,缺少中间状态,开发者无法判断 GPU runner 是否已开始执行。新增运行中状态(🔄)让反馈更及时。

该 PR 值得阅读,尤其是 update_rerun_test_status.py 中关于状态机、幂等性和并发控制的实现思路,为类似 GitHub API 操作提供了可参考的模式。

讨论亮点

本 PR 未触发实质性的 review 讨论,但脚本设计本身包含了对并发竞态的权衡:在 docstring 中说明不同 marker 的最终写回步骤通过 job 级 concurrency 保证串行,而 running 状态 step 不保证串行,但最坏情况只是丢失一次 🔄 闪烁。

实现拆解

  1. 新增 update_rerun_test_status.py 脚本,作为原本 write_rerun_test_result.py 的全功能替代。该脚本接收 --comment-id、--marker、--status 和 --repo 参数,使用 GitHub REST API 读取 comment 并更新对应 marker 行的图标。支持三种状态:dispatched (⏳,由 slash-command handler 设置)、running (🔄,由 runner 启动后设置)、success/failure (✅/❌,由测试结果决定)。脚本包含重试逻辑和幂等判断:若 marker 已包含 :done 后缀则跳过;若 comment 未就绪则最多重试 3 次。
  2. 删除原 write_rerun_test_result.py,其功能完全由新脚本接管,且新脚本增加了 running 状态支持。
  3. 修改 .github/workflows/rerun-test.yml:在两个 runner job(GPU 和 CPU)中添加新的 "Mark runner picked up" step,在安装依赖前调用 update_rerun_test_status.py --status running;同时将最终的 "Write back result" step 改为调用同一脚本并传入 done 状态;移除原 pip install requests 步骤,因为新脚本使用标准库 urllib 避免外部依赖。此外,为两个 job 添加 permissions: contents: read, issues: write 以允许写入 comment。
文件 模块 状态 重要度
scripts/ci/utils/update_rerun_test_status.py CI 脚本 added 6.52
scripts/ci/utils/write_rerun_test_result.py CI 脚本 removed 5.39
.github/workflows/rerun-test.yml CI 工作流 modified 4.41

关键符号

gh_request main

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

无实质审查讨论 other

PR 未触发 review comments,但脚本设计已在文档字符串中详尽讨论状态机与并发处理。

结论:无争议,直接合并。 · 已解决

风险与影响

  1. 幂等性:通过 :done 标记和重试机制保证重复调用安全。
  2. 依赖变化:新脚本使用标准库 urllib 代替 requests,不再需要 pip install requests,消除了一个运行时依赖,风险可控。
  3. 并发写入:多个 batch 同时更新同一 comment 可能存在竞态,但设计上接受 small window 内的不一致(丢失 🔄)。
  4. 兼容性:旧脚本被删除,所有调用点均已更新,无残留。
  5. 权限:新增 issues: write 权限,确保 token 能编辑 comment。

直接使用 /rerun-test 的开发者(项目维护者)将看到更细粒度的反馈:从 ⏳ → 🔄 → ✅/❌,能及时判断 runner 是否已开始执行。改动仅限于 CI 工具链,不影响核心推理逻辑或生产部署。影响程度低,但可用性提升显著。

幂等性设计 并发写入风险 移除 requests 依赖

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论