# PR #25018 完整报告

- 仓库：`sgl-project/sglang`
- 标题：rerun-test: show running state in reply comment
- 合并时间：2026-05-12 08:04
- 原文链接：http://prhub.com.cn/sgl-project/sglang/pull/25018

---

# 执行摘要

- 一句话：rerun-test 回复新增运行态图标
- 推荐动作：该 PR 值得阅读，尤其是 update_rerun_test_status.py 中关于状态机、幂等性和并发控制的实现思路，为类似 GitHub API 操作提供了可参考的模式。

# 功能与动机

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

# 实现拆解

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 脚本；类别 infra；类型 infrastructure；符号 gh_request, main）: 核心新增文件，实现状态图标更新逻辑，支持 running 状态，包含幂等和重试设计。
- `scripts/ci/utils/write_rerun_test_result.py`（模块 CI 脚本；类别 infra；类型 infrastructure；符号 main）: 被删除的旧脚本，其功能由新脚本替代。
- `.github/workflows/rerun-test.yml`（模块 CI 工作流；类别 infra；类型 infrastructure）: 工作流文件，新增 running 状态上报 step 并更新回调脚本。

关键符号：gh_request, main


# 评论区精华

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

- 无实质审查讨论 (other): 无争议，直接合并。

# 风险与影响

- 风险：
 1. 幂等性：通过 :done 标记和重试机制保证重复调用安全。
 2. 依赖变化：新脚本使用标准库 urllib 代替 requests，不再需要 pip install requests，消除了一个运行时依赖，风险可控。
 3. 并发写入：多个 batch 同时更新同一 comment 可能存在竞态，但设计上接受 small window 内的不一致（丢失 🔄）。
 4. 兼容性：旧脚本被删除，所有调用点均已更新，无残留。
 5. 权限：新增 issues: write 权限，确保 token 能编辑 comment。
 - 影响：直接使用 /rerun-test 的开发者（项目维护者）将看到更细粒度的反馈：从 ⏳ → 🔄 → ✅/❌，能及时判断 runner 是否已开始执行。改动仅限于 CI 工具链，不影响核心推理逻辑或生产部署。影响程度低，但可用性提升显著。
 - 风险标记：幂等性设计 , 并发写入风险 , 移除 requests 依赖

# 关联脉络

- 暂无明显关联 PR