执行摘要
- 一句话:修复 CI 路径过滤器中的否定样式错误,确保关键构建文件正确触发测试。
- 推荐动作:建议精读此 PR,了解 CI 路径过滤器中否定样式的常见陷阱和修复方法。关注 basename-level 与扩展级否定的区别,以及如何避免上游工具 bug(如 dorny/paths-filter 的多否定排序问题)。这对于维护 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 正确触发。
实现拆解
- 识别问题模式:在六个 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),导致扩展名为空的文件被跳过。
- 修复 sgl_kernel 过滤器:将模式从
"sgl-kernel/**/*.!(md|txt)" 改为 "sgl-kernel/**/!(*.md|THIRDPARTYNOTICES.txt|LICENSE)",使用 basename-level 否定,正确排除 .md 文件、THIRDPARTYNOTICES.txt 和 LICENSE,同时匹配其他文件如 Dockerfile、CMakeLists.txt。
- 修复 multimodal_gen 过滤器:将模式从
"python/sglang/multimodal_gen/**/*.!(md|ipynb)" 改为 "python/sglang/multimodal_gen/**/!(*.md|*.ipynb)",同样统一到 basename-level 否定,确保扩展名为空的文件不被跳过。
- 应用修复:将上述修复应用到所有相关的工作流程文件,覆盖 sgl_kernel 过滤器(5 个文件)和 multimodal_gen 过滤器(4 个文件),以保持一致性和避免上游 dorny/paths-filter 的 bug。
- 测试与验证:使用 picomatch 库(与 dorny/paths-filter 相同版本)进行本地测试,验证了 32 个测试用例(19 个 sgl_kernel 和 13 个 multimodal_gen)全部通过,确保新模式正确匹配和排除文件。
关键文件:
.github/workflows/pr-test.yml(模块 CI工作流;类别 infra;类型 configuration): 主测试工作流程文件,包含 sgl_kernel 和 multimodal_gen 过滤器修复,影响最广。
.github/workflows/pr-test-amd.yml(模块 CI工作流;类别 infra;类型 configuration): AMD 平台测试工作流程,同样修复了 sgl_kernel 和 multimodal_gen 过滤器,确保平台特定 CI 正确触发。
.github/workflows/pr-test-amd-rocm720.yml(模块 CI工作流;类别 infra;类型 configuration): AMD ROCm 7.20 测试工作流程,修复了 sgl_kernel 和 multimodal_gen 过滤器,覆盖特定硬件配置。
.github/workflows/pr-test-npu.yml(模块 CI工作流;类别 infra;类型 configuration): NPU 平台测试工作流程,修复了 multimodal_gen 过滤器,确保多模态生成相关变更正确触发测试。
.github/workflows/pr-test-xeon.yml(模块 CI工作流;类别 infra;类型 configuration): Xeon CPU 测试工作流程,修复了 sgl_kernel 过滤器,确保构建文件变更能触发测试。
.github/workflows/pr-test-xpu.yml(模块 CI工作流;类别 infra;类型 configuration): XPU 平台测试工作流程,修复了 sgl_kernel 过滤器,覆盖 Intel XPU 硬件。
关键符号:未识别
评论区精华
没有 review 评论,但 PR body 中详细解释了问题根源、修复方案和测试计划。作者提到了上游 dorny/paths-filter 的 bug(issue #113 和 #260),并选择使用 basename-level 否定以避免多否定排序问题。结论是统一样式并确保正确排除,同时保持了与现有排除逻辑的一致性。
风险与影响
- 风险:风险较低,因为变更仅限于 CI 配置且经过详细测试。但需注意:新模式可能仍有未覆盖的边缘情况,例如未来新增的扩展名或文件类型;此外,basename-level 否定可能意外排除深层嵌套的许可证文件(如 sgl-kernel/3rdparty/fmt/LICENSE),但作者认为这是合理行为(vendored 许可证不应触发重建)。整体风险可控,但需监控 CI 执行以确认无回归。
- 影响:对用户无直接影响。对系统:修复了 CI 路径过滤器,确保构建相关文件(如 Dockerfile、Makefile、CMakeLists.txt)的变更能正确触发测试,避免因跳过而导致的构建失败(如 #21247 中的 ABI 不匹配)。影响范围是 CI 工作流程,程度中等,提升了 CI 的可靠性和准确性,有助于早期发现构建问题。
- 风险标记:配置错误风险, 潜在覆盖不全
关联脉络
- PR #21482 Skip ci for .md files: 引入了路径过滤器变更,但使用了不一致的否定样式,导致本 PR 修复的回归问题。
- PR #21247 [Dependency] Upgrade to Torch 2.11.0: 作为问题例子,因路径过滤器错误跳过 sgl-kernel 构建文件,导致 ABI 不匹配,凸显了本修复的必要性。
参与讨论