feat(ci): add aggregate merge-gate workflow#651
Merged
Conversation
Replace 7 explicit required status checks with a single aggregate merge-gate workflow. Each gating check has a real + skip job pair controlled by path classification, and a final gate job aggregates all results. Gating set: qualification (Test/Lint/CLI E2E/E2E/Security Scan), CodeQL, vuln-scan, malware-scan, actionlint, verify-licenses. GPU tests remain advisory until flake rate is assessed. Deletes docs-only.yaml and docs-only-checks.yaml — the merge-gate handles docs-only PRs natively via skip jobs. Fixes #605 Related to #559
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
Contributor
Coverage Report ✅
Coverage BadgeNo Go source files changed in this PR. |
If check-paths fails, all downstream jobs are skipped (not failed), which would silently pass the gate. Add check-paths to the gate needs list and verify it succeeded before checking other results.
ArangoGutierrez
approved these changes
Apr 23, 2026
Contributor
ArangoGutierrez
left a comment
There was a problem hiding this comment.
LGTM - A nice step forward
| @@ -0,0 +1,338 @@ | |||
| # Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved. | |||
Contributor
There was a problem hiding this comment.
I thought we were living in 2050 already, we are the future!
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
Replace 7 explicit required status checks with a single aggregate
merge-gateworkflow so every applicable CI check blocks merge and new gating jobs can be added without admin ruleset changes.Motivation / Context
Today the
mainbranch ruleset gates merges on only 7 named checks. Other checks (GPU tests, Docker builds, vuln-scan, malware-scan, actionlint, verify-licenses) can fail without blocking merge. PR #587 demonstrated this: it merged while non-required GPU checks were still in flight, and those jobs failed later onmain.The required-check list is also fragile — every new workflow needs a manual admin ruleset update, and we've already seen drift.
This PR addresses both problems with a single aggregate gate that becomes the only required check.
Fixes: #605
Related: #559
Type of Change
Component(s) Affected
.github/workflows/)Implementation Notes
Architecture: real + skip job pairs
A
check-pathsjob at the top of the workflow classifies what changed:code— true when any changed file is NOT docs/md/LICENSE (usespredicate-quantifier: 'every'with dorny/paths-filter to detect docs-only PRs, then inverts)actions— true when.github/workflows/**or.github/actions/**changeddeps— true whengo.mod,go.sum, orvendor/**changedEach gating check has a real job (runs when its path condition matches) and a companion
-skipjob (runs when it doesn't). Exactly one of each pair always runs, so the finalgatejob'sneeds:always resolves.Gating set:
code == true(viaqualification.yaml)analyze)code == truevuln-scan)code == truemalware-scan)code == trueactions == truedeps == trueAdvisory (not gated): GPU smoke, GPU inference, GPU training — per discussion on #605, these stay advisory until flake rate is assessed. They can be added later with the same real/skip pattern.
Deleted files:
docs-only.yamlanddocs-only-checks.yamlare superseded — the merge-gate handles docs-only PRs natively via skip jobs.Existing standalone workflows unchanged:
on-push.yaml,codeql.yaml,vuln-scan.yaml,actionlint.yaml,verify-licenses.yamlkeep their current triggers. They continue running independently for push/schedule/code-scanning purposes.Path to merge queue (#559): Once this merges, enabling merge queue requires only adding
merge_group: types: [checks_requested]tomerge-gate.yaml+ one admin UI setting.IMPORTANT
Admin action required post-merge: Update ruleset
main(id12304487) to replace the 7 current required checks with single required check:gate. This can only be done after the first successful run onmain.Testing
CI will validate the workflow runs correctly on this PR. The merge-gate workflow triggers on
pull_requesttomain, so it will execute on this PR itself.Key scenarios verified by design:
code=true-> all code checks run, actionlint/licenses skip unless their paths matchcode=false-> all code checks skip, skip jobs report successcode=true-> code checks run (same as code-only)code=true(workflow files are not docs),actions=true-> actionlint also runsRisk Assessment
Rollout notes: The workflow runs alongside existing checks on this PR. The admin ruleset change (switching required checks to
gate) happens post-merge as a separate step. Until then, the current 7 required checks continue gating merges — no disruption during rollout. If issues arise, the workflow can be deleted and the ruleset left unchanged.Checklist
make testwith-race)make lint)git commit -S)