From 4186a1678703fa8508d67f62e9b1797089b9791d Mon Sep 17 00:00:00 2001 From: James Lamb Date: Mon, 22 Sep 2025 15:49:46 -0500 Subject: [PATCH 1/4] build pure-Python wheels without waiting for dependencies --- .github/workflows/build.yaml | 7 ++++--- .github/workflows/pr.yaml | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 933d8aa98..c6769ce89 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -148,7 +148,6 @@ jobs: package-name: cuopt package-type: python wheel-build-cuopt-server: - needs: wheel-build-cuopt secrets: inherit uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@branch-25.10 with: @@ -186,7 +185,6 @@ jobs: container_image: "rapidsai/ci-conda:25.10-latest" script: "ci/build_docs.sh" wheel-build-cuopt-sh-client: - needs: wheel-build-cuopt secrets: inherit uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@branch-25.10 with: @@ -212,7 +210,10 @@ jobs: package-name: cuopt_sh_client package-type: python build-images: - needs: [wheel-publish-cuopt, wheel-publish-cuopt-server] + needs: + - wheel-publish-cuopt + - wheel-publish-cuopt-server + - wheel-publish-sh-client uses: ./.github/workflows/build_test_publish_images.yaml secrets: inherit with: diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 51203186f..b0eaed17e 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -198,7 +198,7 @@ jobs: build_type: pull-request script: ci/test_wheel_cuopt.sh wheel-build-cuopt-server: - needs: wheel-build-cuopt + needs: checks secrets: inherit uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@branch-25.10 with: From 6ea4af27f2ce4414637d3cca182b23ab9171059e Mon Sep 17 00:00:00 2001 From: James Lamb Date: Mon, 22 Sep 2025 16:01:17 -0500 Subject: [PATCH 2/4] fix needs --- .github/workflows/build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index c6769ce89..6656a0a9e 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -213,7 +213,7 @@ jobs: needs: - wheel-publish-cuopt - wheel-publish-cuopt-server - - wheel-publish-sh-client + - wheel-publish-cuopt-sh-client uses: ./.github/workflows/build_test_publish_images.yaml secrets: inherit with: From 982651068248d3ed9477a6d9f2c6a351c9a91682 Mon Sep 17 00:00:00 2001 From: James Lamb Date: Mon, 22 Sep 2025 16:16:53 -0500 Subject: [PATCH 3/4] avoid unnecessary cuopt-server builds --- .github/workflows/build.yaml | 4 ++++ .github/workflows/pr.yaml | 3 +++ ci/test_self_hosted_service.sh | 2 +- ci/test_wheel_cuopt_server.sh | 2 +- 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 6656a0a9e..3a78c4c15 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -158,6 +158,9 @@ jobs: script: ci/build_wheel_cuopt_server.sh package-name: cuopt_server package-type: python + pure-wheel: true + # Only need 1 package per CUDA major version. This selects "ARCH=amd64 + the latest supported Python, 1 job per major CUDA version". + matrix_filter: map(select(.ARCH == "amd64")) | group_by(.CUDA_VER|split(".")|map(tonumber)|.[0]) | map(max_by([(.PY_VER|split(".")|map(tonumber)), (.CUDA_VER|split(".")|map(tonumber))])) wheel-publish-cuopt-server: needs: wheel-build-cuopt-server secrets: inherit @@ -196,6 +199,7 @@ jobs: package-name: cuopt_sh_client package-type: python append-cuda-suffix: false + pure-wheel: true # only need 1 build (noarch package): this selects amd64, oldest-supported Python, latest-supported CUDA matrix_filter: '[map(select(.ARCH == "amd64")) | min_by((.PY_VER | split(".") | map(tonumber)), (.CUDA_VER | split(".") | map(-tonumber)))]' wheel-publish-cuopt-sh-client: diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index b0eaed17e..c56abe8f7 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -206,6 +206,9 @@ jobs: script: ci/build_wheel_cuopt_server.sh package-name: cuopt_server package-type: python + pure-wheel: true + # Only need 1 package per CUDA major version. This selects "ARCH=amd64 + the latest supported Python, 1 job per major CUDA version". + matrix_filter: map(select(.ARCH == "amd64")) | group_by(.CUDA_VER|split(".")|map(tonumber)|.[0]) | map(max_by([(.PY_VER|split(".")|map(tonumber)), (.CUDA_VER|split(".")|map(tonumber))])) wheel-build-cuopt-sh-client: secrets: inherit uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@branch-25.10 diff --git a/ci/test_self_hosted_service.sh b/ci/test_self_hosted_service.sh index a5285ec1c..9b1e22e6c 100755 --- a/ci/test_self_hosted_service.sh +++ b/ci/test_self_hosted_service.sh @@ -22,7 +22,7 @@ source rapids-init-pip # Download the cuopt built in the previous step RAPIDS_PY_CUDA_SUFFIX="$(rapids-wheel-ctk-name-gen "${RAPIDS_CUDA_VERSION}")" CUOPT_MPS_PARSER_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="cuopt_mps_parser" rapids-download-wheels-from-github python) -CUOPT_SERVER_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="cuopt_server_${RAPIDS_PY_CUDA_SUFFIX}" rapids-download-wheels-from-github python) +CUOPT_SERVER_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="cuopt_server_${RAPIDS_PY_CUDA_SUFFIX}" RAPIDS_PY_WHEEL_PURE="1" rapids-download-wheels-from-github python) CUOPT_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="cuopt_${RAPIDS_PY_CUDA_SUFFIX}" rapids-download-wheels-from-github python) LIBCUOPT_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="libcuopt_${RAPIDS_PY_CUDA_SUFFIX}" rapids-download-wheels-from-github cpp) diff --git a/ci/test_wheel_cuopt_server.sh b/ci/test_wheel_cuopt_server.sh index 7f999dba8..5f0b874ba 100755 --- a/ci/test_wheel_cuopt_server.sh +++ b/ci/test_wheel_cuopt_server.sh @@ -22,7 +22,7 @@ source rapids-init-pip # Download the packages built in the previous step RAPIDS_PY_CUDA_SUFFIX="$(rapids-wheel-ctk-name-gen "${RAPIDS_CUDA_VERSION}")" CUOPT_MPS_PARSER_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="cuopt_mps_parser" rapids-download-wheels-from-github python) -CUOPT_SERVER_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="cuopt_server_${RAPIDS_PY_CUDA_SUFFIX}" rapids-download-wheels-from-github python) +CUOPT_SERVER_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="cuopt_server_${RAPIDS_PY_CUDA_SUFFIX}" RAPIDS_PY_WHEEL_PURE="1" rapids-download-wheels-from-github python) CUOPT_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="cuopt_${RAPIDS_PY_CUDA_SUFFIX}" rapids-download-wheels-from-github python) LIBCUOPT_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="libcuopt_${RAPIDS_PY_CUDA_SUFFIX}" rapids-download-wheels-from-github cpp) From 28370213bc43667bd60d9682c6ca1993aa0cec4e Mon Sep 17 00:00:00 2001 From: James Lamb Date: Mon, 22 Sep 2025 16:47:47 -0500 Subject: [PATCH 4/4] fix testing dependencies --- .github/workflows/pr.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index c56abe8f7..9517f9236 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -222,7 +222,7 @@ jobs: # only need 1 build (noarch package): this selects amd64, oldest-supported Python, latest-supported CUDA matrix_filter: '[map(select(.ARCH == "amd64")) | min_by((.PY_VER | split(".") | map(tonumber)), (.CUDA_VER | split(".") | map(-tonumber)))]' wheel-tests-cuopt-server: - needs: [wheel-build-cuopt-server, changed-files] + needs: [wheel-build-cuopt, wheel-build-cuopt-server, changed-files] secrets: inherit uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@branch-25.10 #if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_cuopt_server @@ -230,7 +230,7 @@ jobs: build_type: pull-request script: ci/test_wheel_cuopt_server.sh test-self-hosted-server: - needs: [wheel-build-cuopt-server, changed-files] + needs: [wheel-build-cuopt, wheel-build-cuopt-server, changed-files] secrets: inherit uses: ./.github/workflows/self_hosted_service_test.yaml #if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python