执行摘要
本PR新增了一个pre-commit钩子,用于自动验证test/registered/目录下的Python测试文件是否包含必要的CI注册调用(如register_cuda_ci)。此举旨在预防因测试文件缺失注册而导致的CI中断问题,通过将检查提前到提交阶段,提升开发效率和CI稳定性。变更涉及两个文件:新增验证脚本和更新pre-commit配置,风险较低,主要影响开发团队的工作流程。
功能与动机
根据PR描述,test/registered/目录下的文件由run_suite.py的collect_tests()收集,要求每个文件必须包含CI注册调用。缺失注册会导致CI失败并抛出ValueError: No CI registry found。此前#22298已修复了一个因文件放置在test/registered/但未注册而中断所有CI套件的案例。本PR的动机是通过pre-commit钩子在提交时捕获此类错误,避免等待CI运行时失败,从而提高开发效率和CI可靠性。
实现拆解
实现分为两个关键部分:
-
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文件运行验证脚本。
-
验证脚本实现:新增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.py的ut_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流程的改进趋势。
参与讨论