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.
3132 default : ' '
3233
3334jobs :
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 :
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
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