Prhub

#23201 fix(ci): repair path filters regressed by #21482

原始 PR 作者 Kangyan-Zhou 合并时间 2026-04-20 11:34 文件变更 6 提交数 1 评论 1 代码增减 +9 / -9

执行摘要

修复 CI 路径过滤器中的否定样式错误,确保关键构建文件正确触发测试。

PR #21482 在合并时引入了两个不同的否定样式:对 main_package 和 test 使用正确的 basename-level 形式(如 "python/sglang/!(multimodal_gen)//!(*.md)"),但对 sgl_kernel 和 multimodal_gen 使用了错误的扩展级形式(如 "sgl-kernel//*.!(md|txt)")。这导致扩展名为空的文件(如 Dockerfile、Makefile、CMakeLists.txt)不匹配,以及不必要的排除(如 CMakeLists.txt 被误排除),从而引发问题 #21247(Torch 2.11 升级导致的 ABI 不匹配)。本 PR 旨在修复这些过滤器,确保 CI 正确触发。

建议精读此 PR,了解 CI 路径过滤器中否定样式的常见陷阱和修复方法。关注 basename-level 与扩展级否定的区别,以及如何避免上游工具 bug(如 dorny/paths-filter 的多否定排序问题)。这对于维护 CI 配置和确保构建一致性有借鉴意义。

讨论亮点

没有 review 评论,但 PR body 中详细解释了问题根源、修复方案和测试计划。作者提到了上游 dorny/paths-filter 的 bug(issue #113 和 #260),并选择使用 basename-level 否定以避免多否定排序问题。结论是统一样式并确保正确排除,同时保持了与现有排除逻辑的一致性。

实现拆解

  1. 识别问题模式:在六个 GitHub Actions 工作流程文件(pr-test.yml、pr-test-amd.yml、pr-test-amd-rocm720.yml、pr-test-npu.yml、pr-test-xeon.yml、pr-test-xpu.yml)中,sgl_kernel 和 multimodal_gen 过滤器使用了错误的扩展级否定样式 *.!(md|txt)*.!(md|ipynb),导致扩展名为空的文件被跳过。
  2. 修复 sgl_kernel 过滤器:将模式从 "sgl-kernel/**/*.!(md|txt)" 改为 "sgl-kernel/**/!(*.md|THIRDPARTYNOTICES.txt|LICENSE)",使用 basename-level 否定,正确排除 .md 文件、THIRDPARTYNOTICES.txt 和 LICENSE,同时匹配其他文件如 Dockerfile、CMakeLists.txt。
  3. 修复 multimodal_gen 过滤器:将模式从 "python/sglang/multimodal_gen/**/*.!(md|ipynb)" 改为 "python/sglang/multimodal_gen/**/!(*.md|*.ipynb)",同样统一到 basename-level 否定,确保扩展名为空的文件不被跳过。
  4. 应用修复:将上述修复应用到所有相关的工作流程文件,覆盖 sgl_kernel 过滤器(5 个文件)和 multimodal_gen 过滤器(4 个文件),以保持一致性和避免上游 dorny/paths-filter 的 bug。
  5. 测试与验证:使用 picomatch 库(与 dorny/paths-filter 相同版本)进行本地测试,验证了 32 个测试用例(19 个 sgl_kernel 和 13 个 multimodal_gen)全部通过,确保新模式正确匹配和排除文件。
文件 模块 状态 重要度
.github/workflows/pr-test.yml CI 工作流 modified 3.76
.github/workflows/pr-test-amd.yml CI 工作流 modified 3.36
.github/workflows/pr-test-amd-rocm720.yml CI 工作流 modified 3.36
.github/workflows/pr-test-npu.yml CI 工作流 modified 3.18
.github/workflows/pr-test-xeon.yml CI 工作流 modified 3.18
.github/workflows/pr-test-xpu.yml CI 工作流 modified 3.18

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

评论区精华

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

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

风险与影响

风险较低,因为变更仅限于 CI 配置且经过详细测试。但需注意:新模式可能仍有未覆盖的边缘情况,例如未来新增的扩展名或文件类型;此外,basename-level 否定可能意外排除深层嵌套的许可证文件(如 sgl-kernel/3rdparty/fmt/LICENSE),但作者认为这是合理行为(vendored 许可证不应触发重建)。整体风险可控,但需监控 CI 执行以确认无回归。

对用户无直接影响。对系统:修复了 CI 路径过滤器,确保构建相关文件(如 Dockerfile、Makefile、CMakeLists.txt)的变更能正确触发测试,避免因跳过而导致的构建失败(如 #21247 中的 ABI 不匹配)。影响范围是 CI 工作流程,程度中等,提升了 CI 的可靠性和准确性,有助于早期发现构建问题。

配置错误风险 潜在覆盖不全

关联 Issue

#113 Negate pattern ordering
#260 Filtering out markdown files when there are multiple possible positive matches?
#21247 [Dependency] Upgrade to Torch 2.11.0

完整报告

参与讨论