Skip to content

Commit 9e8ade0

Browse files
authored
Merge branch 'main' into docs/add-uv-pixi-install-instructions
2 parents a0d8946 + a56ff12 commit 9e8ade0

File tree

413 files changed

+49589
-16017
lines changed

Some content is hidden

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

413 files changed

+49589
-16017
lines changed

.coveragerc

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,25 @@
1-
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
1+
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
22
# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE
33

4-
[report]
5-
show_missing = true
4+
[paths]
5+
source =
6+
cuda\
7+
cuda/
68

79
[run]
810
plugins = Cython.Coverage
911
core = ctrace
12+
branch = False
13+
relative_files = True
14+
# Omits specific definition files that causes plugin errors
15+
omit =
16+
*/windll.pxd
17+
*/_lib/windll.pxd
18+
*/_lib/utils.pxd
19+
20+
[report]
21+
show_missing = true
22+
precision = 2
23+
24+
[html]
25+
show_contexts = True

.github/ISSUE_TEMPLATE/release_checklist.yml

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
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

@@ -10,7 +10,7 @@ body:
1010
- type: markdown
1111
attributes:
1212
value: |
13-
This checklist is for cuda-core releases as well as cuda-bindings patches. Please go through this checklist and ensure all tasks are completed.
13+
This checklist is for cuda-core releases as well as cuda-bindings patches. Please go through this checklist and ensure all tasks are completed. See [RELEASE-core.md](../RELEASE-core.md) for detailed guidance on each step (cuda.core).
1414
1515
- type: checkboxes
1616
id: subpackage-tasks
@@ -20,17 +20,13 @@ body:
2020
- label: File an internal nvbug to communicate test plan & release schedule with QA
2121
- label: Ensure all pending PRs are reviewed, tested, and merged
2222
- label: Check (or update if needed) the dependency requirements
23-
- label: Create a public rc tag
24-
- label: "Point QA to fetch public artifacts (wheels) from the GHA run ID, example: `gh run download 12323257563 -p \"cuda-core*\" -R NVIDIA/cuda-python`"
25-
- label: Wait for QA reports and fix any issues found
2623
- label: "Finalize the doc update, including release notes (\"Note: Touching docstrings/type annotations in code is OK during code freeze, apply your best judgement!\")"
2724
- label: Update the docs for the new version
2825
- label: Create a public release tag
2926
- label: Wait for the tag-triggered CI run to complete, and use that run ID for release workflows
3027
- label: If any code change happens, rebuild the wheels from the new tag
31-
- label: Update the conda recipe & release conda packages
32-
- label: Upload conda packages to nvidia channel
3328
- label: Upload wheels to PyPI
29+
- label: Update the conda recipe & release conda packages
3430
- label: Post-release QA
3531
- label: Finalize the announcement update
3632
- label: Send out the announcement internally

.github/RELEASE-core.md

Lines changed: 266 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,266 @@
1+
<!-- SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -->
2+
<!-- SPDX-License-Identifier: Apache-2.0 -->
3+
4+
# cuda.core Release Process
5+
6+
This document covers the `cuda.core` release process. For other packages:
7+
`cuda-bindings` and `cuda-python` involve a private repository and are not
8+
documented here; `cuda-pathfinder` is largely automated by the
9+
[release-cuda-pathfinder.yml](workflows/release-cuda-pathfinder.yml)
10+
workflow.
11+
12+
Each section below provides detailed guidance for a step in the
13+
[Release Checklist](ISSUE_TEMPLATE/release_checklist.yml). To start a
14+
release, create a new issue from that template and work through it item by
15+
item, referring back here as needed.
16+
17+
---
18+
19+
## File an internal nvbug
20+
21+
Create an nvbug to request that SWQA begin post-release validation. Issues
22+
identified by that process are typically addressed in a patch release. To find
23+
the template, search for a previous release's nvbug (e.g. by title "Release of
24+
cuda.core") and create a new bug from the same template.
25+
26+
Example:
27+
28+
> **Title:** Release of cuda.core v0.6.0
29+
>
30+
> **Description:**
31+
>
32+
> Requesting SWQA validation for the cuda.core v0.6.0 release. Please test
33+
> the following SW combinations on all listed platforms and report any
34+
> issues found.
35+
>
36+
> **SW Combinations**
37+
> - cuda.core 0.6.0 / cuda.bindings 12.9 / CTK 12.9 / CUDA 12.9 driver
38+
> - cuda.core 0.6.0 / cuda.bindings 13.0 / CTK 13.0 / CUDA 13.0 driver
39+
> - cuda.core 0.6.0 / cuda.bindings 13.1 / CTK 13.1 / CUDA 13.1 driver
40+
>
41+
> **Platforms**
42+
> - Linux x86-64
43+
> - Linux arm64
44+
> - Windows x86-64 (TCC and WDDM)
45+
> - WSL
46+
>
47+
> **Test Plan**
48+
>
49+
> Functional tests as described in the cuda.core test plan.
50+
>
51+
> **Release Milestones**
52+
> - Pre-release QA (this request)
53+
> - GitHub release tag and posting
54+
> - PyPI wheel upload
55+
> - Post-release validation
56+
57+
Update the version, SW combinations (check with the release owner), and
58+
platforms as appropriate for each release.
59+
60+
---
61+
62+
## Check (or update if needed) the dependency requirements
63+
64+
Review `cuda_core/pyproject.toml` and verify that all dependency
65+
requirements are current.
66+
67+
---
68+
69+
## Finalize the doc update, including release notes
70+
71+
Review every PR included in the release. For each one, check whether new
72+
functions, classes, or features were added and whether they have complete
73+
docstrings. Add or edit docstrings as needed — touching docstrings and
74+
type annotations in code is OK during code freeze.
75+
76+
Write the release notes in `cuda_core/docs/source/release/`. Look at
77+
historical release notes for guidance on format and structure. Balance all
78+
entries for length, specificity, tone, and consistency. Highlight a few
79+
notable items in the highlights section, keeping their full entries in the
80+
appropriate sections below.
81+
82+
---
83+
84+
## Update the docs for the new version
85+
86+
Add the new version to
87+
`cuda_core/docs/nv-versions.json`. This file drives the version
88+
switcher on the documentation site. Add an entry for the new version
89+
after `"latest"`, following the existing pattern. The docs themselves are
90+
built and deployed automatically by the release workflow.
91+
92+
---
93+
94+
## Create a public release tag
95+
96+
**Warning:** Pushing a tag is a potentially irrevocable action. Be absolutely
97+
certain the tag points to the correct commit before pushing.
98+
99+
Tags should be GPG-signed. The tag name format is `cuda-core-v<VERSION>`
100+
(e.g. `cuda-core-v0.6.0`). The tag must point to a commit on `main`.
101+
102+
```bash
103+
git checkout main
104+
git pull origin main
105+
git tag -s cuda-core-v0.6.0 -m "cuda-core v0.6.0"
106+
git push origin cuda-core-v0.6.0
107+
```
108+
109+
---
110+
111+
## Wait for the tag-triggered CI run to complete
112+
113+
Pushing the tag triggers a CI run automatically. Monitor it in the
114+
**Actions** tab on GitHub.
115+
116+
- **All CI tests should succeed.** If any fail, investigate and rerun as
117+
needed.
118+
- Note the **run ID** of the successful tag-triggered run. The release
119+
workflow can auto-detect it from the tag, but you can also provide it
120+
explicitly.
121+
122+
---
123+
124+
## Upload wheels to PyPI
125+
126+
This is a single `CI: Release` workflow run with two sequential stages:
127+
publish to TestPyPI, then publish the same wheel set to PyPI.
128+
129+
1. Go to **Actions > CI: Release** and run the workflow with:
130+
- **Component**: `cuda-core`
131+
- **The release git tag**: `cuda-core-v0.6.0`
132+
133+
The workflow automatically looks up the successful tag-triggered CI run
134+
for the selected release tag.
135+
136+
2. Wait for the workflow to complete. It will:
137+
- publish the selected wheels to TestPyPI
138+
- publish the same wheel set to PyPI
139+
140+
3. After completion, verify the final PyPI upload:
141+
142+
```bash
143+
pip install cuda-core==0.6.0
144+
```
145+
146+
---
147+
148+
## Update the conda recipe & release conda packages
149+
150+
The conda-forge feedstock builds from the GitHub Release source archive
151+
(not from PyPI). There are three approaches to updating the feedstock,
152+
from least effort to most control.
153+
154+
### Approach A: Wait for the bot
155+
156+
The `regro-cf-autotick-bot` periodically scans for new releases and opens
157+
a PR automatically. If nothing has changed in the build requirements, the
158+
bot's PR may be sufficient — review it and ask a feedstock maintainer
159+
to merge. However, the bot only
160+
updates the version and sha256. If build dependencies, import paths, or
161+
other recipe fields have changed, the bot's PR will be incomplete and CI
162+
will fail.
163+
164+
### Approach B: Request a bot update
165+
166+
If the bot hasn't opened a PR, you can request one explicitly. Go to the
167+
feedstock's Issues tab and create a new "Bot commands" issue:
168+
169+
- **Title**: `@conda-forge-admin, please update version`
170+
- **Body**: (leave empty)
171+
172+
This triggers the bot to create a version-bump PR. As with approach A,
173+
review the PR and push additional fixes if needed.
174+
175+
### Approach C: Manual PR
176+
177+
For full control — or when the bot's PR needs extensive fixes — open a
178+
PR manually from a fork.
179+
180+
**Fork and clone** (one-time setup):
181+
182+
```bash
183+
gh repo fork conda-forge/cuda-core-feedstock --clone
184+
cd cuda-core-feedstock
185+
```
186+
187+
**Create a branch and edit `recipe/meta.yaml`:**
188+
189+
```bash
190+
git checkout -b update-v0.6.0 origin/main
191+
```
192+
193+
Update the following fields:
194+
195+
1. **`version`**: Set to the new version (e.g. `0.6.0`).
196+
2. **`number`** (build number): Reset to `0` for a new version.
197+
3. **`sha256`**: The SHA-256 of the source archive from the GitHub
198+
Release. Download it and compute the hash:
199+
200+
```bash
201+
curl -sL https://github.com/NVIDIA/cuda-python/releases/download/cuda-core-v0.6.0/cuda-python-cuda-core-v0.6.0.tar.gz \
202+
| sha256sum
203+
```
204+
205+
4. **Host dependencies**: Ensure all build-time dependencies are listed.
206+
For example, v0.6.0 added a Cython C++ dependency on `nvrtc.h`,
207+
requiring `cuda-nvrtc-dev` in both `host` requirements and
208+
`ignore_run_exports_from`.
209+
210+
5. **Test commands and descriptions**: Update any import paths or
211+
descriptions that changed (e.g. `cuda.core.experimental` ->
212+
`cuda.core`).
213+
214+
**Open a PR:**
215+
216+
```bash
217+
git add recipe/meta.yaml
218+
git commit -m "Update cuda-core to 0.6.0"
219+
git push <your-github-username> update-v0.6.0
220+
221+
gh pr create \
222+
--repo conda-forge/cuda-core-feedstock \
223+
--head <your-github-username>:update-v0.6.0 \
224+
--title "Update cuda-core to 0.6.0" \
225+
--body "Update cuda-core to version 0.6.0."
226+
```
227+
228+
### Notes
229+
230+
The feedstock CI (Azure Pipelines) triggers automatically on the PR.
231+
Monitor it for build failures — common issues include missing build-time
232+
header dependencies. Feedstock maintainers (listed in
233+
`recipe/meta.yaml` under `extra.recipe-maintainers`) can merge the PR.
234+
235+
---
236+
237+
## Post-release QA
238+
239+
*TBD*
240+
241+
---
242+
243+
## Finalize the announcement update
244+
245+
The release workflow creates a draft GitHub Release. To publish it:
246+
247+
1. Go to the repository on GitHub, click **Tags**, then switch to the
248+
**Releases** tab.
249+
2. Find the draft release for the new tag and click **Edit**.
250+
3. Copy the body from a previous release as a starting point. It
251+
typically links to the release notes in the documentation (e.g.
252+
`https://nvidia.github.io/cuda-python/cuda-core/latest/release/0.6.0-notes.html`).
253+
4. Update the link and any version references, then click
254+
**Publish release**.
255+
256+
---
257+
258+
## Send out the announcement internally
259+
260+
The release owner will prepare and send the announcement.
261+
262+
---
263+
264+
## Send out the announcement externally (GitHub Release -> Announcement)
265+
266+
*TBD*

.github/actions/fetch_ctk/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ inputs:
1414
cuda-components:
1515
description: "A list of the CTK components to install as a comma-separated list. e.g. 'cuda_nvcc,cuda_nvrtc,cuda_cudart'"
1616
required: false
17-
default: "cuda_nvcc,cuda_cudart,cuda_crt,libnvvm,cuda_nvrtc,cuda_profiler_api,cuda_cccl,libnvjitlink,libcufile,libnvfatbin"
17+
default: "cuda_nvcc,cuda_cudart,cuda_crt,libnvvm,cuda_nvrtc,cuda_profiler_api,cuda_cccl,cuda_cupti,libnvjitlink,libcufile,libnvfatbin"
1818
cuda-path:
1919
description: "where the CTK components will be installed to, relative to $PWD"
2020
required: false

.github/copy-pr-bot.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@
55
# https://docs.gha-runners.nvidia.com/apps/copy-pr-bot/
66

77
enabled: true
8-
# always require manual CI triggering, ignoring signed commits
8+
# auto-sync ready PRs so CI starts immediately; keep draft PRs manual
99
auto_sync_draft: false
10-
auto_sync_ready: false
10+
auto_sync_ready: true

.github/dependabot.yml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
version: 2
66
updates:
7+
# GitHub Actions updates targeting the default branch (main)
78
- package-ecosystem: github-actions
89
directory: /
910
schedule:
@@ -19,3 +20,21 @@ updates:
1920
applies-to: version-updates
2021
patterns: ["*"]
2122
update-types: ["major", "minor", "patch"]
23+
24+
# GitHub Actions updates targeting the 12.9.x branch
25+
- package-ecosystem: github-actions
26+
directory: /
27+
target-branch: "12.9.x" # keep in sync with backport_branch in ci/versions.yml
28+
schedule:
29+
interval: "monthly"
30+
time: "09:00"
31+
timezone: "America/Los_Angeles"
32+
33+
# Keep churn down: only one open PR from this ecosystem at a time
34+
open-pull-requests-limit: 1
35+
36+
groups:
37+
actions-monthly:
38+
applies-to: version-updates
39+
patterns: ["*"]
40+
update-types: ["major", "minor", "patch"]

.github/workflows/backport.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ jobs:
4343
echo "OLD_BRANCH=${OLD_BRANCH}" >> $GITHUB_ENV
4444
4545
- name: Create backport pull requests
46-
uses: korthout/backport-action@c656f5d5851037b2b38fb5db2691a03fa229e3b2 # v4.0.1
46+
uses: korthout/backport-action@3c06f323a58619da1e8522229ebc8d5de2633e46 # v4.3.0
4747
with:
4848
copy_assignees: true
4949
copy_labels_pattern: true
@@ -67,7 +67,7 @@ jobs:
6767
run: echo "BACKPORT_BRANCH=${{ inputs.backport-branch }}" >> $GITHUB_ENV
6868

6969
- name: Create backport pull requests
70-
uses: korthout/backport-action@c656f5d5851037b2b38fb5db2691a03fa229e3b2 # v4.0.1
70+
uses: korthout/backport-action@3c06f323a58619da1e8522229ebc8d5de2633e46 # v4.3.0
7171
with:
7272
copy_assignees: true
7373
copy_labels_pattern: true

0 commit comments

Comments
 (0)