fix(ci): repair path filters regressed by #21482#23201
Merged
Kangyan-Zhou merged 1 commit intosgl-project:mainfrom Apr 20, 2026
Merged
fix(ci): repair path filters regressed by #21482#23201Kangyan-Zhou merged 1 commit intosgl-project:mainfrom
Kangyan-Zhou merged 1 commit intosgl-project:mainfrom
Conversation
Contributor
|
Warning You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again! |
c62ad4b to
9a45487
Compare
PR sgl-project#21482 ("Skip ci for .md files", merged 2026-03-28) introduced two different negation styles in the same change. It used the correct basename-level form for `main_package` and `test`: "python/sglang/!(multimodal_gen)/**/!(*.md)" "test/**/!(*.md)" but used a broken extension-level form for `sgl_kernel` and `multimodal_gen`: "sgl-kernel/**/*.!(md|txt)" "python/sglang/multimodal_gen/**/*.!(md|ipynb)" The extension-level form has two silent false-negative bugs: 1. Extensionless files don't match. The negation sits inside the extension (`.!(md|txt)`), so the filename must contain a literal `.`. Files like `sgl-kernel/Dockerfile`, `sgl-kernel/Makefile`, and `sgl-kernel/LICENSE` never trip the filter. This is what caused sgl-project#21247 (torch 2.11 bump) to skip `sgl-kernel-build-wheels` and hit an ABI mismatch against the pre-built PyPI sglang-kernel wheel. 2. The blanket `*.txt` exclusion swallows `sgl-kernel/CMakeLists.txt` and `sgl-kernel/csrc/cpu/CMakeLists.txt`, which control the build (Triton tag, include paths, compile flags) and must trigger a rebuild. The exclusion was almost certainly intended only for `THIRDPARTYNOTICES.txt`. Rewrite the two broken filters at the basename level, matching the style already used for `main_package` / `test`: sgl_kernel: - "sgl-kernel/**/!(*.md|THIRDPARTYNOTICES.txt|LICENSE)" multimodal_gen: - "python/sglang/multimodal_gen/**/!(*.md|*.ipynb)" A single extglob also sidesteps the dorny/paths-filter multi-`!` ordering bug (dorny/paths-filter#113, sgl-project#260) that would otherwise force predicate-quantifier: 'every' and break OR-semantics with the other include patterns. Applied across all workflows that used the broken pattern: - sgl_kernel filter: pr-test, pr-test-amd, pr-test-amd-rocm720, pr-test-xeon, pr-test-xpu (5 files). - multimodal_gen filter: pr-test, pr-test-npu, pr-test-amd, pr-test-amd-rocm720 (4 files; pr-test.yml and pr-test-amd.yml intersect the sgl_kernel set). Verified locally with picomatch@2.3.1 (the version dorny pins, invoked with {dot: true} as in dorny/paths-filter/src/filter.ts). All cases pass: sgl-kernel/Dockerfile old: skip -> new: match sgl-kernel/Makefile old: skip -> new: match sgl-kernel/CMakeLists.txt old: skip -> new: match sgl-kernel/csrc/cpu/CMakeLists.txt old: skip -> new: match sgl-kernel/LICENSE old: match -> new: skip sgl-kernel/THIRDPARTYNOTICES.txt old: skip -> new: skip (preserved) sgl-kernel/README.md old: skip -> new: skip (preserved) sgl-kernel/{*.py,*.cu,*.toml,*.sh,*.cmake} match (unchanged) python/sglang/multimodal_gen/Dockerfile old: skip -> new: match python/sglang/multimodal_gen/Makefile old: skip -> new: match python/sglang/multimodal_gen/LICENSE old: skip -> new: match python/sglang/multimodal_gen/README.md old: skip -> new: skip (preserved) python/sglang/multimodal_gen/*.ipynb old: skip -> new: skip (preserved) python/sglang/multimodal_gen/*.py match (unchanged) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
9a45487 to
fb28953
Compare
zhangying098
pushed a commit
to zhangying098/sglang
that referenced
this pull request
Apr 23, 2026
…ect#23201) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
kyx1999
pushed a commit
to KMSorSMS/sglang
that referenced
this pull request
Apr 27, 2026
…ect#23201) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
PR #21482 ("Skip ci for .md files", merged 2026-03-28) introduced two different negation styles in the same change. It used the correct basename-level form for
main_packageandtest:but used a broken extension-level form for
sgl_kernelandmultimodal_gen:The extension-level form has two silent false-negative bugs:
.!(md|txt)), so the filename must contain a literal.. Files likesgl-kernel/Dockerfile,sgl-kernel/Makefile,sgl-kernel/LICENSE, and (inmultimodal_gen) anyDockerfile/Makefile/LICENSEnever trip the filter. This caused [Dependency] Upgrade to Torch 2.11.0 #21247 (torch 2.11 bump) to skipsgl-kernel-build-wheelsand hit an ABI mismatch against the pre-built PyPI sglang-kernel wheel (undefined symbol: _ZN3c104cuda29c10_cuda_check_implementationEiPKcS2_ib).*.txtexclusion swallowsCMakeLists.txt.sgl-kernel/CMakeLists.txtandsgl-kernel/csrc/cpu/CMakeLists.txtcontrol the build (Triton tag, include paths, compile flags) and should absolutely trigger a rebuild. The exclusion was almost certainly intended only forTHIRDPARTYNOTICES.txt.Fix: rewrite the two broken filters at the basename level, matching the style already used for
main_package/test:A single extglob also sidesteps the dorny/paths-filter multi-
!ordering bug that would otherwise forcepredicate-quantifier: 'every'and break OR-semantics with the other include patterns (issue #260). Keeping the negation intra-pattern also avoids any cross-filter side-effects in the same step.Applied across all workflows that used the broken pattern:
sgl_kernelfilter:pr-test.yml,pr-test-amd.yml,pr-test-amd-rocm720.yml,pr-test-xeon.yml,pr-test-xpu.yml(5 files).multimodal_genfilter:pr-test.yml,pr-test-npu.yml,pr-test-amd.yml,pr-test-amd-rocm720.yml(4 files;pr-test.ymlandpr-test-amd*.ymlintersect thesgl_kernelset).Test plan
Verified locally with
picomatch@2.3.1(the versiondorny/paths-filterpins) invoked with{dot: true}(matchingdorny/paths-filter/src/filter.ts:16). The test script reads the patterns straight from the committed workflow files, confirms all 5sgl_kernel:and 4multimodal_gen:blocks collapsed to the same two unique strings, and runs 19 + 13 = 32 cases — all pass.sgl_kernelfiltersgl-kernel/Dockerfilesgl-kernel/Makefilesgl-kernel/CMakeLists.txtsgl-kernel/csrc/cpu/CMakeLists.txtsgl-kernel/LICENSEsgl-kernel/3rdparty/fmt/LICENSEsgl-kernel/README.md,docs/guide.mdsgl-kernel/THIRDPARTYNOTICES.txtsgl-kernel/.gitignore,csrc/.clang-formatsgl-kernel/build.sh,pyproject.toml,*.cu,*.py,*.cmakemultimodal_genfilterpython/sglang/multimodal_gen/Dockerfilepython/sglang/multimodal_gen/Makefilepython/sglang/multimodal_gen/LICENSEpython/sglang/multimodal_gen/README.mdpython/sglang/multimodal_gen/apps/webui/README.mdpython/sglang/multimodal_gen/.claude/CLAUDE.mdpython/sglang/multimodal_gen/notebook.ipynbpython/sglang/multimodal_gen/nested/dir/tutorial.ipynbpython/sglang/multimodal_gen/foo.py,pyproject.toml,apps/webui/foo.tsxReproducer:
Notes
LICENSE,THIRDPARTYNOTICES.txt,*.md,*.ipynb) apply at any depth undersgl-kernel/orpython/sglang/multimodal_gen/, not just top-level. Today the repo only has top-level occurrences, so this is observationally identical. If vendored code were ever added under e.g.sgl-kernel/3rdparty/<lib>/LICENSE, that would also be excluded — which is arguably the right behavior (vendored license metadata shouldn't trigger kernel rebuilds).sgl_kernelto an explicit allowlist of build-relevant extensions (.py,.cu,.cuh,.cpp,.h,.hpp,.sh,.toml,.cmake,.yml) plus explicit files (CMakeLists.txt,Dockerfile,Makefile). Trade-off is different (new build-relevant extensions would need explicit adds), so saving that for a separate discussion.Checks
pre-commit runclean on the six touched filesLICENSE, and in-repo.claude/CLAUDE.md.github/tree for remaining extension-level negation patterns — none leftsgl-kernel-build-wheelsbecause the change touches workflow files (confirms filter is re-exercised end-to-end)🤖 Generated with Claude Code