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
Layer 7 of 7 of the staged "CUDA 12 bindings on main" stack. Previous: #3321. Stack map at the bottom.
What this PR does
Removes what the previous six layers made obsolete, and writes down how the two roots are maintained from now on.
ci/versions.yml moves to schema 2: cuda.bindings.package_roots with toolkit_version and release_status; backport_branch, cuda.build, and cuda.prev_build are gone. bindings_config.py still reads the old format, because nightly may point at an older artifact source and release dry runs may point at retained CUDA 13 tags.
New pre-commit hook check-bindings-config: each root's setuptools-scm selector must be v<major>.* for its CUDA major, the metapackage selector table must agree, and Core's cu12/cu13 bindings floors must not exceed the pinned toolkits. The old floor hook in toolshed/ is narrowed to extras and docs.
The Pixi pin hook now checks Core's maintenance environment as well as its current environment.
backport.yml becomes manual-only: a merged PR number plus an existing target branch, with validation. No more automatic backports on the to-be-backported label. Dependabot's 12.9.x entry is removed.
ci-nightly.yml extracts only ci/versions.yml from the artifact-source archive: schema-2 sources take the new route, older sources the legacy route (legacy-backport-branch). The legacy artifact aliases (cuda-python-wheel, <core artifact>-tests) are no longer produced.
Docs: CONTRIBUTING.md (selector table, transferring a fix between roots with git format-patch --relative and git am --directory, CUDA-major artifact flow, release branches), ci/README.md (registry, SCM milestones, nightly rollout, how to read CI job names, historical reruns, maintaining both roots, changing the supported lines), AGENTS.md (SYNCED blocks), cuda_bindings_12/MAINTENANCE.md (new), install page driver baseline correction (Linux 525.60.13, Windows 528.33), CI diagram.
After this merges
The 12.9.x branch is frozen except for emergency fixes; routine CUDA 12 work happens in cuda_bindings_12/ on main.
The milestone/bootstrap cleanup can happen earlier: once corrected ci: normalize toolkit configuration and isolate CUDA 13 versions #3314 lands, create retained v12.9.11a0 on validated main, restack both alternatives onto that history, and remove the bootstrap. Until then it remains in this stack.
Remove the legacy nightly route after the first schema-2 main run succeeds.
Not exercised: the manual backport workflow against a live branch, and the nightly workflow against a schema-2 artifact source (there is none until this stack is on main).
374 CI-tool tests passed locally; full pre-commit passed at 126ed74fb5bbfbc91a04e50557cf936efef4da7f.
The Windows 3.14t/A100-MCDM regression job passed on driver 596.36. DeviceMR and PinnedMR pool-trim cases ran serially and passed; ManagedMR had its normal unsupported-device skip.
Stack map: what main can do after each layer merges
carries the schema-2 registry, a manual-only backport workflow, a metadata consistency hook, and the maintenance docs; 12.9.x is frozen
Every layer was designed to be mergeable on its own and had a green full CI run at its pre-rebase head on 2026-10-31. The stack is the "individually mergeable pieces" alternative to #3174-#3182; both stacks reach the same end state except that this one keeps compatibility routes for older artifact sources and retained CUDA 13 tags.
No actionable comments were generated in the recent review.
Summary
Summary by CodeRabbit
Documentation
Clarified that CUDA 12.9 and CUDA 13 bindings are maintained on main and share the same package and namespace; use separate Python environments for each.
Updated installation guidance for CUDA 13’s metapackage and direct installation of low-level bindings, including optional Toolkit components.
Documented CUDA 12 driver requirements, optional Toolkit components, and separate documentation build steps.
Clarified that nightly builds publish wheels for both CUDA 12 and CUDA 13.
Release Improvements
Release builds now validate and package the bindings line selected by the tag.
CUDA 12.9 and CUDA 13 bindings roots are registered on main. CI selects package roots from the registry and validates package metadata, toolkit floors, and release inputs. Workflows and documentation describe the two-root maintenance, testing, and release model.
The registry defines CUDA 12 maintenance and CUDA 13 current roots. Checks validate toolkit floors, package metadata, and CUDA Core pins. Related tests and hooks are updated.
Nightly, coverage, and wheel-test selection .github/workflows/ci-nightly.yml, .github/workflows/coverage.yml, .github/workflows/test-wheel-*, .github/workflows/build-wheel.yml
Nightly and coverage workflows resolve bindings configuration and package roots. Legacy wheel tests receive an explicit backport branch. The workflows remove legacy artifact aliases.
Release and backport workflow .github/RELEASE-bindings.md, .github/workflows/backport.yml, .github/dependabot.yml
The backport workflow requires manual dispatch and validates its source PR and target branch. Release instructions select the tagged bindings line. The Actions Dependabot entry for 12.9.x is removed.
Guidance covers cross-root fixes, synchronized snippets, generated files, and maintenance branches. Routine CUDA 12 work is directed to main; emergency fixes from 12.9.x must be reconciled.
Bindings installation and documentation guides cuda_bindings_12/README.md, cuda_bindings_12/docs/*, cuda_bindings_13/README.md, cuda_bindings_13/docs/*
The guides distinguish source roots, release tags, dependencies, and documentation environments. CUDA 12 installation guidance updates driver baselines and optional Toolkit components.
CI planning and release documentation ci/README.md, ci/ci-pipeline.mmd
The CI guide documents registry-based selection, nightly artifacts, workplans, release reruns, and release-line rollover. The pipeline diagram includes package planning and selected-component publication.
Possibly related issues
Branch cleanup #2190: The maintenance changes move routine CUDA 12 work to main and reserve the former branch for emergency fixes.
Reviewing files that changed from the base of the PR and between 26c9902 and 126ed74.
Files selected for processing: 16
.github/workflows/build-wheel.yml
.github/workflows/ci-nightly.yml
.github/workflows/coverage.yml
CONTRIBUTING.md
README.md
ci/README.md
ci/tools/bindings_config.py
ci/tools/check_pixi_cuda_version.py
ci/tools/tests/test_bindings_config.py
ci/tools/tests/test_bindings_metadata.py
ci/versions.yml
cuda_bindings_12/README.md
cuda_bindings_12/docs/source/install.md
cuda_bindings_13/README.md
cuda_bindings_13/docs/source/install.rst
cuda_core/tests/test_memory.py
Files with no reviewable changes: 1
.github/workflows/build-wheel.yml
Files skipped from review as they are similar to previous changes: 2
README.md
ci/README.md
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 · Security & Privacy · Quick win
important: Remove the persisted checkout credential before installing CI dependencies.
find-wheels now runs pip install -e ./ci after a checkout that retains its credential. A dependency build script can access that credential. Set persist-credentials: false on the checkout and give find-wheels only the contents: read and actions: read permissions it needs. (github.com)
Based on learnings: jobs that run dependency build tooling should use persist-credentials: false and minimal permissions. As per path instructions: “focus on least-privilege permissions” for workflows.
Tools
zizmor (1.30.1)
[warning] 15-468: overly broad permissions (excessive-permissions): default permissions used due to no permissions: block
(excessive-permissions)
[warning] 72-165: overly broad permissions (excessive-permissions): default permissions used due to no permissions: block
The reason will be displayed to describe this comment to others. Learn more.
Minor · Security & Privacy · Quick win
important: Remove the persisted checkout credential from coverage-vars.
coverage-vars now installs CI dependencies after a checkout that retains its credential. A dependency build script can access that credential. Set persist-credentials: false on this checkout and declare contents: read for coverage-vars. (github.com)
Based on learnings: jobs that run dependency build tooling should use persist-credentials: false and minimal permissions. As per path instructions: “focus on least-privilege permissions” for workflows.
Tools
zizmor (1.30.1)
[warning] 5-623: overly broad permissions (excessive-permissions): default permissions used due to no permissions: block
(excessive-permissions)
[warning] 19-45: overly broad permissions (excessive-permissions): default permissions used due to no permissions: block
The reason will be displayed to describe this comment to others. Learn more.
Minor · Functional Correctness · Quick win
important: --group was added in pip 25.1, but this setup command does not require or upgrade pip. With pip 25.0 or older, the command fails before installing the package. Add a pip>=25.1 prerequisite or retain the [test] extra; apply the same correction to cuda_bindings_13/README.md Line 25. (pip.pypa.io)
Refs: #3350. Preserve every parameter and assertion; only concurrent execution is disabled for this affected test.
Signed-off-by: Ralf W. Grosse-Kunstleve <rgrossekunst@nvidia.com>
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
CI/CDCI/CD infrastructurecuda.bindingsEverything related to the cuda.bindings modulecuda.coreEverything related to the cuda.core moduleenhancementAny code-related improvements
1 participant
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 —
Layer 7 of 7 of the staged "CUDA 12 bindings on
main" stack. Previous: #3321. Stack map at the bottom.What this PR does
Removes what the previous six layers made obsolete, and writes down how the two roots are maintained from now on.
ci/versions.ymlmoves to schema 2:cuda.bindings.package_rootswithtoolkit_versionandrelease_status;backport_branch,cuda.build, andcuda.prev_buildare gone.bindings_config.pystill reads the old format, because nightly may point at an older artifact source and release dry runs may point at retained CUDA 13 tags.check-bindings-config: each root's setuptools-scm selector must bev<major>.*for its CUDA major, the metapackage selector table must agree, and Core's cu12/cu13 bindings floors must not exceed the pinned toolkits. The old floor hook intoolshed/is narrowed to extras and docs.backport.ymlbecomes manual-only: a merged PR number plus an existing target branch, with validation. No more automatic backports on theto-be-backportedlabel. Dependabot's12.9.xentry is removed.ci-nightly.ymlextracts onlyci/versions.ymlfrom the artifact-source archive: schema-2 sources take the new route, older sources the legacy route (legacy-backport-branch). The legacy artifact aliases (cuda-python-wheel,<core artifact>-tests) are no longer produced.CONTRIBUTING.md(selector table, transferring a fix between roots withgit format-patch --relativeandgit am --directory, CUDA-major artifact flow, release branches),ci/README.md(registry, SCM milestones, nightly rollout, how to read CI job names, historical reruns, maintaining both roots, changing the supported lines),AGENTS.md(SYNCED blocks),cuda_bindings_12/MAINTENANCE.md(new), install page driver baseline correction (Linux 525.60.13, Windows 528.33), CI diagram.After this merges
12.9.xbranch is frozen except for emergency fixes; routine CUDA 12 work happens incuda_bindings_12/onmain.v12.9.11a0on validatedmain, restack both alternatives onto that history, and remove the bootstrap. Until then it remains in this stack.mainrun succeeds.Where to look
ci/versions.yml: the final registry, 19 lines.ci/tools/bindings_config.py:check_package_metadata()andcheck_core_toolkit_floors()..github/workflows/backport.ymlandci-nightly.yml.ci/README.md, section "Maintaining Both Bindings Roots": the policy reviewers are really approving.All changes (36 files, +977 / -377)
Config and hooks:
ci/versions.yml,.pre-commit-config.yaml(new hook; floor hook narrowed),ci/tools/bindings_config.py(metadata checks),toolshed/check_cuda_core_bindings_floor.py,cuda_core/cuda/core/_bindings_floor.py(comment),cuda_core/tests/test_bindings_floor.py,ci/tools/tests/test_bindings_metadata.py(new),ci/tools/check_pixi_cuda_version.py,ci/tools/tests/test_bindings_config.py.CI workaround:
cuda_core/tests/test_memory.pyruns supported pool-trim cases serially for the known driver synchronization issue #3350.Workflows:
backport.yml,.github/dependabot.yml,ci-nightly.yml,coverage.yml(registry-driven),build-wheel.yml(aliases removed),test-wheel-linux.yml,test-wheel-windows.yml(legacy-backport-branchinput).Docs:
AGENTS.md,CONTRIBUTING.md,README.md,ci/README.md,ci/ci-pipeline.mmd,.github/RELEASE-bindings.md,cuda_bindings_12/{AGENTS.md,MAINTENANCE.md,README.md,docs/README.md,docs/source/contribute.md,docs/source/install.md,docs/source/release/12.X.Y-notes.rst},cuda_bindings_13/{AGENTS.md,README.md,docs/README.md,docs/source/install.rst,docs/source/support.rst},cuda_core/AGENTS.md.Validation
main).126ed74fb5bbfbc91a04e50557cf936efef4da7f.Stack map: what
maincan do after each layer mergesmain...v12.*tagcuda_bindings_12/; the PR-time CPU source-build smoke covers both roots; three CUDA 12 runtime fixes are incuda.coreand the metapackage still consume12.9.xartifacts12.9.xbranchv12.9.Ntag onmain; CUDA 13 releases are unchanged12.9.xis frozenEvery layer was designed to be mergeable on its own and had a green full CI run at its pre-rebase head on 2026-10-31. The stack is the "individually mergeable pieces" alternative to #3174-#3182; both stacks reach the same end state except that this one keeps compatibility routes for older artifact sources and retained CUDA 13 tags.