Skip to content

Commit 49ef467

Browse files
authored
Merge branch 'main' into supported-fs-fixture
2 parents a9f5f14 + 18f9bb5 commit 49ef467

359 files changed

Lines changed: 16326 additions & 1714 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.

.github/dependabot.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
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
#
33
# SPDX-License-Identifier: Apache-2.0
44

.github/workflows/backport.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ jobs:
3434
}}
3535
runs-on: ubuntu-latest
3636
steps:
37-
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
37+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
3838

3939
- name: Load branch name
4040
id: get-branch
@@ -54,7 +54,7 @@ jobs:
5454
if: github.repository_owner == 'nvidia' && github.event_name == 'workflow_dispatch'
5555
runs-on: ubuntu-latest
5656
steps:
57-
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
57+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
5858

5959
- name: Load branch from environment name
6060
if: inputs.backport-branch == null

.github/workflows/bandit.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ jobs:
2323
security-events: write
2424
steps:
2525
- name: Checkout
26-
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
26+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
2727

2828
- name: Install uv
29-
uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
29+
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
3030
with:
3131
enable-cache: false
3232

@@ -45,6 +45,6 @@ jobs:
4545
with:
4646
args: "check --select S --ignore ${{ steps.ignore-codes.outputs.codes }} --output-format sarif --output-file results.sarif"
4747
- name: Upload SARIF file
48-
uses: github/codeql-action/upload-sarif@87557b9c84dde89fdd9b10e88954ac2f4248e463 # v4.36.1
48+
uses: github/codeql-action/upload-sarif@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2
4949
with:
5050
sarif_file: results.sarif

.github/workflows/build-docs.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ jobs:
5555
shell: bash -el {0}
5656
steps:
5757
- name: Checkout ${{ github.event.repository.name }}
58-
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
58+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
5959
with:
6060
fetch-depth: 1
6161
ref: ${{ inputs.git-tag }}
@@ -276,7 +276,7 @@ jobs:
276276
- name: Restore lychee cache
277277
if: ${{ !inputs.is-release && github.ref_name != 'main' && !startsWith(github.ref_name, 'release/') }}
278278
id: restore-lychee-cache
279-
uses: actions/cache/restore@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
279+
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
280280
with:
281281
path: .lycheecache
282282
key: docs-rendered-lychee-${{ env.PR_NUMBER }}-${{ github.sha }}
@@ -316,7 +316,7 @@ jobs:
316316

317317
- name: Save lychee cache
318318
if: ${{ always() && !inputs.is-release && github.ref_name != 'main' && !startsWith(github.ref_name, 'release/') && steps.restore-lychee-cache.outputs.cache-hit != 'true' && steps.restore-lychee-cache.outputs.cache-primary-key != '' }}
319-
uses: actions/cache/save@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
319+
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
320320
with:
321321
path: .lycheecache
322322
key: ${{ steps.restore-lychee-cache.outputs.cache-primary-key }}

.github/workflows/build-wheel.yml

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ jobs:
4242
(inputs.host-platform == 'win-64' && 'windows-2022') }}
4343
steps:
4444
- name: Checkout ${{ github.event.repository.name }}
45-
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
45+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
4646
with:
4747
# Treeless clone: setuptools-scm needs the commit graph (`git describe`)
4848
# but not historical blobs.
@@ -77,7 +77,7 @@ jobs:
7777

7878
- name: Set up Python
7979
id: setup-python1
80-
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
80+
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
8181
with:
8282
# WAR: setup-python is not relocatable, and cibuildwheel hard-wires to 3.12...
8383
# see https://github.com/actions/setup-python/issues/871
@@ -166,7 +166,7 @@ jobs:
166166
cuda-version: ${{ inputs.cuda-version }}
167167

168168
- name: Build cuda.bindings wheel
169-
uses: pypa/cibuildwheel@54327ab9d35de03b359ac25c97de9417d94639c0 # v4.0.0rc1
169+
uses: pypa/cibuildwheel@294735312765b09d24a2fbec22660ce817587d55 # v4.1.0
170170
with:
171171
package-dir: ./cuda_bindings/
172172
output-dir: ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}
@@ -234,7 +234,7 @@ jobs:
234234
if-no-files-found: error
235235

236236
- name: Build cuda.core wheel
237-
uses: pypa/cibuildwheel@54327ab9d35de03b359ac25c97de9417d94639c0 # v4.0.0rc1
237+
uses: pypa/cibuildwheel@294735312765b09d24a2fbec22660ce817587d55 # v4.1.0
238238
with:
239239
package-dir: ./cuda_core/
240240
output-dir: ${{ env.CUDA_CORE_ARTIFACTS_DIR }}
@@ -336,7 +336,7 @@ jobs:
336336

337337
- name: Set up Python
338338
id: setup-python2
339-
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
339+
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
340340
with:
341341
python-version: ${{ matrix.python-version }}
342342
# TODO: remove allow-prereleases once 3.15 is officially supported
@@ -398,7 +398,7 @@ jobs:
398398
399399
- name: Build numpy wheel (pre-release Python)
400400
if: ${{ startsWith(matrix.python-version, '3.15') }}
401-
uses: pypa/cibuildwheel@54327ab9d35de03b359ac25c97de9417d94639c0 # v4.0.0rc1
401+
uses: pypa/cibuildwheel@294735312765b09d24a2fbec22660ce817587d55 # v4.1.0
402402
env:
403403
CIBW_BUILD: ${{ env.CIBW_BUILD }}
404404
CIBW_SKIP: "*-musllinux* *-win32"
@@ -462,6 +462,19 @@ jobs:
462462
cuda-version: ${{ inputs.prev-cuda-version }}
463463
cuda-path: "./cuda_toolkit_prev"
464464

465+
- name: Build cuda.core test binaries
466+
run: bash ${{ env.CUDA_CORE_TEST_BINARIES_DIR }}/build_test_binaries.sh
467+
468+
- name: Upload cuda.core test binaries
469+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
470+
with:
471+
name: ${{ env.CUDA_CORE_ARTIFACT_NAME }}-test-binaries
472+
path: |
473+
${{ env.CUDA_CORE_TEST_BINARIES_DIR }}/*.o
474+
${{ env.CUDA_CORE_TEST_BINARIES_DIR }}/*.a
475+
${{ env.CUDA_CORE_TEST_BINARIES_DIR }}/*.lib
476+
if-no-files-found: error
477+
465478
- name: Download cuda.bindings build artifacts from the prior branch
466479
env:
467480
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -490,7 +503,7 @@ jobs:
490503
rmdir $OLD_BASENAME
491504
492505
- name: Build cuda.core wheel
493-
uses: pypa/cibuildwheel@54327ab9d35de03b359ac25c97de9417d94639c0 # v4.0.0rc1
506+
uses: pypa/cibuildwheel@294735312765b09d24a2fbec22660ce817587d55 # v4.1.0
494507
with:
495508
package-dir: ./cuda_core/
496509
output-dir: ${{ env.CUDA_CORE_ARTIFACTS_DIR }}

.github/workflows/ci-nightly.yml

Lines changed: 119 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
# SPDX-License-Identifier: Apache-2.0
44

55
# Nightly CI pipeline that tests optional dependencies (PyTorch, numba-cuda)
6-
# against the latest cuda-python wheels built on main, and runs the standard
7-
# test suite on runners reserved for nightly-only use (e.g. arm64 l4×2).
6+
# against the latest cuda-python wheels built on main, runs the standard
7+
# test suite on runners reserved for nightly-only use (e.g. arm64 l4×2), and
8+
# exercises release-time CI helper scripts so they do not silently rot between releases.
89
#
910
# This workflow does NOT build wheels — it downloads them from the latest
1011
# successful CI run on main and runs integration/standard tests.
@@ -31,6 +32,22 @@ on:
3132
default: ''
3233

3334
jobs:
35+
test-ci-tools-for-release:
36+
name: "Nightly: CI tools for release"
37+
if: ${{ github.repository_owner == 'nvidia' }}
38+
runs-on: ubuntu-latest
39+
steps:
40+
- name: Checkout repository
41+
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
42+
with:
43+
fetch-depth: 1
44+
45+
- name: Run CI tools unit tests
46+
run: |
47+
python -m pip install pytest
48+
# Standalone CI tool tests; skip repo-root conftest.py (imports cuda.pathfinder).
49+
python -m pytest -v --noconftest ci/tools/tests
50+
3451
find-wheels:
3552
runs-on: ubuntu-latest
3653
outputs:
@@ -39,7 +56,7 @@ jobs:
3956
CUDA_BUILD_VER: ${{ steps.find.outputs.cuda_build_ver }}
4057
steps:
4158
- name: Checkout repository
42-
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
59+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
4360
with:
4461
fetch-depth: 1
4562

@@ -98,7 +115,7 @@ jobs:
98115
run-id: ${{ needs.find-wheels.outputs.RUN_ID }}
99116
sha: ${{ needs.find-wheels.outputs.HEAD_SHA }}
100117
test-mode: nightly-pytorch
101-
matrix_filter: 'map(select(.MODE == "nightly-pytorch"))'
118+
matrix_filter: 'map(select(.ENV.MODE == "nightly-pytorch"))'
102119

103120
test-pytorch-linux-aarch64:
104121
name: "Nightly PyTorch (linux-aarch64)"
@@ -116,7 +133,7 @@ jobs:
116133
run-id: ${{ needs.find-wheels.outputs.RUN_ID }}
117134
sha: ${{ needs.find-wheels.outputs.HEAD_SHA }}
118135
test-mode: nightly-pytorch
119-
matrix_filter: 'map(select(.MODE == "nightly-pytorch"))'
136+
matrix_filter: 'map(select(.ENV.MODE == "nightly-pytorch"))'
120137

121138
test-pytorch-windows:
122139
name: "Nightly PyTorch (win-64)"
@@ -134,7 +151,7 @@ jobs:
134151
run-id: ${{ needs.find-wheels.outputs.RUN_ID }}
135152
sha: ${{ needs.find-wheels.outputs.HEAD_SHA }}
136153
test-mode: nightly-pytorch
137-
matrix_filter: 'map(select(.MODE == "nightly-pytorch"))'
154+
matrix_filter: 'map(select(.ENV.MODE == "nightly-pytorch"))'
138155

139156
# ── numba-cuda tests ──
140157

@@ -154,7 +171,7 @@ jobs:
154171
run-id: ${{ needs.find-wheels.outputs.RUN_ID }}
155172
sha: ${{ needs.find-wheels.outputs.HEAD_SHA }}
156173
test-mode: nightly-numba-cuda
157-
matrix_filter: 'map(select(.MODE == "nightly-numba-cuda"))'
174+
matrix_filter: 'map(select(.ENV.MODE == "nightly-numba-cuda"))'
158175

159176
test-numba-cuda-linux-aarch64:
160177
name: "Nightly numba-cuda (linux-aarch64)"
@@ -172,7 +189,7 @@ jobs:
172189
run-id: ${{ needs.find-wheels.outputs.RUN_ID }}
173190
sha: ${{ needs.find-wheels.outputs.HEAD_SHA }}
174191
test-mode: nightly-numba-cuda
175-
matrix_filter: 'map(select(.MODE == "nightly-numba-cuda"))'
192+
matrix_filter: 'map(select(.ENV.MODE == "nightly-numba-cuda"))'
176193

177194
test-numba-cuda-windows:
178195
name: "Nightly numba-cuda (win-64)"
@@ -190,7 +207,83 @@ jobs:
190207
run-id: ${{ needs.find-wheels.outputs.RUN_ID }}
191208
sha: ${{ needs.find-wheels.outputs.HEAD_SHA }}
192209
test-mode: nightly-numba-cuda
193-
matrix_filter: 'map(select(.MODE == "nightly-numba-cuda"))'
210+
matrix_filter: 'map(select(.ENV.MODE == "nightly-numba-cuda"))'
211+
212+
# ── numba-cuda-mlir tests ──
213+
214+
test-numba-cuda-mlir-linux-64:
215+
name: "Nightly numba-cuda-mlir (linux-64)"
216+
if: ${{ github.repository_owner == 'nvidia' }}
217+
needs: find-wheels
218+
permissions:
219+
contents: read
220+
actions: read
221+
secrets: inherit
222+
uses: ./.github/workflows/test-wheel-linux.yml
223+
with:
224+
build-type: nightly
225+
host-platform: linux-64
226+
build-ctk-ver: ${{ needs.find-wheels.outputs.CUDA_BUILD_VER }}
227+
run-id: ${{ needs.find-wheels.outputs.RUN_ID }}
228+
sha: ${{ needs.find-wheels.outputs.HEAD_SHA }}
229+
test-mode: nightly-numba-cuda-mlir
230+
matrix_filter: 'map(select(.ENV.MODE == "nightly-numba-cuda-mlir"))'
231+
232+
test-numba-cuda-mlir-windows:
233+
name: "Nightly numba-cuda-mlir (win-64)"
234+
if: ${{ github.repository_owner == 'nvidia' }}
235+
needs: find-wheels
236+
permissions:
237+
contents: read
238+
actions: read
239+
secrets: inherit
240+
uses: ./.github/workflows/test-wheel-windows.yml
241+
with:
242+
build-type: nightly
243+
host-platform: win-64
244+
build-ctk-ver: ${{ needs.find-wheels.outputs.CUDA_BUILD_VER }}
245+
run-id: ${{ needs.find-wheels.outputs.RUN_ID }}
246+
sha: ${{ needs.find-wheels.outputs.HEAD_SHA }}
247+
test-mode: nightly-numba-cuda-mlir
248+
matrix_filter: 'map(select(.ENV.MODE == "nightly-numba-cuda-mlir"))'
249+
250+
# ── Released cuda-core against main pathfinder/bindings ──
251+
252+
test-cuda-core-linux-64:
253+
name: "Nightly cuda-core (linux-64)"
254+
if: ${{ github.repository_owner == 'nvidia' }}
255+
needs: find-wheels
256+
permissions:
257+
contents: read
258+
actions: read
259+
secrets: inherit
260+
uses: ./.github/workflows/test-wheel-linux.yml
261+
with:
262+
build-type: nightly
263+
host-platform: linux-64
264+
build-ctk-ver: ${{ needs.find-wheels.outputs.CUDA_BUILD_VER }}
265+
run-id: ${{ needs.find-wheels.outputs.RUN_ID }}
266+
sha: ${{ needs.find-wheels.outputs.HEAD_SHA }}
267+
test-mode: nightly-cuda-core
268+
matrix_filter: 'map(select(.ENV.MODE == "nightly-cuda-core"))'
269+
270+
test-cuda-core-windows:
271+
name: "Nightly cuda-core (win-64)"
272+
if: ${{ github.repository_owner == 'nvidia' }}
273+
needs: find-wheels
274+
permissions:
275+
contents: read
276+
actions: read
277+
secrets: inherit
278+
uses: ./.github/workflows/test-wheel-windows.yml
279+
with:
280+
build-type: nightly
281+
host-platform: win-64
282+
build-ctk-ver: ${{ needs.find-wheels.outputs.CUDA_BUILD_VER }}
283+
run-id: ${{ needs.find-wheels.outputs.RUN_ID }}
284+
sha: ${{ needs.find-wheels.outputs.HEAD_SHA }}
285+
test-mode: nightly-cuda-core
286+
matrix_filter: 'map(select(.ENV.MODE == "nightly-cuda-core"))'
194287

195288
# ── Standard tests on nightly-only runners ──
196289

@@ -210,7 +303,7 @@ jobs:
210303
run-id: ${{ needs.find-wheels.outputs.RUN_ID }}
211304
sha: ${{ needs.find-wheels.outputs.HEAD_SHA }}
212305
test-mode: standard
213-
matrix_filter: 'map(select(.MODE == "nightly-standard"))'
306+
matrix_filter: 'map(select(.ENV.MODE == "nightly-standard"))'
214307

215308
# ── Status check ──
216309

@@ -219,13 +312,18 @@ jobs:
219312
if: always()
220313
runs-on: ubuntu-latest
221314
needs:
315+
- test-ci-tools-for-release
222316
- find-wheels
223317
- test-pytorch-linux
224318
- test-pytorch-linux-aarch64
225319
- test-pytorch-windows
226320
- test-numba-cuda-linux-64
227321
- test-numba-cuda-linux-aarch64
228322
- test-numba-cuda-windows
323+
- test-numba-cuda-mlir-linux-64
324+
- test-numba-cuda-mlir-windows
325+
- test-cuda-core-linux-64
326+
- test-cuda-core-windows
229327
- test-standard-linux-aarch64
230328
steps:
231329
- name: Exit
@@ -235,7 +333,9 @@ jobs:
235333
# See ci.yml for the full rationale on why we must use always()
236334
# and explicitly check each result rather than relying on the
237335
# default behaviour.
238-
if ${{ needs.find-wheels.result != 'success' }}; then
336+
if ${{ needs.test-ci-tools-for-release.result == 'cancelled' ||
337+
needs.test-ci-tools-for-release.result == 'failure' ||
338+
needs.find-wheels.result != 'success' }}; then
239339
exit 1
240340
fi
241341
if ${{ needs.test-pytorch-linux.result == 'cancelled' ||
@@ -250,6 +350,14 @@ jobs:
250350
needs.test-numba-cuda-linux-aarch64.result == 'failure' ||
251351
needs.test-numba-cuda-windows.result == 'cancelled' ||
252352
needs.test-numba-cuda-windows.result == 'failure' ||
353+
needs.test-numba-cuda-mlir-linux-64.result == 'cancelled' ||
354+
needs.test-numba-cuda-mlir-linux-64.result == 'failure' ||
355+
needs.test-numba-cuda-mlir-windows.result == 'cancelled' ||
356+
needs.test-numba-cuda-mlir-windows.result == 'failure' ||
357+
needs.test-cuda-core-linux-64.result == 'cancelled' ||
358+
needs.test-cuda-core-linux-64.result == 'failure' ||
359+
needs.test-cuda-core-windows.result == 'cancelled' ||
360+
needs.test-cuda-core-windows.result == 'failure' ||
253361
needs.test-standard-linux-aarch64.result == 'cancelled' ||
254362
needs.test-standard-linux-aarch64.result == 'failure' }}; then
255363
exit 1

0 commit comments

Comments
 (0)