QVAC-25104 infra: treat the shared addon CMake template as native input - #4542
Merged
Merged
Conversation
Contributor
Review StatusCurrent Status: ✅ APPROVED |
Contributor
Workflow security (shadow mode)zizmor found 1103 finding(s) in Findings are annotated inline on the changed files and listed in the job summary. Reproduce locally: pipx run zizmor==1.27.0 --offline .github/ |
Contributor
License compliance — cleanNo new dependency license findings in this PR. Warn-only (shadow) mode — this check does not block merges yet. Updated automatically by the canonical license compliance workflow. NOTICE presence (advisory)Missing NOTICE (advisory, does not block):
|
6 tasks
cmake/qvac-addon/ decides link lines, exported symbols and build-time
assertions for every addon that includes it, so an edit there changes the
built module exactly as an edit to the package's own CMakeLists.txt does.
CI did not see it that way on any of three counts, and all three are
silent:
* detect-native-changes matched only ${WORKDIR} sources, CMakeLists.txt,
the vcpkg files and vcpkg-overlays, so a template edit reported
native_changed=false.
* native_hash covered the same set, so the key stayed byte-identical and
prebuild-artifact-reuse could serve a package prebuilds built before
the template changed. The comment above the hash argues a wrong "false"
can never reuse a stale binary because the key would not match, which
holds only while the key covers everything that affects the binary.
* on-pr-nx.yml triggered on packages/** only, so a template-only PR ran
no native CI at all.
Measured on #4519, which edits the template and six consumers: the last
run reused prebuilds for all four packages it built, the per-platform
matrix and merge jobs skipped.
The trigger needs the nx graph to agree, or a template-only push would
start the workflow and then find nothing affected -- measured: nx reports
[] for a lone cmake/qvac-addon/ path. So the directory becomes an nx
project the six consumers declare as an implicit dependency, the same way
they already depend on inference-addon-cpp and lint-cpp. It carries no
build target, so it never lands in the matrix itself; only its dependents
do.
Costs, both intended: native_hash changes once for every package, which
invalidates the existing prebuild caches, and any cmake/qvac-addon/ edit
now rebuilds the six consumers natively.
Reported in review on #4519.
llm-llamacpp now includes cmake/qvac-addon, so it has to declare the same implicit dependency as the other consumers. on-pr-ts-nx must trigger on that path or the nx await times out, and classification/vla still live on bespoke orchestrators that on-pr-nx will not start.
jpgaribotti
force-pushed
the
fix/qvac-25104-native-detect-addon-template
branch
from
September 18, 2026 14:22
2d60e61 to
89251d3
Compare
iancris
approved these changes
Sep 18, 2026
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.
🎯 What problem does this PR solve?
cmake/qvac-addon/decides link lines, exported symbols and build-time assertions for every addon that includes it, so an edit there changes the built module exactly as an edit to the package's ownCMakeLists.txtdoes. CI did not treat it that way, on three counts, all silent:detect-native-changesmatched only${WORKDIR}sources,CMakeLists.txt, the vcpkg files andvcpkg-overlays, so a template edit reportednative_changed=false.native_hashcovered the same set, so the key stayed byte-identical andprebuild-artifact-reusecould serve prebuilds built before the template changed. The comment above the hash argues that a wrongfalsecan never reuse a stale binary because the key would not match — which holds only while the key covers everything affecting the binary.on-pr-nx.ymltriggered onpackages/**only, so a template-only PR ran no native CI at all.Measured on #4519, which edits the template and six consumers: its latest run reused prebuilds for all four packages it built, with the per-platform matrix and
mergejobs skipped.📝 How does it solve it?
cmake/qvac-addon/*to the detection predicate andcmake/qvac-addonto thegit ls-treepathspec plus itsgrep -Ealternation, keeping the two in the lockstep the comment there requires.cmake/qvac-addon/**toon-pr-nx.yml'spaths:.inference-addon-cppandlint-cppentries they already carry. Without this the trigger alone would start the workflow and then find nothing affected — nx reports[]for a lonecmake/qvac-addon/path. The project carries nobuildtarget, so it never lands in the matrix itself; only its dependents do.🧪 How was it tested?
casepredicate over a sample of paths: both template files reportnative_changed=true, whilecmake/other/thing.cmakeanddocs/foo.mdstay false and a package source file is unchanged in behaviour.git ls-treeset.nx show projects --affected -t build --stdinwith onlycmake/qvac-addon/qvac-addon.cmake: all six consumers plus their dependents, where it previously returned[]. An unrelated path still returns[], andqvac-addon-cmakeitself never appears.💥 Breaking Changes
Two intended costs.
native_hashchanges once for every package, which invalidates the existing prebuild caches, and anycmake/qvac-addon/edit now rebuilds the six consumers natively.Touches DevOps-owned paths (
.github/workflows/,.github/actions/per.github/teams/devops.json).