Skip to content

Commit 4eecdbc

Browse files
Andy-Jostclaude
andcommitted
Merge main into fix-2697-register-uuid-assert to pick up #3188 (cuDSS 1.0 library names)
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2 parents e603e0e + d5f37e0 commit 4eecdbc

1,113 files changed

Lines changed: 361455 additions & 59460 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.coderabbit.yaml‎

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
language: en-US
5+
tone_instructions: |
6+
Be direct, technical, brief. No praise, emojis, headings, or collapsible menus.
7+
Start each comment with one prefix:
8+
- suggestion: optional improvement;
9+
- important: must-fix/high-impact risk;
10+
- critical: blocking correctness/security/data-loss.
11+
12+
reviews:
13+
profile: chill
14+
15+
high_level_summary: true
16+
high_level_summary_in_walkthrough: true
17+
poem: false
18+
in_progress_fortune: false
19+
sequence_diagrams: false
20+
estimate_code_review_effort: false
21+
collapse_walkthrough: true
22+
23+
# Reduce noisy status/details sections.
24+
request_changes_workflow: false
25+
review_status: false
26+
review_details: false
27+
enable_prompt_for_ai_agents: false
28+
29+
auto_review:
30+
enabled: true
31+
drafts: false
32+
base_branches:
33+
- "^main$"
34+
ignore_usernames:
35+
- "copy-pr-bot[bot]"
36+
- "dependabot[bot]"
37+
- "github-actions[bot]"
38+
39+
tools:
40+
gitleaks:
41+
enabled: false
42+
markdownlint:
43+
enabled: false
44+
shellcheck:
45+
enabled: false
46+
47+
# Keep Autofix available, but disable the other finishing touch actions.
48+
finishing_touches:
49+
docstrings:
50+
enabled: false
51+
unit_tests:
52+
enabled: false
53+
simplify:
54+
enabled: false
55+
56+
pre_merge_checks:
57+
docstrings:
58+
mode: "off"
59+
title:
60+
mode: "off"
61+
description:
62+
mode: "off"
63+
issue_assessment:
64+
mode: "off"
65+
custom_checks: []
66+
67+
path_instructions:
68+
- path: "cuda_bindings_13/**/*"
69+
instructions: |
70+
Focus on Cython binding correctness, API and ABI stability, error-code propagation,
71+
resource ownership and reference counting, GIL handling, cross-platform behavior.
72+
Avoid style-only comments already covered by pre-commit.
73+
74+
- path: "cuda_core/**/*"
75+
instructions: |
76+
Focus on Python API stability, stream ordering, CUDA resource lifetime and ownership, CUDA Array Interface
77+
compatibility, host/device memory semantics, error translation, and free-threading correctness. Check that
78+
public behavior changes have corresponding tests, documentation and release notes. Avoid style-only comments
79+
already covered by pre-commit.
80+
81+
- path: "cuda_pathfinder/**/*"
82+
instructions: |
83+
Focus on deterministic path resolution across Linux and Windows, wheel and conda layouts, dynamic-library
84+
loading and cache semantics, and explicit behavior when the CUDA Toolkit is missing or partially installed.
85+
Check that errors preserve the package's public exception contracts.
86+
87+
- path: "cuda_python/**/*"
88+
instructions: |
89+
Focus on metapackage correctness, dependency and version pins, wheel and sdist contents, and documentation
90+
aggregation. Keep runtime functionality in the component packages and verify that packaging changes preserve
91+
compatibility among cuda-python, cuda-bindings, cuda-core, and cuda-pathfinder.
92+
93+
- path: "benchmarks/**/*"
94+
instructions: |
95+
Check that benchmark changes measure meaningful workloads, keep comparison axes and benchmark identifiers
96+
comparable, avoid excessive runtime, and preserve useful comparison data.
97+
98+
- path: "ci/**/*"
99+
instructions: |
100+
For CI and build scripts, focus on matrix correctness, the GPU-versus-CPU job split, targeted build and test
101+
behavior, cache and artifact handling, environment setup, clear failure modes, and avoiding unnecessary
102+
expensive jobs.
103+
104+
- path: ".github/**/*"
105+
instructions: |
106+
For GitHub workflows and repository automation, focus on least-privilege permissions, event triggers, matrix
107+
generation, status and check behavior, security boundaries, and avoiding unnecessary CI fanout.
108+
109+
- path: "**/*.pyx"
110+
instructions: |
111+
Focus on typed-memoryview safety, GIL and nogil correctness, exception specifications, fused-type behavior,
112+
Python reference ownership, and consistency with related declarations and generated type stubs.
113+
114+
- path: "**/*.pxd"
115+
instructions: |
116+
Focus on declaration and implementation consistency, typed-memoryview safety, GIL and nogil correctness,
117+
exception specifications, fused-type behavior, and API or ABI impact on Cython consumers.
118+
119+
knowledge_base:
120+
opt_out: false
121+
code_guidelines:
122+
filePatterns:
123+
- "AGENTS.md"
124+
- "CONTRIBUTING.md"
125+
- "cuda_bindings_13/AGENTS.md"
126+
- "cuda_core/AGENTS.md"
127+
- "cuda_core/tests/AGENTS.md"
128+
- "cuda_pathfinder/AGENTS.md"
129+
- "cuda_python/AGENTS.md"
130+
- "benchmarks/cuda_bindings/AGENTS.md"
131+
- "benchmarks/cuda_core/AGENTS.md"
132+
- "cuda_bindings_13/README.md"
133+
- "cuda_core/README.md"
134+
- "cuda_pathfinder/DESCRIPTION.rst"
135+
- "cuda_python/DESCRIPTION.rst"
136+
- "cuda_bindings_13/docs/source/contribute.rst"
137+
- "cuda_core/docs/source/contribute.rst"
138+
- "cuda_core/docs/source/concurrency.rst"
139+
- "cuda_core/docs/source/error_handling.rst"
140+
- "cuda_pathfinder/docs/source/contribute.rst"
141+
- "cuda_bindings_13/docs/source/release.rst"
142+
- "cuda_core/docs/source/release.rst"
143+
- "cuda_pathfinder/docs/source/release.rst"
144+
- "cuda_python/docs/source/release.rst"

‎.coveragerc‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@ plugins = Cython.Coverage
1111
core = ctrace
1212
branch = False
1313
relative_files = True
14-
# Omits specific definition files that causes plugin errors
14+
# Cython.Coverage cannot build a FileReporter for .pxd/.pxi (not standalone
15+
# translation units). Pattern in [run], not an enumeration: a new file of
16+
# either kind otherwise breaks `coverage html`. Must be [run], not [report].
1517
omit =
16-
*/windll.pxd
17-
*/_lib/windll.pxd
18-
*/_lib/utils.pxd
18+
*/*.pxd
19+
*/*.pxi
1920

2021
[report]
2122
show_missing = true

‎.gitattributes‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,11 @@ pixi.lock merge=binary linguist-language=YAML linguist-generated=true
1414
# `setuptools-scm` to correctly determine the version when building from a git
1515
# archive. See #1609.
1616
.git_archival.txt export-subst
17+
18+
# cuda.core compiles against the libcu++ headers of the vendored CCCL submodule
19+
# only; cuda_core/MANIFEST.in grafts those headers (and their licenses) into the
20+
# sdist explicitly. setuptools-scm 10 lists the files of an initialized
21+
# submodule, which would otherwise add the entire CCCL tree to the sdist and
22+
# make every egg_info walk it. "export-ignore" makes its file finder skip the
23+
# submodule. See #2940.
24+
cuda_core/third_party/cccl export-ignore

‎.github/ISSUE_TEMPLATE/release_checklist.yml‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ body:
2424
- label: "Finalize the doc update, including release notes (\"Note: Touching docstrings/type annotations in code is OK during code freeze, apply your best judgement!\")"
2525
- label: Update the docs for the new version
2626
- label: Create a public release tag
27-
- label: Wait for the tag-triggered CI run to complete, and use that run ID for release workflows
28-
- label: If any code change happens, rebuild the wheels from the new tag
29-
- label: Upload wheels to PyPI
30-
- label: Update the conda recipe & release conda packages
27+
- label: Wait for the tag-triggered CI run to complete, and use that run ID for release workflows (this will upload the release to PyPI)
28+
- label: Publish the release at https://github.com/NVIDIA/cuda-python/releases (this will trigger the conda package update)
29+
- label: Approve the conda-package update PR
3130
- label: Post-release QA
3231
- label: Finalize the announcement update
33-
- label: Send out the announcement internally
32+
- label: Send out the announcement internally (on `#swcuda-python`)
3433
- label: Send out the announcement externally (GitHub Release -> Announcement)
34+
- label: For a `cuda-bindings` release, make sure MAJOR and MAJOR-1 releases are made, as well as releases of `cuda-python` for MAJOR and MAJOR-1

‎.github/RELEASE-core.md‎

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,32 @@
66
This document covers the `cuda.core` release process. For other packages:
77
`cuda-bindings` and `cuda-python` involve a private repository and are not
88
documented here; `cuda-pathfinder` is largely automated by the
9-
[release-cuda-pathfinder.yml](workflows/release-cuda-pathfinder.yml)
9+
[CI: Release](workflows/release.yml)
1010
workflow.
1111

12+
To release `cuda-pathfinder`, dispatch **CI: Release** with
13+
`component` set to `cuda-pathfinder`, `release-action` set
14+
to `full-release`, and `git-tag` set to the existing
15+
`cuda-pathfinder-v<VERSION>` tag. The workflow finds the successful
16+
tag-triggered CI run, checks release notes, creates or reuses a draft,
17+
builds and deploys versioned docs, and uploads the source archive, checksum,
18+
and wheels. It publishes to TestPyPI, verifies installation and the imported
19+
version, then publishes to PyPI and verifies again before publishing the
20+
GitHub Release without marking it as latest. A failed
21+
docs build prevents asset uploads, package publication, and finalization.
22+
23+
The release-note checker runs from `git-tag`, not the workflow revision.
24+
For Pathfinder, that tag must contain a version
25+
of `ci/tools/check_release_notes.py` that writes `version=<VERSION>` to
26+
`GITHUB_OUTPUT`. The release-notes job rejects an empty version before
27+
documentation, asset uploads, or package publication can start. Pathfinder
28+
package publication also requires successful draft metadata preparation.
29+
30+
The default `dry-run` action validates preparation, builds docs, and
31+
collects release artifacts without creating a GitHub Release or publishing
32+
packages. It can be dispatched from a development branch; use
33+
`dry-run-docs-branch` only when a preview deployment is needed.
34+
1235
Each section below provides detailed guidance for a step in the
1336
[Release Checklist](ISSUE_TEMPLATE/release_checklist.yml). To start a
1437
release, create a new issue from that template and work through it item by
@@ -62,7 +85,14 @@ platforms as appropriate for each release.
6285
## Check (or update if needed) the dependency requirements
6386

6487
Review `cuda_core/pyproject.toml` and verify that all dependency
65-
requirements are current.
88+
requirements are current. The `cu12`/`cu13` extras declare the
89+
`cuda-bindings` floors; see "Bumping the cuda-bindings floor" in
90+
`cuda_core/AGENTS.md`.
91+
92+
Update the `cuda-core` pin in `cuda_python/setup.py` to the new minor
93+
series (`cuda-core~=X.Y.0`), and plan a `cuda-python` release right after
94+
this one. Until that release, `pip install cuda-python` resolves to the
95+
previous `cuda-core`.
6696

6797
---
6898

‎.github/actionlint.yaml‎

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,27 @@ self-hosted-runner:
88
labels:
99
- linux-amd64-cpu8
1010
- linux-amd64-gpu-l4-latest-1
11+
12+
# GitHub supports queued concurrency runs, but the latest actionlint release
13+
# does not yet recognize the concurrency.queue key.
14+
paths:
15+
".github/workflows/build-docs.yml":
16+
ignore:
17+
- 'unexpected key "queue" for "concurrency" section'
18+
".github/workflows/cleanup-pr-previews.yml":
19+
ignore:
20+
- 'unexpected key "queue" for "concurrency" section'
21+
".github/workflows/ci-workflow-health.yml":
22+
ignore:
23+
- 'unexpected key "queue" for "concurrency" section'
24+
# GitHub supports self-repository ($/) action references, but the latest
25+
# actionlint release does not yet recognize them (rhysd/actionlint#711).
26+
".github/workflows/release.yml":
27+
ignore:
28+
- 'specifying action "\$/[^"]+" in invalid format because ref is missing'
29+
".github/workflows/test-wheel-linux.yml":
30+
ignore:
31+
- 'specifying action "\$/[^"]+" in invalid format because ref is missing'
32+
".github/workflows/test-wheel-windows.yml":
33+
ignore:
34+
- 'specifying action "\$/[^"]+" in invalid format because ref is missing'
Lines changed: 9 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
# SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
1+
# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
22
#
33
# SPDX-License-Identifier: Apache-2.0
44

55
name: Docs in PRs
6-
description: Preview or clean up docs built from PRs
6+
description: Preview docs built from PRs
77

88
# A re-implementation based on the logic of https://github.com/rossjrw/pr-preview-action/blob/41a957c44a456a34718e9bcf825363194db5e6d5/README.md, due to limitations illustrated in NVIDIA/cuda-python#380.
99

@@ -18,20 +18,23 @@ inputs:
1818
runs:
1919
using: composite
2020
steps:
21-
# The steps below are executed only when testing in a PR.
22-
# Note: the PR previews will be removed once merged to main or release/* (see below)
2321
- name: Deploy doc preview
24-
if: ${{ github.ref_name != 'main' && !startsWith(github.ref_name, 'release/') }}
22+
if: ${{ startsWith(github.ref_name, 'pull-request/') }}
2523
uses: JamesIves/github-pages-deploy-action@d92aa235d04922e8f08b40ce78cc5442fcfbfa2f # v4.8.0
2624
with:
2725
git-config-name: cuda-python-bot
2826
git-config-email: [email protected]
2927
folder: ${{ inputs.source-folder }}
3028
target-folder: docs/pr-preview/pr-${{ inputs.pr-number }}/
3129
commit-message: "Deploy doc preview for PR ${{ inputs.pr-number }} (${{ github.sha }})"
30+
# Every PR preview, the main docs deploy, and the coverage deploy commit to
31+
# the shared gh-pages branch. Rebase onto a deployment that landed in the
32+
# meantime instead of force-pushing over it, which the branch ruleset
33+
# rejects (and which used to discard the other deployment).
34+
force: false
3235

3336
- name: Leave a comment after deployment
34-
if: ${{ github.ref_name != 'main' && !startsWith(github.ref_name, 'release/') }}
37+
if: ${{ startsWith(github.ref_name, 'pull-request/') }}
3538
uses: marocchino/sticky-pull-request-comment@d4d6b0936434b21bc8345ad45a440c5f7d2c40ff # v3.0.3
3639
with:
3740
header: pr-preview
@@ -45,27 +48,3 @@ runs:
4548
| <br> https://nvidia.github.io/cuda-python/pr-preview/pr-${{ inputs.pr-number }}/cuda-bindings/ <br>
4649
| <br> https://nvidia.github.io/cuda-python/pr-preview/pr-${{ inputs.pr-number }}/cuda-pathfinder/ <br><br>
4750
| <h6><br> Preview will be ready when the GitHub Pages deployment is complete. <br><br></h6>
48-
49-
# The steps below are executed only when building on main or release/*.
50-
- name: Remove doc preview
51-
if: ${{ github.ref_name == 'main' || startsWith(github.ref_name, 'release/') }}
52-
uses: JamesIves/github-pages-deploy-action@d92aa235d04922e8f08b40ce78cc5442fcfbfa2f # v4.8.0
53-
with:
54-
git-config-name: cuda-python-bot
55-
git-config-email: [email protected]
56-
folder: ${{ inputs.source-folder }}
57-
target-folder: docs/pr-preview/pr-${{ inputs.pr-number }}/
58-
commit-message: "Clean up doc preview for PR ${{ inputs.pr-number }} (${{ github.sha }})"
59-
60-
- name: Leave a comment after removal
61-
if: ${{ github.ref_name == 'main' || startsWith(github.ref_name, 'release/') }}
62-
uses: marocchino/sticky-pull-request-comment@d4d6b0936434b21bc8345ad45a440c5f7d2c40ff # v3.0.3
63-
with:
64-
header: pr-preview
65-
number: ${{ inputs.pr-number }}
66-
hide_and_recreate: true
67-
hide_classify: "OUTDATED"
68-
message: |
69-
Doc Preview CI
70-
:---:
71-
Preview removed because the pull request was closed or merged.

0 commit comments

Comments
 (0)