Skip to content

Commit 8b1fb02

Browse files
authored
Merge branch 'main' into nvvm_extras
2 parents 129a571 + 637e4eb commit 8b1fb02

File tree

255 files changed

+19604
-3710
lines changed

Some content is hidden

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

255 files changed

+19604
-3710
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: 286 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,286 @@
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 two-stage process: first publish to TestPyPI, verify, then
127+
publish to PyPI.
128+
129+
### Stage 1: TestPyPI
130+
131+
1. Go to **Actions > CI: Release** and run the workflow with:
132+
- **Component**: `cuda-core`
133+
- **The release git tag**: `cuda-core-v0.6.0`
134+
- **The GHA run ID that generated validated artifacts**: This is the
135+
run ID of the successful tag-triggered CI run from the previous step.
136+
You can find it in the URL when viewing the run in the Actions tab
137+
(e.g. `https://github.com/NVIDIA/cuda-python/actions/runs/123456789`
138+
— the run ID is `123456789`).
139+
- **build-ctk-ver**: the `cuda.build.version` from
140+
[`ci/versions.yml`](../ci/versions.yml) (e.g. `13.1.1`)
141+
- **Which wheel index to publish to**: `testpypi`
142+
143+
2. Wait for the workflow to complete.
144+
145+
3. Verify the TestPyPI upload by installing and running tests from a
146+
checked-out copy of the repository:
147+
148+
```bash
149+
pip install -i https://test.pypi.org/simple/ \
150+
--extra-index-url https://pypi.org/simple/ \
151+
cuda-core==0.6.0
152+
cd cuda_core/tests && pytest
153+
```
154+
155+
### Stage 2: PyPI
156+
157+
Once TestPyPI verification passes, rerun the same workflow with:
158+
- **Which wheel index to publish to**: `pypi`
159+
160+
After completion, verify:
161+
162+
```bash
163+
pip install cuda-core==0.6.0
164+
```
165+
166+
---
167+
168+
## Update the conda recipe & release conda packages
169+
170+
The conda-forge feedstock builds from the GitHub Release source archive
171+
(not from PyPI). There are three approaches to updating the feedstock,
172+
from least effort to most control.
173+
174+
### Approach A: Wait for the bot
175+
176+
The `regro-cf-autotick-bot` periodically scans for new releases and opens
177+
a PR automatically. If nothing has changed in the build requirements, the
178+
bot's PR may be sufficient — review it and ask a feedstock maintainer
179+
to merge. However, the bot only
180+
updates the version and sha256. If build dependencies, import paths, or
181+
other recipe fields have changed, the bot's PR will be incomplete and CI
182+
will fail.
183+
184+
### Approach B: Request a bot update
185+
186+
If the bot hasn't opened a PR, you can request one explicitly. Go to the
187+
feedstock's Issues tab and create a new "Bot commands" issue:
188+
189+
- **Title**: `@conda-forge-admin, please update version`
190+
- **Body**: (leave empty)
191+
192+
This triggers the bot to create a version-bump PR. As with approach A,
193+
review the PR and push additional fixes if needed.
194+
195+
### Approach C: Manual PR
196+
197+
For full control — or when the bot's PR needs extensive fixes — open a
198+
PR manually from a fork.
199+
200+
**Fork and clone** (one-time setup):
201+
202+
```bash
203+
gh repo fork conda-forge/cuda-core-feedstock --clone
204+
cd cuda-core-feedstock
205+
```
206+
207+
**Create a branch and edit `recipe/meta.yaml`:**
208+
209+
```bash
210+
git checkout -b update-v0.6.0 origin/main
211+
```
212+
213+
Update the following fields:
214+
215+
1. **`version`**: Set to the new version (e.g. `0.6.0`).
216+
2. **`number`** (build number): Reset to `0` for a new version.
217+
3. **`sha256`**: The SHA-256 of the source archive from the GitHub
218+
Release. Download it and compute the hash:
219+
220+
```bash
221+
curl -sL https://github.com/NVIDIA/cuda-python/releases/download/cuda-core-v0.6.0/cuda-python-cuda-core-v0.6.0.tar.gz \
222+
| sha256sum
223+
```
224+
225+
4. **Host dependencies**: Ensure all build-time dependencies are listed.
226+
For example, v0.6.0 added a Cython C++ dependency on `nvrtc.h`,
227+
requiring `cuda-nvrtc-dev` in both `host` requirements and
228+
`ignore_run_exports_from`.
229+
230+
5. **Test commands and descriptions**: Update any import paths or
231+
descriptions that changed (e.g. `cuda.core.experimental` ->
232+
`cuda.core`).
233+
234+
**Open a PR:**
235+
236+
```bash
237+
git add recipe/meta.yaml
238+
git commit -m "Update cuda-core to 0.6.0"
239+
git push <your-github-username> update-v0.6.0
240+
241+
gh pr create \
242+
--repo conda-forge/cuda-core-feedstock \
243+
--head <your-github-username>:update-v0.6.0 \
244+
--title "Update cuda-core to 0.6.0" \
245+
--body "Update cuda-core to version 0.6.0."
246+
```
247+
248+
### Notes
249+
250+
The feedstock CI (Azure Pipelines) triggers automatically on the PR.
251+
Monitor it for build failures — common issues include missing build-time
252+
header dependencies. Feedstock maintainers (listed in
253+
`recipe/meta.yaml` under `extra.recipe-maintainers`) can merge the PR.
254+
255+
---
256+
257+
## Post-release QA
258+
259+
*TBD*
260+
261+
---
262+
263+
## Finalize the announcement update
264+
265+
The release workflow creates a draft GitHub Release. To publish it:
266+
267+
1. Go to the repository on GitHub, click **Tags**, then switch to the
268+
**Releases** tab.
269+
2. Find the draft release for the new tag and click **Edit**.
270+
3. Copy the body from a previous release as a starting point. It
271+
typically links to the release notes in the documentation (e.g.
272+
`https://nvidia.github.io/cuda-python/cuda-core/latest/release/0.6.0-notes.html`).
273+
4. Update the link and any version references, then click
274+
**Publish release**.
275+
276+
---
277+
278+
## Send out the announcement internally
279+
280+
The release owner will prepare and send the announcement.
281+
282+
---
283+
284+
## Send out the announcement externally (GitHub Release -> Announcement)
285+
286+
*TBD*

.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@01619ebc9a6e3f6820274221b9956b3e7365000a # v4.1.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@01619ebc9a6e3f6820274221b9956b3e7365000a # v4.1.0
7171
with:
7272
copy_assignees: true
7373
copy_labels_pattern: true

0 commit comments

Comments
 (0)