You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Use post-migration main artifacts and remove the temporary nightly fallback. Simplify wheel-test gating and environment setup, and remove unused lookup options, helpers and tool installation. Restrict coverage deployment to main.
Historical release-tag compatibility remains supported here; its removal is isolated in #3456.
Local validation: 400 CI-tool tests, all-files pre-commit, and independent tag/matrix comparisons. Codex and Fable 5.2 at max effort converged after two cross-review rounds. Hosted validation: full CI (105/105), nightly and manual coverage passed. Validation results.
The reason will be displayed to describe this comment to others. Learn more.
I am marking this as "approve", but the simplification doesn't quite yet go far enough. There is no need to retain "run the CI on main, but release for an historical branch" compatibility, because we can just run the CI on that historical branch to make the release. (When you trigger a workflow, the first drop down is always the branch to run from). So the description below should either be added to this PR or done as a follow-on.
🤖
Suggestion: also drop the legacy release-tag path, not just the nightly fallback
The PR removes the pre-migration nightly fallback but keeps "historical release-tag compatibility" in ci/tools/bindings_config.py. I think that can go too, so this cleanup finishes the job.
What the retained path does
resolve_release_bindings_package() accepts a tagged tree whose ci/versions.yml has no schema_version. For those trees it:
reads cuda.build.version and cuda.prev_build.version,
requires a 13.x build toolkit,
picks cuda_bindings_13, falling back to cuda_bindings by checking which directory exists,
picks cuda_bindings_12 for v12.* tags,
emits allow_legacy_python_artifact: true for the current package.
ci/tools/download-wheels uses that flag to accept the old unqualified cuda-python-wheel artifact name when cuda-python-wheel-cuda<toolkit> doesn't exist.
Why it exists
release.yml and build-docs.yml are dispatched from main. They check out main as the control plane and the release tag as the source, and the new tooling interprets the old tree. That forces main to understand every historical versions.yml layout.
Why I think it isn't needed
A release of an older line (a maintenance branch, or a pre-migration tag) can be cut from that line's own CI. workflow_dispatch runs the workflow file from whatever ref it is dispatched on, so a dispatch on the maintenance branch uses that branch's own release.yml, tooling and artifact naming. The maintenance branch already had a working release flow before the migration.
The wheels for those tags were built and tested by the tag's own CI. release.yml only finds that run, downloads its artifacts and publishes them. Nothing about that step requires the new tooling to read old config.
Keeping the shim ties main to layouts it no longer produces, and it needs its own tests. It also has no natural end date, unlike the nightly fallback.
Proposed removal
bindings_config.py: delete the legacy_config branches in resolve_release_bindings_package() (the "schema_version" not in raw path, the prev_build handling, and the legacy_config checks on the root directory and the flag). Keep the registry path; it still serves new-schema tags.
download-wheels: delete the allow_legacy_python_artifact fallback to cuda-python-wheel.
Tests: delete the legacy release-resolution cases.
Docs and PR text: drop "Historical release-tag compatibility remains supported", and state in ci/README.md that old-layout tags are released from their own branch.
After this, a pre-migration tag dispatched from main fails fast with "schema_version must be 2", which is the same behavior this PR already gives nightly sources.
Things to confirm before merging
The maintenance branch's release.yml and tooling still work for the lines you intend to patch. If it has bit-rotted, fix that there rather than keeping compat on main.
Whether any pre-migration tag from main (CUDA 13) is still releasable. Those can be dispatched with --ref <tag> only if the tag contains release.yml, so check that or accept that they can't be re-released.
Callers: I found --release-tag only in release.yml (resolve-bindings-package) and the bindings_config calls in build-docs.yml. Please double-check nothing else relies on the legacy output, for example docs rebuilds for old tags.
Add a line to the release docs saying "release old lines from their maintenance branch".
If you'd rather keep this in a separate PR, that works too, but it fits here: it is the last legacy-config reader in ci/tools.
Remove unused run lookup options, matrix and environment outputs, and the obsolete wheel workflow branch alias. Resolve each test row’s effective bindings root and toolkit once during matrix selection.
Tagged sources that predate the bindings registry built only CUDA 13
bindings. Their CI runs hold no toolkit-qualified CUDA 12 artifacts, and
v12.9.11a0 is the only CUDA 12 tag with such a source. Resolve these
sources to their CUDA 13 root alone, and let the existing toolkit match
reject CUDA 12 tags instead of routing them to artifacts that cannot
exist.
Drop CLI argument cross-checks whose misuse already fails loudly.
Co-Authored-By: Claude Fable 5.2 <[email protected]>
Matrix selection already knows whether a row has local wheels. Clear
TEST_BINDINGS and TEST_PYTHON on published-floor rows there, including
workplan-less nightly runs, so the wheel-test workflows no longer need
the SKIP_CUDA_BINDINGS_TEST override or repeated bindings-source
conditions. Step selection is unchanged for every checked-in matrix row
and test mode.
Coverage builds its own wheels and used only the build parallelism from
the wheel-test environment. Set that directly, so the scheduled workflow
stops tracking the test-environment inputs.
Co-Authored-By: Claude Fable 5.2 <[email protected]>
The Windows build downloaded a pinned yq.exe only to read the backport
branch from ci/versions.yml for the prior-major cuda.core build. That
lookup is gone, and nothing in the build job invokes yq anymore.
Co-Authored-By: Claude Fable 5.2 <[email protected]>
- Every source revision the nightly accepts carries the bindings
registry and therefore the Pathfinder mini-CTK checker, so run the
check without probing for the checker file.
- CUDA_BINDINGS_SOURCE_DIR lost its last reader when the docs build
switched to the resolved bindings package root.
- The tag lookup's artifact "verification" only fetched the run URL and
could at most print a warning.
Co-Authored-By: Claude Fable 5.2 <[email protected]>
The action installed gh in the container and self-hosted jobs that
looked up prior-branch CUDA 12 artifacts. Those lookups are gone, and
every remaining gh caller runs on a GitHub-hosted runner that ships gh.
Remove the action, its key-rotation notes and pinned keyring, and the
SPDX exclusion that existed only for that keyring.
Co-Authored-By: Claude Fable 5.2 <[email protected]>
Move the assertion that published-floor rows never select local-wheel
suites out of an earlier agent's test into a dedicated test carrying
this change's authorship marker, and assert the resulting suite list.
Co-Authored-By: Claude Fable 5.2 <[email protected]>
The suite label follows from the two flags, and the neighboring test
already asserts that the row uses published-floor bindings.
Co-Authored-By: Claude Fable 5.2 <[email protected]>
@mdboom, I expanded this cleanup with a Codex/Fable 5.2 (--effort max) pass and two rounds of cross-review:
ci: remove temporary nightly artifact fallback #3434 removes the nightly bridge, consolidates test gating and environment setup, and deletes unused lookup options, helpers and tool installation. Historical release behavior stays unchanged here.
ci: retire legacy release-layout compatibility #3456, stacked above it and ready for review, implements the release-layout cleanup from your review: registry-only release sources, no legacy metapackage-artifact fallback, and no old Python-matrix reader. Its description records the old-ref release/docs validation and pre-existing 12.9.x repairs to address before relying on those workflows.
Both descriptions are updated. Local validation passed: 400 CI-tool tests for this layer, 393 for #3456, all-files pre-commit, and independent tag/routing/ABI comparisons. Hosted validation of the cleanup remains pending, including a manual coverage.yml run; no new full CI runs were triggered.
No actionable comments were generated in the recent review.
Summary
Summary by CodeRabbit
Chores
Updated wheel-testing workflows to use toolkit-specific build artifacts and the current configuration format.
Nightly wheel tests no longer support pre-migration artifact snapshots or legacy configuration.
Expanded Python installability checks to include floor-toolkit configurations.
Removed the GitHub CLI installation action and its associated documentation.
The CI configuration now requires the bindings registry for nightly and wheel-test workflows. The change removes legacy snapshot parsing and prior-branch artifact lookup, updates artifact naming and test-matrix selection, and adjusts related CI workflows, documentation, and tests.
Changes: Nightly CI configuration and artifact flow
Layer / File(s)
Summary
Registry parsing and test matrix ci/tools/bindings_config.py, ci/tools/select_test_matrix.py, ci/tools/tests/*
Configuration parsing now requires the schema-versioned package registry. Matrix selection requires package metadata and derives bindings sources, test flags, and suites from configured packages and the workplan. Tests now use registry fixtures and cover published-floor test flags.
Nightly and wheel-test workflow wiring .github/workflows/ci-nightly.yml, .github/workflows/test-wheel-linux.yml, .github/workflows/test-wheel-windows.yml
Nightly jobs pass bindings configuration to the wheel-test workflows. Both workflows require that configuration and remove legacy backport inputs, prior-branch artifact lookup, and legacy matrix handling. Artifact downloads and test conditions now use the selected matrix values.
Artifact helpers and CI environment updates ci/tools/ci_artifacts.py, ci/tools/ci_env.py, ci/tools/lookup-run-id, .github/workflows/coverage.yml, .github/workflows/build-docs.yml, .github/workflows/build-wheel.yml, .github/actions/install-gh-cli/*, .spdx-ignore, ci/README.md
Artifact naming and test-environment setup now use toolkit and matrix values directly. Run lookup no longer checks artifact patterns. Related workflow setup, documentation, and signing-key tracking were updated or removed.
Assessment against linked issues
Objective
Addressed
Explanation
Remove LEGACY_CONFIG, old-branch artifact lookup and downloads, obsolete workflow inputs and outputs, and legacy-only parsing and tests [#3432]
✅
Require registry-based configuration and toolkit-qualified artifacts for nightly artifact sources, including explicit run selections [#3432]
The release-tag handling path remains in bindings_config.py, but the summaries do not establish that historical tags still work after the parser change.
Out-of-scope changes
Code Change
Explanation
Restrict coverage deployment to successful runs on the nvidia repository’s refs/heads/main (.github/workflows/coverage.yml:613)
The linked objective concerns nightly artifact fallback and does not specify coverage deployment restrictions.
Replace coverage environment setup with a command that sets CUDA_PYTHON_PARALLEL_LEVEL from nproc (.github/workflows/coverage.yml:121-123)
The linked objective does not specify changes to coverage test environment setup.
Possibly related PRs
NVIDIA/cuda-python#3449: Replaces inline GitHub CLI installation blocks with a composite action. It edits the same wheel-test workflow area where this PR removes artifact lookup plumbing.
NVIDIA/cuda-python#3319: Changes release package resolution through bindings_config.py. This PR also edits that module while retaining the release-tag path.
Suggested reviewers:jpascucci-nv, leofang
Change: Other
Merge Risk: Low · up to 295a6
The nightly run lookup may pick a tag-triggered run that lacks the full artifact set, which would fail the nightly job. The impact is limited to CI and is low. Adding a head-branch filter to the lookup would close it. Otherwise the cleanup looks mergeable.
Architecture risk: Low · up to 295a6
The change affects 1 system.
Changed systems:ci
Architecture concerns
No architecture-level concerns identified.
Review details
Systems and components
observed — ci (service) was modified; 8 changed files map to changed impact.
Before / after behavior
observed — Modified behavior in ci/README.md: The documentation replaces the fallback for older source revisions—which used their original configuration and artifact names—with a requirement that the source use the bindings registry and provide toolkit-qualified artifacts for both bindings directories; pre-migration snapshots are unsupported. Explicit run-id selections now have those same requirements. The DRIVER_SHA256 requirement for custom-driver rows remains documented.
observed — Modified behavior in ci/README.md: The documentation now describes ci/tools/select_test_matrix.py as applying shared selection and local-wheel coverage rules after each platform processes its source matrix and optional jq filter, removing the previous limitation to registry-backed runs.
observed — Modified behavior in ci/tools/bindings_config.py: The subprocess import was removed.
observed — Modified behavior in ci/tools/bindings_config.py: BindingsConfig.get_package, which searched for a package root and raised ValueError when none matched, was removed.
- [ ] Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Reviewing files that changed from the base of the PR and between f8c9be2 and 295a655.
Files selected for processing: 1
.github/workflows/coverage.yml
Included review availability: This review used your included allowance. Your plan provides up to 12 included reviews per hour; 9 remain after this review.
Included review availability: This review used your included allowance. Your plan provides up to 12 included reviews per hour; 10 remain after this review.
The reason will be displayed to describe this comment to others. Learn more.
Minor · Functional Correctness · Quick win
Filter branch-mode runs to the requested branch.
Branch mode takes the newest successful run for the first commit that has any run. It does not check the run's branch. A bindings-tag push on a main commit can create a newer push run at that commit. That run can build only the matching bindings root and cuda-python build. Nightly calls this path with no branch-level filter, so it can select the tag run.
This selection predates the artifact-check removal. Nightly never passed --artifact, so removing those checks does not change its selection. The fix is still needed to exclude tag-triggered runs.
All eight runs verified automatic exact-tag artifact selection, wheel versions/ABIs and documentation builds, with publishing and deployment skipped. The retained v13.5.0 runs cover historical flat configuration with the existing split bindings roots. Results apply to the listed refs; live publisher authentication and deployment remain untested.
#3456 needed retries for Windows Core memory-pool teardown errors and long runner waits. Successful jobs were retained for targeted retries; every affected test case passed on the unchanged PR revision.
The only code added during validation restricts coverage deployment to main (commit 295a655). All-files pre-commit passed.
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
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.
— codex GPT-6 on behalf of Ralf —
Description
Closes #3432.
Use post-migration
mainartifacts and remove the temporary nightly fallback. Simplify wheel-test gating and environment setup, and remove unused lookup options, helpers and tool installation. Restrict coverage deployment tomain.Historical release-tag compatibility remains supported here; its removal is isolated in #3456.
Local validation: 400 CI-tool tests, all-files pre-commit, and independent tag/matrix comparisons. Codex and Fable 5.2 at max effort converged after two cross-review rounds. Hosted validation: full CI (105/105), nightly and manual coverage passed. Validation results.
Checklist