@@ -150,6 +150,18 @@ jobs:
150150 run : |
151151 twine check --strict cuda_pathfinder/*.whl
152152
153+ - name : Resolve cuda.bindings build dependencies
154+ run : |
155+ container_args=()
156+ if [[ "${{ inputs.host-platform }}" == linux* ]]; then
157+ container_args+=(--container-mount /host)
158+ fi
159+ mkdir -p wheel-constraints
160+ python ci/tools/write_wheel_constraints.py \
161+ --output wheel-constraints/cuda-bindings.txt \
162+ "${container_args[@]}" \
163+ --wheel cuda-pathfinder cuda_pathfinder
164+
153165 - name : Upload cuda.pathfinder build artifacts
154166 if : ${{ strategy.job-index == 0 && inputs.host-platform == 'linux-64' }}
155167 uses : actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
@@ -172,6 +184,8 @@ jobs:
172184 output-dir : ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}
173185 env :
174186 CIBW_BUILD : ${{ env.CIBW_BUILD }}
187+ CIBW_BEFORE_BUILD_LINUX : ' python -m pip install --upgrade "pip>=25.3"'
188+ CIBW_BEFORE_BUILD_WINDOWS : ' python -m pip install --upgrade "pip>=25.3" delvewheel'
175189 # TODO: remove cpython-prerelease once 3.15 is officially supported
176190 # Allow CPython pre-release builds (currently 3.15 / 3.15t). This is a
177191 # no-op for stable Python versions because CIBW_BUILD still filters
@@ -181,6 +195,8 @@ jobs:
181195 CIBW_ENVIRONMENT_LINUX : >
182196 CUDA_PATH=/host/${{ env.CUDA_PATH }}
183197 CUDA_PYTHON_PARALLEL_LEVEL=${{ env.CUDA_PYTHON_PARALLEL_LEVEL }}
198+ PIP_BUILD_CONSTRAINT=/host/${{ github.workspace }}/wheel-constraints/cuda-bindings.txt
199+ PIP_CONSTRAINT=/host/${{ github.workspace }}/wheel-constraints/cuda-bindings.txt
184200 CC="/host/${{ env.SCCACHE_PATH }} cc"
185201 CXX="/host/${{ env.SCCACHE_PATH }} c++"
186202 SCCACHE_GHA_ENABLED=true
@@ -194,6 +210,8 @@ jobs:
194210 CIBW_ENVIRONMENT_WINDOWS : >
195211 CUDA_PATH="$(cygpath -w ${{ env.CUDA_PATH }})"
196212 CUDA_PYTHON_PARALLEL_LEVEL=${{ env.CUDA_PYTHON_PARALLEL_LEVEL }}
213+ PIP_BUILD_CONSTRAINT="$(cygpath -w ./wheel-constraints/cuda-bindings.txt)"
214+ PIP_CONSTRAINT="$(cygpath -w ./wheel-constraints/cuda-bindings.txt)"
197215 # check cache stats before leaving cibuildwheel
198216 CIBW_BEFORE_TEST_LINUX : >
199217 "/host/${{ env.SCCACHE_PATH }}" --show-adv-stats &&
@@ -226,6 +244,20 @@ jobs:
226244 run : |
227245 twine check --strict ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}/*.whl
228246
247+ - name : Resolve cuda.core build dependencies
248+ run : |
249+ container_args=()
250+ if [[ "${{ inputs.host-platform }}" == linux* ]]; then
251+ container_args+=(--container-mount /host)
252+ fi
253+ mkdir -p wheel-constraints
254+ python ci/tools/write_wheel_constraints.py \
255+ --output wheel-constraints/cuda-core.txt \
256+ "${container_args[@]}" \
257+ --wheel cuda-pathfinder cuda_pathfinder \
258+ --wheel cuda-bindings "${CUDA_BINDINGS_ARTIFACTS_DIR}" \
259+ --expected-major cuda-bindings "${BUILD_CUDA_MAJOR}"
260+
229261 - name : Upload cuda.bindings build artifacts
230262 uses : actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
231263 with :
@@ -240,6 +272,8 @@ jobs:
240272 output-dir : ${{ env.CUDA_CORE_ARTIFACTS_DIR }}
241273 env :
242274 CIBW_BUILD : ${{ env.CIBW_BUILD }}
275+ CIBW_BEFORE_BUILD_LINUX : ' python -m pip install --upgrade "pip>=25.3"'
276+ CIBW_BEFORE_BUILD_WINDOWS : ' python -m pip install --upgrade "pip>=25.3" delvewheel'
243277 # TODO: remove cpython-prerelease once 3.15 is officially supported
244278 # Allow CPython pre-release builds (currently 3.15 / 3.15t). This is a
245279 # no-op for stable Python versions because CIBW_BUILD still filters
@@ -250,7 +284,8 @@ jobs:
250284 CUDA_PATH=/host/${{ env.CUDA_PATH }}
251285 CUDA_PYTHON_PARALLEL_LEVEL=${{ env.CUDA_PYTHON_PARALLEL_LEVEL }}
252286 CUDA_CORE_BUILD_MAJOR=${{ env.BUILD_CUDA_MAJOR }}
253- PIP_FIND_LINKS=/host/${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}
287+ PIP_BUILD_CONSTRAINT=/host/${{ github.workspace }}/wheel-constraints/cuda-core.txt
288+ PIP_CONSTRAINT=/host/${{ github.workspace }}/wheel-constraints/cuda-core.txt
254289 CC="/host/${{ env.SCCACHE_PATH }} cc"
255290 CXX="/host/${{ env.SCCACHE_PATH }} c++"
256291 SCCACHE_GHA_ENABLED=true
@@ -265,7 +300,8 @@ jobs:
265300 CUDA_PATH="$(cygpath -w ${{ env.CUDA_PATH }})"
266301 CUDA_PYTHON_PARALLEL_LEVEL=${{ env.CUDA_PYTHON_PARALLEL_LEVEL }}
267302 CUDA_CORE_BUILD_MAJOR=${{ env.BUILD_CUDA_MAJOR }}
268- PIP_FIND_LINKS="$(cygpath -w ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }})"
303+ PIP_BUILD_CONSTRAINT="$(cygpath -w ./wheel-constraints/cuda-core.txt)"
304+ PIP_CONSTRAINT="$(cygpath -w ./wheel-constraints/cuda-core.txt)"
269305 # check cache stats before leaving cibuildwheel
270306 CIBW_BEFORE_TEST_LINUX : >
271307 "/host${{ env.SCCACHE_PATH }}" --show-adv-stats &&
@@ -444,21 +480,38 @@ jobs:
444480 OLD_BRANCH=$(yq '.backport_branch' ci/versions.yml)
445481 OLD_BASENAME="cuda-bindings-python${PYTHON_VERSION_FORMATTED}-cuda*-${{ inputs.host-platform }}*"
446482 LATEST_PRIOR_RUN_ID=$(./ci/tools/lookup-run-id --branch "${OLD_BRANCH}" NVIDIA/cuda-python "CI")
483+ PREV_BINDINGS_DIR="cuda_bindings/dist-prev"
447484
448485 gh run download $LATEST_PRIOR_RUN_ID -p ${OLD_BASENAME} -R NVIDIA/cuda-python
449486 rm -rf ${OLD_BASENAME}-tests # exclude cython test artifacts
450487 ls -al $OLD_BASENAME
451- mkdir -p "${{ env.CUDA_BINDINGS_ARTIFACTS_DIR } }"
452- mv $OLD_BASENAME/*.whl "${{ env.CUDA_BINDINGS_ARTIFACTS_DIR } }"
488+ mkdir -p "${PREV_BINDINGS_DIR }"
489+ mv $OLD_BASENAME/*.whl "${PREV_BINDINGS_DIR }"
453490 rmdir $OLD_BASENAME
454491
492+ - name : Resolve previous cuda.core build dependencies
493+ run : |
494+ container_args=()
495+ if [[ "${{ inputs.host-platform }}" == linux* ]]; then
496+ container_args+=(--container-mount /host)
497+ fi
498+ mkdir -p wheel-constraints
499+ python ci/tools/write_wheel_constraints.py \
500+ --output wheel-constraints/cuda-core-prev.txt \
501+ "${container_args[@]}" \
502+ --wheel cuda-pathfinder cuda_pathfinder \
503+ --wheel cuda-bindings cuda_bindings/dist-prev \
504+ --expected-major cuda-bindings "${BUILD_PREV_CUDA_MAJOR}"
505+
455506 - name : Build cuda.core wheel
456507 uses : pypa/cibuildwheel@4726cd35bb13f7bde50cf2761f2499ac7b3aa32c # v4.1.1
457508 with :
458509 package-dir : ./cuda_core/
459510 output-dir : ${{ env.CUDA_CORE_ARTIFACTS_DIR }}
460511 env :
461512 CIBW_BUILD : ${{ env.CIBW_BUILD }}
513+ CIBW_BEFORE_BUILD_LINUX : ' python -m pip install --upgrade "pip>=25.3"'
514+ CIBW_BEFORE_BUILD_WINDOWS : ' python -m pip install --upgrade "pip>=25.3" delvewheel'
462515 # TODO: remove cpython-prerelease once 3.15 is officially supported
463516 # Allow CPython pre-release builds (currently 3.15 / 3.15t). This is a
464517 # no-op for stable Python versions because CIBW_BUILD still filters
@@ -469,7 +522,8 @@ jobs:
469522 CUDA_PATH=/host/${{ env.CUDA_PATH }}
470523 CUDA_PYTHON_PARALLEL_LEVEL=${{ env.CUDA_PYTHON_PARALLEL_LEVEL }}
471524 CUDA_CORE_BUILD_MAJOR=${{ env.BUILD_PREV_CUDA_MAJOR }}
472- PIP_FIND_LINKS=/host/${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}
525+ PIP_BUILD_CONSTRAINT=/host/${{ github.workspace }}/wheel-constraints/cuda-core-prev.txt
526+ PIP_CONSTRAINT=/host/${{ github.workspace }}/wheel-constraints/cuda-core-prev.txt
473527 CC="/host/${{ env.SCCACHE_PATH }} cc"
474528 CXX="/host/${{ env.SCCACHE_PATH }} c++"
475529 SCCACHE_GHA_ENABLED=true
@@ -484,7 +538,8 @@ jobs:
484538 CUDA_PATH="$(cygpath -w ${{ env.CUDA_PATH }})"
485539 CUDA_PYTHON_PARALLEL_LEVEL=${{ env.CUDA_PYTHON_PARALLEL_LEVEL }}
486540 CUDA_CORE_BUILD_MAJOR=${{ env.BUILD_PREV_CUDA_MAJOR }}
487- PIP_FIND_LINKS="$(cygpath -w ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }})"
541+ PIP_BUILD_CONSTRAINT="$(cygpath -w ./wheel-constraints/cuda-core-prev.txt)"
542+ PIP_CONSTRAINT="$(cygpath -w ./wheel-constraints/cuda-core-prev.txt)"
488543 # check cache stats before leaving cibuildwheel
489544 CIBW_BEFORE_TEST_LINUX : >
490545 "/host${{ env.SCCACHE_PATH }}" --show-adv-stats &&
0 commit comments