Skip to content

ci: build and test local CUDA 12 bindings - #3317

Draft
rwgk wants to merge 3 commits into
rwgk/cb12-staged-02-developerfrom
rwgk/cb12-staged-03-bindings-ci
Draft

rwgk wants to merge 3 commits into
rwgk/cb12-staged-02-developerfrom
rwgk/cb12-staged-03-bindings-ci

Conversation

@rwgk

@rwgk rwgk commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

— codex GPT-6 on behalf of Ralf —

Layer 3 of 7 of the staged "CUDA 12 bindings on main" stack. Previous: #3315. Next: #3318. Stack map at the bottom.

What this PR does

main starts building the CUDA 12 bindings wheel itself and running its GPU test suite, next to the existing CUDA 13 pipeline. Nothing else moves yet: cuda.core and the metapackage keep consuming the 12.9.x-branch artifacts (that cord is cut in #3318).

  • build-wheel.yml: after the CUDA 13 work, switch to the maintenance mini-CTK (already fetched for Core's cu12 half), build the cuda_bindings_12 wheel with the same cibuildwheel environment (shared through a YAML anchor), twine check it, upload it, and build and upload its Cython test extensions.
  • ci.yml: three new jobs, Maintenance bindings (linux-64 / linux-aarch64 / win-64), call the existing test workflows with bindings-only: true. Only matrix rows with CUDA_VER == 12.9.1 run, and only the bindings suite.
  • test-wheel-linux.yml, test-wheel-windows.yml: new inputs bindings-config and bindings-only; rows gain BINDINGS_ROOT.
  • ci/tools/env-vars, ci/tools/run-tests: CUDA_BINDINGS_ROOT replaces the hard-coded cuda_bindings_13.
  • cuda_bindings_12/pyproject.toml: wheel payload policy copied from CUDA 13 (include-package-data = false: wheels ship .pxd/.pxi and headers, not .pyx sources or .in templates; sdists keep everything) and cibuildwheel settings. Recorded in the upcoming release notes.

Temporary scaffolding: the artifact name maintenance-bindings-python<py>-cuda12.9.1-<platform>-<sha> and the three jobs exist only in this layer. #3318 folds the tests into the regular jobs and #3319 renames the artifacts to the final cuda-bindings-python<py>-cuda<toolkit>-... scheme.

After this merges

  • Every CI run additionally builds one CUDA 12 bindings wheel per Python version and platform (no Windows ARM64; CUDA 12 has no toolkit there) and runs the bindings suite on the matrix rows whose toolkit is 12.9.1 (a few extra GPU jobs per platform).
  • cuda.core, the metapackage, releases, and nightly are unchanged.

Where to look

All changes (8 files, +254 / -19)
  • .github/workflows/build-wheel.yml: maintenance wheel build/check/upload, Cython test build/upload, pip install -e ./ci, SCM preview bootstrap step, mini-CTK gating.
  • .github/workflows/ci.yml: ci-vars exports the registry JSON; three test-maintenance-bindings-* jobs; the checks aggregator expects them.
  • .github/workflows/test-wheel-linux.yml, test-wheel-windows.yml: bindings-config / bindings-only inputs, matrix filter, artifact prefix.
  • ci/tools/env-vars: MAINTENANCE_* build variables, CUDA_BINDINGS_ROOT, artifact prefix.
  • ci/tools/run-tests: bindings suite runs from CUDA_BINDINGS_ROOT.
  • cuda_bindings_12/pyproject.toml, docs/source/release/12.X.Y-notes.rst: payload policy and its note.
Validation
  • Full CI passed at the pre-rebase head afe9fc9e (run 41185002774), including the three new maintenance-bindings jobs.
  • Current head 24d485d405ec1b9fb82d061abd57666e03825e81 includes the follow-up fixes. Local validation: 303 CI-tool tests, actionlint passed. Full CI and native Pixi source/GPU checks have not been rerun for it.
Stack map: what main can do after each layer merges
Layer PR After it merges, main ...
1 #3314 behaves exactly as before; CI has one reader for the two bindings roots; CUDA 13 versions can no longer match a v12.* tag
2 #3315 lets a developer build, test, and document cuda_bindings_12/; the PR-time CPU source-build smoke covers both roots; three CUDA 12 runtime fixes are in
3 #3317 builds the CUDA 12 bindings wheel itself and runs its GPU tests; cuda.core and the metapackage still consume 12.9.x artifacts
4 #3318 uses same-run CUDA 12 wheels everywhere; PR CI no longer reads the 12.9.x branch
5 #3319 can release CUDA 12 from a v12.9.N tag on main; CUDA 13 releases are unchanged
6 #3321 builds and tests only what a change needs, per bindings root, reusing baseline artifacts
7 #3322 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.

@copy-pr-bot

copy-pr-bot Bot commented Oct 31, 2026

Copy link
Copy Markdown
Contributor

Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually.

Contributors can view more details about this message here.

@rwgk
rwgk added this pull request to stack #3316 October 31, 2026 05:13
@github-actions github-actions Bot added CI/CD CI/CD infrastructure cuda.bindings Everything related to the cuda.bindings module labels Oct 31, 2026
@rwgk rwgk added this to the cuda.bindings next milestone Oct 31, 2026
@rwgk rwgk added the enhancement Any code-related improvements label Oct 31, 2026
@rwgk rwgk self-assigned this Oct 31, 2026
@rwgk
rwgk force-pushed the rwgk/cb12-staged-03-bindings-ci branch 4 times, most recently from 97d969c to afe9fc9 Compare October 31, 2026 08:03

rwgk commented Oct 31, 2026

Copy link
Copy Markdown
Contributor Author

/ok to test afe9fc9

@github-actions

Copy link
Copy Markdown
Contributor

rwgk added 3 commits November 1, 2026 19:39
Signed-off-by: Ralf W. Grosse-Kunstleve <rgrossekunst@nvidia.com>
Signed-off-by: Ralf W. Grosse-Kunstleve <rgrossekunst@nvidia.com>
Signed-off-by: Ralf W. Grosse-Kunstleve <rgrossekunst@nvidia.com>
@rwgk
rwgk force-pushed the rwgk/cb12-staged-03-bindings-ci branch from 40bc259 to 24d485d Compare November 2, 2026 03:53

@mdboom mdboom left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR is a bit of a special case to call it out. It adds things that we wouldn't want permanently that subsequence steps remove, really to just "bootstrap" the wheels into the right place. It would be better if there were a way to bootstrap in a single step because this will put us on a path to merge each of these individually.

I think a better arrangement would be to have a lower-level wheel-building workflow for specific wheels that could be triggered manually. Then for bootstrapping, we kick it off directly, and otherwise it would just be used in various configurations from the existing build-wheel.yml script. But that's probably not worth it.

🔴 JUST AN IMPORTANT NOTE TO MAKE SURE THE STACK ABOVE THIS IS APPROVED BEFORE MERGING THIS SO WE DON'T GET STUCK IN THIS BAD INTERMEDIATE STATE.

- name: Prepare local maintenance SCM milestone
if: ${{ !inputs.single-cuda-major && (env.BUILD_BINDINGS == 'true' || env.TEST_BINDINGS == 'true') }}
run: |
python -m ci.tools.bindings_scm_version \

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See my previous comments in #3315 and #3316 about bindings_scm_version.

Comment thread .github/workflows/ci.yml
- name: Set up Python for CI tools
uses: ./.github/actions/setup-hardened-python
with:
python-version: "3.12"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again, 3.12 is an odd choice. 3.11 would be better.

Comment on lines +23 to +26
bindings-only:
description: Test this run's maintenance bindings wheel and Cython extensions.
type: boolean
default: false

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bindings-only is a confusing name for this variable (if the comment is correct). Maybe maintenance-bindings?

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

CI/CD CI/CD infrastructure cuda.bindings Everything related to the cuda.bindings module enhancement Any code-related improvements

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants