@@ -150,6 +150,19 @@ jobs:
150150 run : |
151151 twine check --strict cuda_pathfinder/*.whl
152152
153+ - name : Constrain builds to the local cuda.pathfinder wheel
154+ run : |
155+ pathfinder_wheels=(cuda_pathfinder/cuda_pathfinder-*.whl)
156+ test "${#pathfinder_wheels[@]}" -eq 1
157+ test -f "${pathfinder_wheels[0]}"
158+ mkdir -p wheel-constraints
159+ if [[ "${{ inputs.host-platform }}" == win* ]]; then
160+ pathfinder_uri="file:///$(cygpath -am "${pathfinder_wheels[0]}")"
161+ else
162+ pathfinder_uri="file:///host$(realpath "${pathfinder_wheels[0]}")"
163+ fi
164+ printf 'cuda-pathfinder @ %s\n' "${pathfinder_uri}" | tee wheel-constraints/cuda-bindings.txt
165+
153166 - name : Upload cuda.pathfinder build artifacts
154167 if : ${{ strategy.job-index == 0 && inputs.host-platform == 'linux-64' }}
155168 uses : actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
@@ -172,6 +185,8 @@ jobs:
172185 output-dir : ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}
173186 env :
174187 CIBW_BUILD : ${{ env.CIBW_BUILD }}
188+ CIBW_BEFORE_BUILD_LINUX : ' python -m pip install --upgrade "pip>=25.3"'
189+ CIBW_BEFORE_BUILD_WINDOWS : ' python -m pip install --upgrade "pip>=25.3" delvewheel'
175190 # TODO: remove cpython-prerelease once 3.15 is officially supported
176191 # Allow CPython pre-release builds (currently 3.15 / 3.15t). This is a
177192 # no-op for stable Python versions because CIBW_BUILD still filters
@@ -181,6 +196,8 @@ jobs:
181196 CIBW_ENVIRONMENT_LINUX : >
182197 CUDA_PATH=/host/${{ env.CUDA_PATH }}
183198 CUDA_PYTHON_PARALLEL_LEVEL=${{ env.CUDA_PYTHON_PARALLEL_LEVEL }}
199+ PIP_BUILD_CONSTRAINT=/host/${{ github.workspace }}/wheel-constraints/cuda-bindings.txt
200+ PIP_CONSTRAINT=/host/${{ github.workspace }}/wheel-constraints/cuda-bindings.txt
184201 CC="/host/${{ env.SCCACHE_PATH }} cc"
185202 CXX="/host/${{ env.SCCACHE_PATH }} c++"
186203 SCCACHE_GHA_ENABLED=true
@@ -194,6 +211,8 @@ jobs:
194211 CIBW_ENVIRONMENT_WINDOWS : >
195212 CUDA_PATH="$(cygpath -w ${{ env.CUDA_PATH }})"
196213 CUDA_PYTHON_PARALLEL_LEVEL=${{ env.CUDA_PYTHON_PARALLEL_LEVEL }}
214+ PIP_BUILD_CONSTRAINT="$(cygpath -w ./wheel-constraints/cuda-bindings.txt)"
215+ PIP_CONSTRAINT="$(cygpath -w ./wheel-constraints/cuda-bindings.txt)"
197216 # check cache stats before leaving cibuildwheel
198217 CIBW_BEFORE_TEST_LINUX : >
199218 "/host/${{ env.SCCACHE_PATH }}" --show-adv-stats &&
@@ -226,6 +245,27 @@ jobs:
226245 run : |
227246 twine check --strict ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}/*.whl
228247
248+ - name : Constrain cuda.core to the local cuda.bindings wheel
249+ run : |
250+ pathfinder_wheels=(cuda_pathfinder/cuda_pathfinder-*.whl)
251+ bindings_wheels=("${CUDA_BINDINGS_ARTIFACTS_DIR}"/cuda_bindings-"${BUILD_CUDA_MAJOR}".*.whl)
252+ test "${#pathfinder_wheels[@]}" -eq 1
253+ test "${#bindings_wheels[@]}" -eq 1
254+ test -f "${pathfinder_wheels[0]}"
255+ test -f "${bindings_wheels[0]}"
256+ mkdir -p wheel-constraints
257+ if [[ "${{ inputs.host-platform }}" == win* ]]; then
258+ pathfinder_uri="file:///$(cygpath -am "${pathfinder_wheels[0]}")"
259+ bindings_uri="file:///$(cygpath -am "${bindings_wheels[0]}")"
260+ else
261+ pathfinder_uri="file:///host$(realpath "${pathfinder_wheels[0]}")"
262+ bindings_uri="file:///host$(realpath "${bindings_wheels[0]}")"
263+ fi
264+ {
265+ printf 'cuda-pathfinder @ %s\n' "${pathfinder_uri}"
266+ printf 'cuda-bindings @ %s\n' "${bindings_uri}"
267+ } | tee wheel-constraints/cuda-core.txt
268+
229269 - name : Upload cuda.bindings build artifacts
230270 uses : actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
231271 with :
@@ -240,6 +280,8 @@ jobs:
240280 output-dir : ${{ env.CUDA_CORE_ARTIFACTS_DIR }}
241281 env :
242282 CIBW_BUILD : ${{ env.CIBW_BUILD }}
283+ CIBW_BEFORE_BUILD_LINUX : ' python -m pip install --upgrade "pip>=25.3"'
284+ CIBW_BEFORE_BUILD_WINDOWS : ' python -m pip install --upgrade "pip>=25.3" delvewheel'
243285 # TODO: remove cpython-prerelease once 3.15 is officially supported
244286 # Allow CPython pre-release builds (currently 3.15 / 3.15t). This is a
245287 # no-op for stable Python versions because CIBW_BUILD still filters
@@ -250,7 +292,8 @@ jobs:
250292 CUDA_PATH=/host/${{ env.CUDA_PATH }}
251293 CUDA_PYTHON_PARALLEL_LEVEL=${{ env.CUDA_PYTHON_PARALLEL_LEVEL }}
252294 CUDA_CORE_BUILD_MAJOR=${{ env.BUILD_CUDA_MAJOR }}
253- PIP_FIND_LINKS=/host/${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}
295+ PIP_BUILD_CONSTRAINT=/host/${{ github.workspace }}/wheel-constraints/cuda-core.txt
296+ PIP_CONSTRAINT=/host/${{ github.workspace }}/wheel-constraints/cuda-core.txt
254297 CC="/host/${{ env.SCCACHE_PATH }} cc"
255298 CXX="/host/${{ env.SCCACHE_PATH }} c++"
256299 SCCACHE_GHA_ENABLED=true
@@ -265,7 +308,8 @@ jobs:
265308 CUDA_PATH="$(cygpath -w ${{ env.CUDA_PATH }})"
266309 CUDA_PYTHON_PARALLEL_LEVEL=${{ env.CUDA_PYTHON_PARALLEL_LEVEL }}
267310 CUDA_CORE_BUILD_MAJOR=${{ env.BUILD_CUDA_MAJOR }}
268- PIP_FIND_LINKS="$(cygpath -w ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }})"
311+ PIP_BUILD_CONSTRAINT="$(cygpath -w ./wheel-constraints/cuda-core.txt)"
312+ PIP_CONSTRAINT="$(cygpath -w ./wheel-constraints/cuda-core.txt)"
269313 # check cache stats before leaving cibuildwheel
270314 CIBW_BEFORE_TEST_LINUX : >
271315 "/host${{ env.SCCACHE_PATH }}" --show-adv-stats &&
@@ -444,21 +488,45 @@ jobs:
444488 OLD_BRANCH=$(yq '.backport_branch' ci/versions.yml)
445489 OLD_BASENAME="cuda-bindings-python${PYTHON_VERSION_FORMATTED}-cuda*-${{ inputs.host-platform }}*"
446490 LATEST_PRIOR_RUN_ID=$(./ci/tools/lookup-run-id --branch "${OLD_BRANCH}" NVIDIA/cuda-python "CI")
491+ PREV_BINDINGS_DIR="cuda_bindings/dist-prev"
447492
448493 gh run download $LATEST_PRIOR_RUN_ID -p ${OLD_BASENAME} -R NVIDIA/cuda-python
449494 rm -rf ${OLD_BASENAME}-tests # exclude cython test artifacts
450495 ls -al $OLD_BASENAME
451- mkdir -p "${{ env.CUDA_BINDINGS_ARTIFACTS_DIR } }"
452- mv $OLD_BASENAME/*.whl "${{ env.CUDA_BINDINGS_ARTIFACTS_DIR } }"
496+ mkdir -p "${PREV_BINDINGS_DIR }"
497+ mv $OLD_BASENAME/*.whl "${PREV_BINDINGS_DIR }"
453498 rmdir $OLD_BASENAME
454499
500+ - name : Constrain previous cuda.core to the downloaded cuda.bindings wheel
501+ run : |
502+ pathfinder_wheels=(cuda_pathfinder/cuda_pathfinder-*.whl)
503+ bindings_wheels=(cuda_bindings/dist-prev/cuda_bindings-"${BUILD_PREV_CUDA_MAJOR}".*.whl)
504+ test "${#pathfinder_wheels[@]}" -eq 1
505+ test "${#bindings_wheels[@]}" -eq 1
506+ test -f "${pathfinder_wheels[0]}"
507+ test -f "${bindings_wheels[0]}"
508+ mkdir -p wheel-constraints
509+ if [[ "${{ inputs.host-platform }}" == win* ]]; then
510+ pathfinder_uri="file:///$(cygpath -am "${pathfinder_wheels[0]}")"
511+ bindings_uri="file:///$(cygpath -am "${bindings_wheels[0]}")"
512+ else
513+ pathfinder_uri="file:///host$(realpath "${pathfinder_wheels[0]}")"
514+ bindings_uri="file:///host$(realpath "${bindings_wheels[0]}")"
515+ fi
516+ {
517+ printf 'cuda-pathfinder @ %s\n' "${pathfinder_uri}"
518+ printf 'cuda-bindings @ %s\n' "${bindings_uri}"
519+ } | tee wheel-constraints/cuda-core-prev.txt
520+
455521 - name : Build cuda.core wheel
456522 uses : pypa/cibuildwheel@4726cd35bb13f7bde50cf2761f2499ac7b3aa32c # v4.1.1
457523 with :
458524 package-dir : ./cuda_core/
459525 output-dir : ${{ env.CUDA_CORE_ARTIFACTS_DIR }}
460526 env :
461527 CIBW_BUILD : ${{ env.CIBW_BUILD }}
528+ CIBW_BEFORE_BUILD_LINUX : ' python -m pip install --upgrade "pip>=25.3"'
529+ CIBW_BEFORE_BUILD_WINDOWS : ' python -m pip install --upgrade "pip>=25.3" delvewheel'
462530 # TODO: remove cpython-prerelease once 3.15 is officially supported
463531 # Allow CPython pre-release builds (currently 3.15 / 3.15t). This is a
464532 # no-op for stable Python versions because CIBW_BUILD still filters
@@ -469,7 +537,8 @@ jobs:
469537 CUDA_PATH=/host/${{ env.CUDA_PATH }}
470538 CUDA_PYTHON_PARALLEL_LEVEL=${{ env.CUDA_PYTHON_PARALLEL_LEVEL }}
471539 CUDA_CORE_BUILD_MAJOR=${{ env.BUILD_PREV_CUDA_MAJOR }}
472- PIP_FIND_LINKS=/host/${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}
540+ PIP_BUILD_CONSTRAINT=/host/${{ github.workspace }}/wheel-constraints/cuda-core-prev.txt
541+ PIP_CONSTRAINT=/host/${{ github.workspace }}/wheel-constraints/cuda-core-prev.txt
473542 CC="/host/${{ env.SCCACHE_PATH }} cc"
474543 CXX="/host/${{ env.SCCACHE_PATH }} c++"
475544 SCCACHE_GHA_ENABLED=true
@@ -484,7 +553,8 @@ jobs:
484553 CUDA_PATH="$(cygpath -w ${{ env.CUDA_PATH }})"
485554 CUDA_PYTHON_PARALLEL_LEVEL=${{ env.CUDA_PYTHON_PARALLEL_LEVEL }}
486555 CUDA_CORE_BUILD_MAJOR=${{ env.BUILD_PREV_CUDA_MAJOR }}
487- PIP_FIND_LINKS="$(cygpath -w ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }})"
556+ PIP_BUILD_CONSTRAINT="$(cygpath -w ./wheel-constraints/cuda-core-prev.txt)"
557+ PIP_CONSTRAINT="$(cygpath -w ./wheel-constraints/cuda-core-prev.txt)"
488558 # check cache stats before leaving cibuildwheel
489559 CIBW_BEFORE_TEST_LINUX : >
490560 "/host${{ env.SCCACHE_PATH }}" --show-adv-stats &&
0 commit comments