Prhub

#23053 [CI] Exclude diffusion-specific paths from main_package filter

原始 PR 作者 LLThomas 合并时间 2026-04-20 10:43 文件变更 1 提交数 3 评论 5 代码增减 +4 / -4

执行摘要

修复 CI 路径过滤规则,避免扩散模型相关修改误触发 LLM 测试任务。

根据关联 Issue #21990 的描述,当扩散模型 PR 修改了 python/sglang/jit_kernel/diffusion/ 等路径下的文件时,会错误地触发 LLM CI 任务。这是因为 .github/workflows/pr-test.yml 中的 main_package 路径过滤器原先只排除了 multimodal_gen 目录,导致上述扩散相关路径的修改匹配了 python/sglang/!(multimodal_gen)/** 的通配符,从而设置了 main_package=true,进而触发了本不应运行的 LLM 推理测试。

该 PR 是典型的 CI 配置修复,逻辑清晰且改动集中。对于基础设施维护者经常提交扩散模型相关代码的开发者,值得快速浏览以了解 CI 触发规则的更新。关注点在于路径排除模式的扩展逻辑以及 review 中关于配置语法的细节讨论。对于不涉及 CI 或扩散模型开发的工程师,无需深入阅读。

讨论亮点
  1. 关于配置语法的细节讨论:Reviewer Makcum888e 在审查 diff 时提出了一个具体问题:“我们真的需要这些额外的反斜杠 \ 吗?”,指出在修改的 grep -v -E 命令中可能存在不必要的转义。作者 LLThomas 迅速承认这是一个失误,并回复“抱歉,额外的反斜杠是误加的,我会移除它。”,并在后续提交中进行了修正。这体现了对 CI 配置细节的严谨审查。
  2. 问题是否完全解决的反馈:在 PR 合并后,reviewer mickqian 评论指出“问题依然存在”,并附上了一个 CI 运行链接。这表明在 PR 合并后的实际运行中,可能仍有边缘情况或新的路径未被覆盖,需要后续关注。但此评论发生在 PR 已合并之后,属于事后反馈,未在合并前的 review 线程中解决。

实现拆解

  1. 修改路径过滤器 glob 模式:在 .github/workflows/pr-test.yml 的第 130 行附近,将 paths-filter 作业中用于判断 main_package 的 glob 模式从 python/sglang/!(multimodal_gen)/**/!(*.md) 扩展为 python/sglang/!(multimodal_gen|jit_kernel/diffusion|jit_kernel/tests/diffusion|jit_kernel/benchmark/diffusion|cli)/**/!(*.md)。这确保了在 PR 文件变更检测阶段,这些扩散相关路径和 CLI 目录就不会被计入 main_package 的变更。
  2. 同步更新 API 回退检测逻辑:在同一文件的第 192 行附近,更新了当使用 GitHub API 进行变更检测(例如通过 workflow_dispatch 手动触发特定阶段)时的 grep -v 过滤命令。从原先的 grep -v "^python/sglang/multimodal_gen/" 改为使用扩展正则表达式 grep -v -E "^(python/sglang/multimodal_gen/|python/sglang/jit_kernel/diffusion/|python/sglang/jit_kernel/tests/diffusion/|python/sglang/jit_kernel/benchmark/diffusion/|python/sglang/cli/)"。这保证了两种变更检测机制(路径过滤和 API 回退)的排除逻辑保持一致。
  3. 修复过程中的小错误:在首次提交后,根据 reviewer Makcum888e 的评论,发现修改中误加了不必要的反斜杠转义符。作者 LLThomas 在后续提交中移除了这些多余的字符,确保了配置语法的正确性。
  4. 无测试或部署配套改动:此 PR 仅修改 CI 配置文件,不涉及任何源代码、测试用例、文档或部署脚本的变更。其影响仅限于 CI 系统的触发逻辑。
文件 模块 状态 重要度
.github/workflows/pr-test.yml CI 配置 modified 4.13

关键源码片段

.github/workflows/pr-test.yml configuration

这是唯一被修改的文件,包含了 CI 触发逻辑的核心配置。修改直接影响 PR 测试工作流中 `main_package` 条件的判断,决定了哪些代码变更会触发 LLM 相关的 CI 任务。

# 在 paths-filter 作业中,用于判断 main_package 的 glob 模式被更新
# 变更前仅排除 multimodal_gen 目录
# 变更后额外排除了 jit_kernel/diffusion、jit_kernel/tests/diffusion、jit_kernel/benchmark/diffusion 和 cli 目录
paths:
  # ... 其他路径 ...
  - "python/sglang/!(multimodal_gen|jit_kernel/diffusion|jit_kernel/tests/diffusion|jit_kernel/benchmark/diffusion|cli)/**/!(*.md)"
  # ... 其他路径 ...# 在后续的脚本步骤中,用于 API 回退检测的 grep 命令也同步更新
# 确保当通过 API 获取变更文件时,同样过滤掉这些路径
MAIN_PKG_FILES=$(echo "$CHANGED_FILES" |
  grep -E "^(python/sglang/|python/pyproject\.toml|scripts/ci/cuda/|scripts/ci/utils/|test/|\.github/workflows/pr-test\.yml|\.github/workflows/pr-gate\.yml|\.github/actions/)" |
  grep -v -E "^(python/sglang/multimodal_gen/|python/sglang/jit_kernel/diffusion/|python/sglang/jit_kernel/tests/diffusion/|python/sglang/jit_kernel/benchmark/diffusion/|python/sglang/cli/)" || true)
# 如果 MAIN_PKG_FILES 非空,则设置 main_package=true

评论区精华

CI 配置语法细节修正 正确性

Reviewer Makcum888e 指出在修改的 grep 命令中可能存在不必要的反斜杠转义符,询问是否真的需要。作者 LLThomas 承认是失误并承诺移除。

结论:作者在后续提交中移除了多余的转义符,确保了配置的正确性。 · 已解决

问题是否完全解决 正确性

在 PR 合并后,reviewer mickqian 评论指出问题依然存在,并提供了 CI 运行链接作为证据。这表明修改可能未覆盖所有情况。

结论:此反馈发生在 PR 已合并之后,未在合并前得到处理,状态为未解决,需要后续关注。 · unresolved

风险与影响

  1. 配置错误风险:修改 glob 模式和正则表达式时,如果路径模式书写错误(如括号不匹配、路径错误),可能导致过滤器完全失效,进而可能错误地包含或排除更多路径,影响 CI 触发的准确性。本次修改中已通过 review 纠正了多余的转义符,降低了语法错误风险。
  2. 覆盖不全风险:如 reviewer mickqian 事后反馈所示,可能仍有其他扩散相关或特定模块的路径未被纳入排除列表,导致问题未彻底解决。这需要持续监控 CI 触发日志。
  3. 影响其他模块风险:排除路径列表的扩展(特别是加入了 cli)需确保这些目录的修改确实不应触发 main_package 相关的 CI。如果未来 cli 目录包含了影响核心包的功能,此修改可能导致相关 CI 覆盖不足。
  1. 对 CI 系统的影响:直接减少了因扩散模型 PR 误触发 LLM CI 任务(如 stage-a, stage-b)的概率,从而节省 CI 运行时间和计算资源,加快 PR 的 CI 反馈周期。
  2. 对开发团队的影响:扩散模型和 LLM 领域的开发者提交 PR 后,CI 任务触发将更精准,减少了无关任务的干扰,提升了开发体验。
  3. 对系统的影响:此变更仅影响 CI 流水线的触发逻辑,不涉及运行时系统、模型推理性能或 API 行为,对最终用户无直接影响。
配置覆盖不全 路径匹配逻辑复杂

关联 Issue

#21990 [Bug][NPU] Diffusion PR#21633 should not trigger LLM CIs

完整报告

参与讨论