build/ci: cut per-PR CI cost (san per-header + path-gate heavy jobs)#27
Merged
Conversation
The cpp-san job inherited X3D_CPP_PER_HEADER_CHECKS=ON, compiling ~800 headers standalone under ASan+UBSan on 2-vCPU runners — the bulk of the job's wall-clock. Per-header isolation is a compile-only self-containment check already gated by the cpp/ci jobs; running it under sanitizer instrumentation finds no runtime bug it otherwise wouldn't. san keeps every behavioral ctest under ASan/UBSan (verified: 47/47 pass locally), drops the redundant 406 compile_* tests.
Adds a 'code' output to the changes dispatcher (true for any non-docs change; false only when every changed file is docs/** / *.md / mkdocs.yml — fail-safe toward running). Gates cpp-san, cpp-fuzz, and texture-swap on it. The fast 'cpp' gate stays always-on as the stable required status check. texture-swap stays broad on every CODE PR (its byte-exact decode parity catches regressions from outside texture code by design) but no longer runs on docs-only PRs. Net: a docs-only PR drops from 4 heavy C++ jobs to 1; code PRs are unchanged (full coverage retained). The 4 seam swap-tests keep their existing seam-path gating; cpp-matrix stays workflow_dispatch-only.
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.
Two independent, reviewable commits that trim what runs on every PR — addressing the "CI is too heavy per PR" pain.
1.
build(san): drop redundant per-header compiles from the ASan/UBSan gateThe
sanpreset inheritedX3D_CPP_PER_HEADER_CHECKS=ON, compiling ~800 headers standalone under ASan+UBSan on 2-vCPU runners — the bulk of the job's wall-clock. Per-header isolation is a compile-only self-containment check already gated by thecpp/cijobs; sanitizers find runtime bugs, so instrumenting these compiles adds zero bug-finding. SetX3D_CPP_PER_HEADER_CHECKS=OFFin thesanpreset only.compile_*tests → 0; 47 behavioral tests retained.cistill runs all 406.mise run build-san: 47/47 pass.2.
ci: path-gate the heavy C++ jobs so docs-only PRs skip themAdds a
codeoutput to thechangesdispatcher —truefor any non-docs change,falseonly when every changed file isdocs/**/*.md/mkdocs.yml(fail-safe toward running: empty/unknown paths run the jobs). Gatescpp-san,cpp-fuzz,texture-swapon it.cppgate stays always-on (cheapest C++ job; the stable required status check).texture-swapstays broad on every code PR (its byte-exact decode parity is meant to catch regressions from outside texture code) but no longer runs on docs-only PRs, which can't regress decode.Policy (the deliberate "sane default"):
cpp-sanandcpp-fuzzstay per-PR (now code-gated), not demoted to nightly/merge — no coverage gamble for a security-conscious SDK.Merge is yours.