Skip to content

Commit 90f1505

Browse files
committed
refactor(tests): integrate importlib-based runner with upstream system requirements and PEP 723 metadata
2 parents 0a1aee7 + eb6a33a commit 90f1505

441 files changed

Lines changed: 68743 additions & 16188 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.

.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/doc_preview/action.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ runs:
2222
# Note: the PR previews will be removed once merged to main or release/* (see below)
2323
- name: Deploy doc preview
2424
if: ${{ github.ref_name != 'main' && !startsWith(github.ref_name, 'release/') }}
25-
uses: JamesIves/github-pages-deploy-action@6c2d9db40f9296374acc17b90404b6e8864128c8 # v4.7.3
25+
uses: JamesIves/github-pages-deploy-action@d92aa235d04922e8f08b40ce78cc5442fcfbfa2f # v4.8.0
2626
with:
2727
git-config-name: cuda-python-bot
2828
git-config-email: cuda-python-bot@users.noreply.github.com
@@ -32,7 +32,7 @@ runs:
3232

3333
- name: Leave a comment after deployment
3434
if: ${{ github.ref_name != 'main' && !startsWith(github.ref_name, 'release/') }}
35-
uses: marocchino/sticky-pull-request-comment@67d0dec7b07ed060a405f9b2a64b8ab319fdd7db # v2.9.2
35+
uses: marocchino/sticky-pull-request-comment@d4d6b0936434b21bc8345ad45a440c5f7d2c40ff # v3.0.3
3636
with:
3737
header: pr-preview
3838
number: ${{ inputs.pr-number }}
@@ -49,7 +49,7 @@ runs:
4949
# The steps below are executed only when building on main or release/*.
5050
- name: Remove doc preview
5151
if: ${{ github.ref_name == 'main' || startsWith(github.ref_name, 'release/') }}
52-
uses: JamesIves/github-pages-deploy-action@6c2d9db40f9296374acc17b90404b6e8864128c8 # v4.7.3
52+
uses: JamesIves/github-pages-deploy-action@d92aa235d04922e8f08b40ce78cc5442fcfbfa2f # v4.8.0
5353
with:
5454
git-config-name: cuda-python-bot
5555
git-config-email: cuda-python-bot@users.noreply.github.com
@@ -59,7 +59,7 @@ runs:
5959

6060
- name: Leave a comment after removal
6161
if: ${{ github.ref_name == 'main' || startsWith(github.ref_name, 'release/') }}
62-
uses: marocchino/sticky-pull-request-comment@67d0dec7b07ed060a405f9b2a64b8ab319fdd7db # v2.9.2
62+
uses: marocchino/sticky-pull-request-comment@d4d6b0936434b21bc8345ad45a440c5f7d2c40ff # v3.0.3
6363
with:
6464
header: pr-preview
6565
number: ${{ inputs.pr-number }}

0 commit comments

Comments
 (0)