Prhub

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

原始 PR 作者 alisonshao 合并时间 2026-04-09 06:59 文件变更 2 提交数 3 评论 3 代码增减 +62 / -0

执行摘要

新增 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

关键符号

ut_parse_one_file main

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

评论区精华

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

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

风险与影响

风险较低:

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

对用户无直接影响,主要影响开发团队:

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

依赖外部函数 验证不全面

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论