3434 - " 3.13"
3535 - " 3.14"
3636 - " 3.14t"
37+ - " 3.15"
38+ - " 3.15t"
3739 name : py${{ matrix.python-version }}
3840 runs-on : ${{ (inputs.host-platform == 'linux-64' && 'linux-amd64-cpu8') ||
3941 (inputs.host-platform == 'linux-aarch64' && 'linux-arm64-cpu8') ||
4244 - name : Checkout ${{ github.event.repository.name }}
4345 uses : actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
4446 with :
47+ # Treeless clone: setuptools-scm needs the commit graph (`git describe`)
48+ # but not historical blobs.
4549 fetch-depth : 0
50+ filter : blob:none
4651
4752 - name : Install latest rapidsai/sccache
4853 if : ${{ startsWith(inputs.host-platform, 'linux') }}
@@ -162,12 +167,17 @@ jobs:
162167 cuda-version : ${{ inputs.cuda-version }}
163168
164169 - name : Build cuda.bindings wheel
165- uses : pypa/cibuildwheel@8d2b08b68458a16aeb24b64e68a09ab1c8e82084 # v3.4.1
170+ uses : pypa/cibuildwheel@54327ab9d35de03b359ac25c97de9417d94639c0 # v4.0.0rc1
166171 with :
167172 package-dir : ./cuda_bindings/
168173 output-dir : ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}
169174 env :
170175 CIBW_BUILD : ${{ env.CIBW_BUILD }}
176+ # TODO: remove cpython-prerelease once 3.15 is officially supported
177+ # Allow CPython pre-release builds (currently 3.15 / 3.15t). This is a
178+ # no-op for stable Python versions because CIBW_BUILD still filters
179+ # the target version.
180+ CIBW_ENABLE : cpython-prerelease
171181 # CIBW mounts the host filesystem under /host
172182 CIBW_ENVIRONMENT_LINUX : >
173183 CUDA_PATH=/host/${{ env.CUDA_PATH }}
@@ -226,12 +236,17 @@ jobs:
226236 if-no-files-found : error
227237
228238 - name : Build cuda.core wheel
229- uses : pypa/cibuildwheel@8d2b08b68458a16aeb24b64e68a09ab1c8e82084 # v3.4.1
239+ uses : pypa/cibuildwheel@54327ab9d35de03b359ac25c97de9417d94639c0 # v4.0.0rc1
230240 with :
231241 package-dir : ./cuda_core/
232242 output-dir : ${{ env.CUDA_CORE_ARTIFACTS_DIR }}
233243 env :
234244 CIBW_BUILD : ${{ env.CIBW_BUILD }}
245+ # TODO: remove cpython-prerelease once 3.15 is officially supported
246+ # Allow CPython pre-release builds (currently 3.15 / 3.15t). This is a
247+ # no-op for stable Python versions because CIBW_BUILD still filters
248+ # the target version.
249+ CIBW_ENABLE : cpython-prerelease
235250 # CIBW mounts the host filesystem under /host
236251 CIBW_ENVIRONMENT_LINUX : >
237252 CUDA_PATH=/host/${{ env.CUDA_PATH }}
@@ -327,6 +342,8 @@ jobs:
327342 uses : actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
328343 with :
329344 python-version : ${{ matrix.python-version }}
345+ # TODO: remove allow-prereleases once 3.15 is officially supported
346+ allow-prereleases : ${{ startsWith(matrix.python-version, '3.15') }}
330347
331348 - name : verify free-threaded build
332349 if : endsWith(matrix.python-version, 't')
@@ -346,6 +363,71 @@ jobs:
346363 run : |
347364 pip install cuda_pathfinder/*.whl
348365
366+ - name : Hide GNU link.exe so Meson finds MSVC link.exe
367+ if : ${{ startsWith(inputs.host-platform, 'win') }}
368+ run : |
369+ if [ -f "/c/Program Files/Git/usr/bin/link.exe" ]; then
370+ mv "/c/Program Files/Git/usr/bin/link.exe" "/c/Program Files/Git/usr/bin/link.exe.bak"
371+ fi
372+
373+ # TODO: remove the numpy pre-build steps once 3.15 is officially supported
374+ # (numpy will publish pre-built 3.15 wheels at that point)
375+ - name : Download and patch numpy sdist (pre-release Python)
376+ if : ${{ startsWith(matrix.python-version, '3.15') }}
377+ run : |
378+ pip download --no-binary numpy --no-deps "numpy>=1.21.1" -d numpy-sdist/
379+ cd numpy-sdist && tar xf numpy-*.tar.gz && rm numpy-*.tar.gz
380+ # WAR: numpy 2.4.x ships [tool.cibuildwheel] config that is
381+ # incompatible with cibuildwheel v4.0 (cpython-freethreading enable
382+ # group, OpenBLAS before-build scripts, etc.). Strip the cibuildwheel
383+ # sections but preserve [tool.meson-python] (vendored meson path).
384+ python -c "
385+ import glob
386+ for f in glob.glob('numpy-*/pyproject.toml'):
387+ lines, skip = open(f).readlines(), False
388+ out = []
389+ for line in lines:
390+ hdr = line.strip()
391+ if hdr.startswith('[tool.cibuildwheel') or hdr.startswith('[[tool.cibuildwheel'):
392+ skip = True
393+ continue
394+ if skip and hdr.startswith('[') and 'cibuildwheel' not in hdr:
395+ skip = False
396+ if not skip:
397+ out.append(line)
398+ open(f, 'w').writelines(out)
399+ "
400+ echo "NUMPY_SRC_DIR=$(pwd)/$(ls -d numpy-*/)" >> $GITHUB_ENV
401+
402+ - name : Build numpy wheel (pre-release Python)
403+ if : ${{ startsWith(matrix.python-version, '3.15') }}
404+ uses : pypa/cibuildwheel@54327ab9d35de03b359ac25c97de9417d94639c0 # v4.0.0rc1
405+ env :
406+ CIBW_BUILD : ${{ env.CIBW_BUILD }}
407+ CIBW_SKIP : " *-musllinux* *-win32"
408+ CIBW_ARCHS_LINUX : " native"
409+ CIBW_BUILD_VERBOSITY : 1
410+ CIBW_CONFIG_SETTINGS : " setup-args=-Dallow-noblas=true"
411+ CIBW_CONFIG_SETTINGS_WINDOWS : " setup-args=--vsenv setup-args=-Dallow-noblas=true"
412+ CIBW_BEFORE_BUILD_WINDOWS : " pip install delvewheel"
413+ CIBW_REPAIR_WHEEL_COMMAND_WINDOWS : " delvewheel repair -w {dest_dir} {wheel}"
414+ CIBW_ENABLE : " cpython-prerelease"
415+ with :
416+ package-dir : ${{ env.NUMPY_SRC_DIR }}
417+ output-dir : numpy-wheel/
418+
419+ - name : Upload numpy wheel
420+ if : ${{ startsWith(matrix.python-version, '3.15') }}
421+ uses : actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
422+ with :
423+ name : numpy-python${{ env.PYTHON_VERSION_FORMATTED }}-${{ inputs.host-platform }}
424+ path : numpy-wheel/*.whl
425+ if-no-files-found : error
426+
427+ - name : Install numpy wheel
428+ if : ${{ startsWith(matrix.python-version, '3.15') }}
429+ run : pip install numpy-wheel/*.whl
430+
349431 - name : Build cuda.bindings Cython tests
350432 run : |
351433 pip install ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}/*.whl --group ./cuda_bindings/pyproject.toml:test
@@ -411,12 +493,17 @@ jobs:
411493 rmdir $OLD_BASENAME
412494
413495 - name : Build cuda.core wheel
414- uses : pypa/cibuildwheel@8d2b08b68458a16aeb24b64e68a09ab1c8e82084 # v3.4.1
496+ uses : pypa/cibuildwheel@54327ab9d35de03b359ac25c97de9417d94639c0 # v4.0.0rc1
415497 with :
416498 package-dir : ./cuda_core/
417499 output-dir : ${{ env.CUDA_CORE_ARTIFACTS_DIR }}
418500 env :
419501 CIBW_BUILD : ${{ env.CIBW_BUILD }}
502+ # TODO: remove cpython-prerelease once 3.15 is officially supported
503+ # Allow CPython pre-release builds (currently 3.15 / 3.15t). This is a
504+ # no-op for stable Python versions because CIBW_BUILD still filters
505+ # the target version.
506+ CIBW_ENABLE : cpython-prerelease
420507 # CIBW mounts the host filesystem under /host
421508 CIBW_ENVIRONMENT_LINUX : >
422509 CUDA_PATH=/host/${{ env.CUDA_PATH }}
0 commit comments