Prhub

#26614 [CI] /rerun-test: descend into directories that a glob matched

原始 PR 作者 alisonshao 合并时间 2026-05-29 07:52 文件变更 1 提交数 3 评论 9 代码增减 +177 / -117

执行摘要

修复 /rerun-test 的目录递归与多 pool 调度问题

作为 #26422 的后续,/rerun-test 在实际使用中暴露了 glob 不递归和多注册池仅第一个生效的问题。具体示例:/rerun-test registered/attention/unittest/* 返回无匹配,因为 glob 的 * 不跨越 /;文件若同时注册了 4-gpu-b2001-gpu-large_extract_runner_config 仅返回第一个 pool,导致所有测试只调度到第一个 pool。

建议 CI 维护者和经常使用 /rerun-test 的开发者阅读此 PR,了解 glob 递归处理和多 pool 扇出的设计;尤其是 _extract_runner_configs 返回列表这一变更,可能影响依赖该函数的其他调用方。

讨论亮点

维护者 ch-wan 批准 PR,并引用 #26517 中的实际运行结果确认修复生效:'It works: https://github.com/sgl-project/sglang/pull/26517#issuecomment-4569234604'。

实现拆解

  1. expand_glob_spec 函数中,添加目录递归步骤:当 glob 匹配到目录时,递归搜索 test_*.py
  2. _extract_runner_config 重写为 _extract_runner_configs,使用 re.finditer 返回所有 register_cuda_ci 调用的 runner_config 和参数字符串。
  3. detect_suite_resolve_test_spec 改为返回列表,使一个文件可以对应多个 dispatch 项。
  4. handle_rerun_test 中,迭代 dispatch 列表,基于 (mode, runs_on, test_command) 去重,确保每个 pool 调度一次但不丢失多 pool 扇出。
  5. find_workflow_run_url 中,当 display_title 以 ... 结尾时,使用前缀匹配,避免因 GitHub 截断而找不到运行 URL。
文件 模块 状态 重要度
scripts/ci/utils/slash_command_handler.py CI 脚本 modified 6.48

关键符号

_extract_runner_configs expand_glob_spec detect_suite _resolve_test_spec handle_rerun_test find_workflow_run_url

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

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

1) 递归目录可能意外匹配深层目录的非预期测试文件,但限定为 test_*.py 模式,风险低。
2) 多 pool 扇出可能导致同一测试在多个 pool 上运行,增加 CI 负载,但这是预期行为且过去应该如此。
3) display_title 前缀匹配可能错误匹配不相关的运行,但由于命令长度足够且前缀唯一,碰撞概率极低。
4) 对现有使用明确 glob 模式(如 **/test_*.py)的用户无影响。

影响范围:所有使用 /rerun-test 命令的开发者。改进后,命令能正确匹配嵌套子目录中的测试,并自动在测试文件注册的所有 runner pool 上调度。这提高了 CI 重运行准确性和效率,减少了人工 workaround。

全局匹配行为变更 调度重复风险 display_title 前缀匹配准确度

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论