# PR #23201 完整报告

- 仓库：`sgl-project/sglang`
- 标题：fix(ci): repair path filters regressed by #21482
- 合并时间：2026-04-20 11:34
- 原文链接：http://prhub.com.cn/sgl-project/sglang/pull/23201

---

# 执行摘要

- 一句话：修复 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 正确触发。

# 实现拆解

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 工作流；类别 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 不匹配，凸显了本修复的必要性。