Prhub

#22308 [CI] Add pre-commit hook to validate test/registered/ files have CI registry

sgl-project/sglang · 作者 alisonshao · 合并时间 2026-04-09 06:59

分析状态 已生成
文件变更 2提交数 3 · 评论 3
代码增减 +62 / -0
run-ci test

执行摘要

新增 pre-commit 钩子,验证 test/registered/ 目录下测试文件是否包含 CI 注册调用,防止 CI 因缺失注册而中断。

根据PR body描述,test/registered/目录下的文件由run_suite.py的collect_tests()收集,要求每个文件必须包含CI注册调用。缺失注册会导致CI失败并抛出ValueError: No CI registry found。此前#22298已修复了一个因文件放置在test/registered/但未注册而中断所有CI套件的案例。此PR旨在通过pre-commit钩子在提交时捕获此类错误,避免等待CI失败。

该PR值得团队所有成员了解,特别是负责测试和CI的工程师。建议关注其如何复用现有ci_register.py逻辑来保持一致性,以及pre-commit钩子的配置方式,可作为类似基础设施检查的参考模板。

讨论亮点

由于review评论为空,没有公开的讨论或争议点。从提交历史看,作者添加了一个临时错误文件来验证钩子能正确捕获缺失注册的情况,并在验证后将其恢复,这表明了测试的严谨性。

实现拆解

实现分为两个关键部分:1) 在.pre-commit-config.yaml中添加新的pre-commit钩子check-registered-tests,配置为对test/registered/目录下的.py文件运行脚本scripts/ci/check_registered_tests.py。2) 新增脚本scripts/ci/check_registered_tests.py,该脚本复用ci_register.py中的ut_parse_one_file()函数(基于AST解析),以匹配run_suite.py中collect_tests()的逻辑,检查每个文件是否包含CI注册调用,并跳过conftest.py和__init__.py等文件。

文件 模块 状态 重要度
scripts/ci/check_registered_tests.py CI/ 测试基础设施 added 8.0
.pre-commit-config.yaml CI/ 开发工具 modified 6.0

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

关键符号

ut_parse_one_file main

评论区精华

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

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

风险与影响

风险较低:1) 脚本依赖ci_register.py的ut_parse_one_file()函数,如果该函数逻辑变更或存在bug,可能导致误报或漏报。2) 脚本仅检查文件是否包含注册调用,但未验证注册调用的正确性(如参数是否有效),可能仍有潜在CI问题。3) 新增的pre-commit钩子可能增加提交时的开销,但鉴于检查范围有限,影响应可忽略。

对用户无直接影响,主要影响开发团队:1) 提高CI稳定性,减少因测试文件注册缺失导致的CI中断,节省调试时间。2) 增强开发流程,通过早期验证预防问题,提升开发效率。3) 对系统性能无显著影响,仅增加提交时的轻量级检查。

依赖外部函数 验证不全面

关联 Issue

未识别关联 Issue

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

完整报告

执行摘要

本PR新增了一个pre-commit钩子,用于自动验证test/registered/目录下的Python测试文件是否包含必要的CI注册调用(如register_cuda_ci)。此举旨在预防因测试文件缺失注册而导致的CI中断问题,通过将检查提前到提交阶段,提升开发效率和CI稳定性。变更涉及两个文件:新增验证脚本和更新pre-commit配置,风险较低,主要影响开发团队的工作流程。

功能与动机

根据PR描述,test/registered/目录下的文件由run_suite.pycollect_tests()收集,要求每个文件必须包含CI注册调用。缺失注册会导致CI失败并抛出ValueError: No CI registry found。此前#22298已修复了一个因文件放置在test/registered/但未注册而中断所有CI套件的案例。本PR的动机是通过pre-commit钩子在提交时捕获此类错误,避免等待CI运行时失败,从而提高开发效率和CI可靠性。

实现拆解

实现分为两个关键部分:

  1. pre-commit配置更新:在.pre-commit-config.yaml中添加新的钩子check-registered-tests,配置如下:
    yaml - id: check-registered-tests name: check registered tests have CI registry entry: python3 scripts/ci/check_registered_tests.py language: system files: ^test/registered/.*\.py$ pass_filenames: false
    该钩子针对test/registered/目录下的所有.py文件运行验证脚本。

  2. 验证脚本实现:新增scripts/ci/check_registered_tests.py,核心逻辑包括:

    • 导入ci_register.py中的ut_parse_one_file()函数,复用其AST解析逻辑以匹配run_suite.py的行为。
    • 遍历test/registered/目录下的Python文件,跳过conftest.py__init__.py
    • 检查每个文件是否包含CI注册调用,若无则报错并提示将手动测试移至test/manual/
    • 脚本返回非零状态码以阻止提交,确保问题在早期被发现。

评论区精华

由于review评论为空,没有公开的讨论或争议点。但从提交历史可见,作者通过临时添加错误文件验证了钩子的有效性,并在确认后恢复,体现了测试的严谨性。

风险与影响

风险分析

  • 脚本依赖ci_register.pyut_parse_one_file()函数,若该函数逻辑变更或存在bug,可能导致误报或漏报。
  • 脚本仅检查文件是否包含注册调用,未验证注册调用的正确性(如参数有效性),潜在CI问题可能仍存在。
  • 新增pre-commit钩子可能轻微增加提交开销,但检查范围有限,影响可忽略。

影响分析

  • 对用户无直接影响。
  • 对开发团队:显著提高CI稳定性,减少因注册缺失导致的调试时间;增强开发流程,通过早期验证预防问题。
  • 对系统性能无显著影响。

关联脉络

本PR与近期历史PR关联如下:

  • #22298:PR body中提及该Issue修复了test/registered/目录下文件缺失注册导致CI中断的案例,是本PR的直接动机来源。
    • #22270(Refactor auto benchmark unit tests and fix CI bug):涉及test/registered/目录的重构和CI修复,与本PR在测试基础设施和CI稳定性方面有共同关注点。

整体来看,本PR是sglang仓库持续优化CI和测试基础设施的一部分,通过自动化检查提升代码质量和开发效率,符合近期多个PR(如#22395、#22391)对CI流程的改进趋势。

参与讨论