Skip to content

feat(ci): make PR GPU CI opt-in via gpu-ci label or approval - #4185

Open
garrett361 wants to merge 6 commits into
mainfrom
feat/opt-in-gpu-ci
Open

garrett361 wants to merge 6 commits into
mainfrom
feat/opt-in-gpu-ci

Conversation

@garrett361

@garrett361 garrett361 commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

GPU tests move from tests.yml into a new gpu.yml that runs on PRs only on request: applying the gpu-ci label, or an approval from anyone with Triage or higher, runs the full GPU suite on the PR's current commit. Before, every push to a ready PR re-ran the GPU suite whenever the diff hit a broad path filter, which about 64% of recent main commits did.

  • The label is one-shot: the workflow removes it, so re-apply it to run again after new pushes or to retry.
  • A new trigger cancels the PR's in-flight GPU run, unless that run is on the same commit with no failures yet. An approval also skips a commit that already passed.
  • Every merge to main still runs the full GPU suite. tests.yml keeps its CPU jobs and the path-gated gsm8k_eval.
  • Fork PRs and PRs with merge conflicts can't run GPU CI. For a fork PR, a maintainer can push the branch here and label it.
  • Dispatching tests.yml no longer runs GPU jobs (dispatch gpu.yml), and the README "Tests" badge no longer reflects GPU results.
  • AGENTS.md tells agents how GPU CI is triggered, and to add the label only when the user asks.

Possible future extension point: scoped labels like gpu-ci:unit could run a subset of the GPU tests, with the gate emitting one output per suite.

🤖 Generated with Claude Code

garrett361 and others added 6 commits October 20, 2026 15:56
Move the GPU unit and integration jobs from tests.yml into a new gpu.yml.
On PRs it runs the full GPU suite only when the one-shot gpu-ci label is
applied or someone with Triage or higher approves, and a new trigger
cancels the PR's in-flight run. Push to main and manual dispatch still run
the full suite. tests.yml keeps the CPU jobs and the path-gated gsm8k_eval.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Filter on label name and review state in the gate job's if, so unrelated
events skip every job instead of running the gate. Rename decide to
set_run_and_exit, and let any permission lookup error fail the gate.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The label now skips while a healthy GPU run on the same head commit is in
flight, and is removed whether or not it starts a run. GPU jobs skipped by
the gate use a per-run throwaway concurrency group, so a skipped trigger
cannot cancel the PR's in-flight run.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@garrett361
garrett361 marked this pull request as ready for review October 20, 2026 21:13
@garrett361
garrett361 requested a review from rustielin October 21, 2026 09:19

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants