ci: narrow the GPU serve matrix with a serve paths-filter + PR canary (EAI-7746) - #156
ci: narrow the GPU serve matrix with a serve paths-filter + PR canary (EAI-7746)#156fredespi wants to merge 2 commits into
Conversation
|
Automated review pass over the diff against Findings1. 2. 3. 4. 5. 6. Also cross-PR: the Verified clean
Not verified
Nice change overall: the filter comments explain the reasoning rather than just the rule, and the new unit tests cover canary-on/canary-off for both |
…I-7746) The `changes` job gated the three self-hosted GPU E2E jobs on the coarse `heavy` filter, so any Rust change (dashboard, unrelated crates) fired the whole real-GPU serve matrix on scarce serial hardware. - Add a dedicated `serve` paths-filter (serve code path + engines + E2E harness + broad-dep safety nets; excludes the rocm-dash crates) and gate the GPU jobs on it, so non-serve Rust PRs skip the matrix. Forced true off-PR so the merge queue always runs the full matrix. - Gate the two Strix lanes to merge_group/push only; keep the MI300X lane on pull_request in canary mode (E2E_PR_CANARY) running a single minimal real serve as a pre-merge smoke. - Add a `@canary` / `@serves-on-gpu` harness gate (mirrors `@nightly`): in canary mode every GPU-serving scenario except the canary resolves to Skip, keeping platform.json valid so the consolidated report reconciles. - Gate the consolidated report on `heavy || serve` so a serve-only change still produces it. Signed-off-by: fredespi <fredrik.espinoza@gmail.com>
… order (EAI-7746) Follow-up to the serve paths-filter + PR canary change, addressing review findings on the same PR: - Document @canary and @serves-on-gpu in the e2e-cucumber README tag table, and correct the now-stale "each job runs the whole suite" text and job table to reflect PR canary mode (MI300X runs only @canary) and the Strix lanes skipping on pull_request. - Add a unit test that parses the real .feature files and asserts exactly one @canary scenario, so a later refactor dropping/renaming the tag fails cheaply instead of silently emptying the pre-merge serve smoke. - Move the canary-mode skip after the host-applicability checks in resolve() so a scenario inapplicable for a hard reason (no GPU / wrong OS) reports that reason rather than the canary skip. - Make the merge_group gating comment honest: the Strix lanes are continue-on-error on merge_group too, so they are not a gating backstop — a regression surfaces at nightly, a deliberate trade for serial hardware. Signed-off-by: fredespi <fredrik.espinoza@gmail.com>
d7896c6 to
ffbbc03
Compare
|
Thanks for the thorough pass. Addressed in
Deferred, with reasoning:
The two test-plan boxes (every required GPU check produced; scoped dispatch confirming the canary serves only the one scenario) are validated by the CI run on this push. |
|
Re-review of One blocker, and it is cross-PR rather than internal to this change. Blocking: this PR and #157 make opposite decisions about the same scenarioBoth add a 6th positional
If both land, 6b carries both tags. #157's merge_queue check sits before the canary check in Worth settling on one mechanism before either merges. #157's per-engine pair is strictly better coverage — vLLM and lemonade each get a real per-PR smoke, where a single canary only exercises whichever engine is the platform default. If this one lands first, #157 becomes a retag delta. That also disposes of prior finding 6: one flag instead of three trailing bools. Non-blocking
Tradeoff worth putting in the descriptionThe body says "the full matrix runs in the merge queue", which reads as a backstop; the Checked and clean
The Nice touches: the filter comments explain the reasoning rather than restating the rule, including why root-only |
Summary
The
changesjob gated the three self-hosted GPU E2E jobs (e2e-gpu,e2e-gpu-strix-ubuntu,e2e-gpu-strix-windows) on the coarseheavypaths-filter, which trips on any**/*.rschange. So a Rust PR that can't affect serving (dashboard, unrelated crates) fired the whole real-GPU serve matrix on scarce serial hardware. This narrows that matrix and adds a fast pre-merge serve canary.Changes
servepaths-filter (EAI-7746): a dedicated filter covering the serve code path (engines/**,crates/rocm-core,crates/rocm-engine-protocol,apps/rocm,apps/rocmd), the E2E harness (tests/e2e-cucumber/**,crates/e2e-report,xtask,**/*.feature), plus broad-dep safety nets (rootCargo.toml,Cargo.lock,rust-toolchain*, workflow files). Excludes therocm-dash-*crates — they build intorocmbut can't change serve behaviour, and their compile coverage stays on the always-on build/test lanes. The GPU jobs now gate onserve; forced true off-PR so the merge queue always runs the full matrix (required checks never starved).merge_group/pushonly (skip on PR; required-but-continue-on-error, so the skip satisfies branch protection). The MI300X lane still runs onpull_requestbut in canary mode (E2E_PR_CANARY), serving only a single minimal real scenario as a pre-merge smoke; the full matrix runs in the merge queue.@canary/@serves-on-gpuharness gate (mirrors@nightly): in canary mode every GPU-serving scenario except the canary resolves toSkip, soplatform.jsonstays valid and the consolidated report reconciles.@serves-on-gputags the scenarios that real-serve on a GPU host without@requires-gpu(short-name expansion, chat behavioural) so they're skipped in canary mode but still mock-covered every PR.heavy || serveso a serve-only change still produces the requiredE2E consolidated reportcheck.Test plan
--workspace --all-targets --exclude e2e-cucumber -D warnings, workspace tests,e2e-cucumber --lib, andcargo xtask e2emock lane (reconciliation: 3 xfail / 0 XPASS / 0 unexpected).servegates exactly the 3 GPU jobs + report;heavystill gates the mock/build/test lanes.@canaryscenario.