QVAC-21703 infra: roll out label-gated CI routing + prebuild caching to remaining addons#3198
Conversation
…g addons Migrate the six remaining active addon PR workflows onto the shared ci-router / detect-native-changes / prebuild-artifact-reuse / -save composites so routing and prebuild caching behave identically across every addon: - classification-ggml, bci-whispercpp, ocr-onnx: full shape (router + native-change detection + prebuild reuse/save); darwin-arm64 integration leg moved to the qvac-macos26-arm64-gpu self-hosted runner (bci keeps no_gpu:'true' for CPU-backend coverage; classification gains the Manual Workspace Cleanup step now that its matrix is mixed hosted/self-hosted). - onnx, fabric: prebuild-only libraries (router + caching, no integration); fabric's bespoke changes.native filter replaced by detect-native-changes. - decoder-audio: no native build, so routing-only (label-gated sanity + integration, no prebuild/reuse/save stages). Update docs/ci/LABELS.md to move all six into the wired-in list. Co-authored-by: Cursor <cursoragent@cursor.com>
The onnx and fabric on-pr sanity jobs ran yamlfmt with a whole-repo scope, so they failed on pre-existing repo-wide yamlfmt drift unrelated to the package under test. Scope the check to PKG_DIR via the local yamlfmt action, matching the ocr-onnx sanity pattern. Co-authored-by: Cursor <cursoragent@cursor.com>
GustavoA1604
left a comment
There was a problem hiding this comment.
the Test plan dispatches classification-ggml and onnx, but neither bci-whispercpp (self-hosted mac-runner swap + full router migration) nor decoder-audio (routing-only shape, first of its kind, with the always() gating change) has a linked workflow_dispatch/CI run. These are exactly the changes that can't be validated by actionlint/YAML parsing alone — the new qvac-macos26-arm64-gpu host and the decoder integration gate need a real run. Please attach a dispatch run for bci-whispercpp and decoder-audio before merge.
Co-authored-by: Cursor <cursoragent@cursor.com>
|
Addressed Gustavo's review feedback in commit 39f8f59: decoder desktop/mobile gates now require a successful context job before using context outputs, and the BCI self-hosted macOS GPU row no longer sets no_gpu so GPU smoke can run on qvac-macos26-arm64-gpu.\n\nRequested validation runs:\n- BCI PR workflow_dispatch: https://github.com/tetherto/qvac/actions/runs/29090437583\n- Decoder PR workflow_dispatch: https://github.com/tetherto/qvac/actions/runs/29090436291 |
There was a problem hiding this comment.
Please add support for global vcpkg overlay changes. The migrated workflow path filters currently only match package-local paths, while detect-native-changes and native_hash only inspect WORKDIR. As a result, a PR changing only qvac/vcpkg-overlays/** does not trigger the affected addon workflows; even if a workflow runs for another reason, the unchanged native hash can allow a stale prebuild to be reused. Update the affected workflow path filters and the native-change/hash logic, either conservatively for vcpkg-overlays/** or with addon-specific overlay mappings, so relevant overlay changes force fresh prebuilds and bypass cache reuse.
Co-authored-by: Cursor <cursoragent@cursor.com>
|
Addressed Gianni review feedback in commit e20879d. What changed:
Validation:
|
gianni-cor
left a comment
There was a problem hiding this comment.
BCI prebuild still uses always() without requiring successful authorization or context resolution. Because context is skipped when authorize-pr does not allow the run, always() can still evaluate the prebuild condition as true and invoke the reusable prebuild workflow with empty repository/ref values. This bypasses the authorization/resource gate and can build the base branch instead of the PR. Require needs.authorize.outputs.allowed == true and needs.context.result == success before running prebuild; apply the same context-success protection to dependent BCI integration jobs that consume context outputs.
Co-authored-by: Cursor <cursoragent@cursor.com>
|
Addressed the latest BCI authorization/context review in 8255f81: prebuild now explicitly requires authorize.allowed and context success, and both desktop/mobile integration jobs require the same authorization plus successful context resolution before consuming context outputs. This prevents always() from invoking reusable workflows with empty repository/ref values. The full follow-up review also found and fixed merge-guard aggregation gaps: classification now gates on ts-checks/C++ lint/C++ tests, while ONNX and Fabric gate on C++ lint. Latest main is merged in e79a72b. |
Co-authored-by: Cursor <cursoragent@cursor.com>
|
Final independent-review hardening is pushed in 7a94370: BCI C++ lint/coverage now carry explicit authorize + successful-context gates, BCI prebuild also requires sanity success, classification now supplies safe repository/ref/SHA fallbacks for workflow_dispatch/workflow_call, and LABELS.md documents repo-root vcpkg-overlays invalidation. I retained strict build-status for build-required addons by design; Fabric remains the explicitly documented skip-tolerant exception. |
Co-authored-by: Cursor <cursoragent@cursor.com>
|
Confirmed and fixed in a80c615. NMTCPP was the only overlay-enabled addon workflow that still had a redundant inner dorny/paths-filter gate; the outer trigger had been updated but changes.pkg had not. The inner filter now also includes vcpkg-overlays/** and the already-mismatched .github/actions/cache-models/** path, so every outer trigger path reaches native detection and the downstream gates. I checked all on-pr workflows: NMTCPP is the only one retaining this inner filter pattern. |
…-routing-rollout Co-authored-by: Cursor <cursoragent@cursor.com> # Conflicts: # .github/workflows/integration-test-bci-whispercpp.yml
Summary
Completes the QVAC-21703 rollout by migrating the six remaining active addon PR workflows onto the shared CI composites. Label-gated routing and prebuild caching now follow the same model across every addon, and the migration list in
docs/ci/LABELS.mdis drained.Shared composites:
label-gate→ci-router→detect-native-changes→prebuild-artifact-reuse/prebuild-artifact-save. Composite sources are checked out from the default branch.What changed
on-pr-classification-ggml.ymlmerge-guardon-pr-bci-whispercpp.ymlcontext/workdirplumbing and requires successful authorization/context before reusable jobson-pr-ocr-onnx.ymlon-pr-onnx.ymlon-pr-decoder-audio.ymlon-pr-fabric.ymlGlobal
vcpkg-overlays/**changes now:detect-native-changes.native_changed=true.native_hash, preventing reuse of prebuilds made against stale overlays.Runner changes
The Darwin arm64 integration leg moves to
qvac-macos26-arm64-gpufor classification, BCI, and OCR ONNX.runner.environment != 'github-hosted'.Routing and merge behavior
verified; granular labels select expensive stages.prebuild success || reuse_hit. Fabric intentionally retains its documented skip-tolerant build policy, while ONNX remains strict.Validation
mainmerged without conflicts.git diff --checkpasses across the complete PR.merge-guardlabel check failed because dispatch runs have no PR labels: https://github.com/tetherto/qvac/actions/runs/29054446228merge-guardlabel check failed: https://github.com/tetherto/qvac/actions/runs/29090436291vulkan-1.dllwas absent on that runner: https://github.com/tetherto/qvac/actions/runs/29090437583Test plan
qvac-macos26-arm64-gpu.