From c02f20bc60516e7d328a09df9c4e4f6cdbc9f178 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Mon, 15 Sep 2025 13:53:07 -0500 Subject: [PATCH 01/22] add jump testing --- ci/test_wheel_cuopt.sh | 3 ++ ci/thirdparty-testing/run_jump_tests.sh | 60 +++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 ci/thirdparty-testing/run_jump_tests.sh diff --git a/ci/test_wheel_cuopt.sh b/ci/test_wheel_cuopt.sh index 77da9c1991..70f87d30f5 100755 --- a/ci/test_wheel_cuopt.sh +++ b/ci/test_wheel_cuopt.sh @@ -75,3 +75,6 @@ RAPIDS_DATASET_ROOT_DIR=./datasets timeout 30m python -m pytest --verbose --capt # run cvxpy integration tests ./ci/thirdparty-testing/run_cvxpy_tests.sh + +# run jump tests +./ci/thirdparty-testing/run_jump_tests.sh \ No newline at end of file diff --git a/ci/thirdparty-testing/run_jump_tests.sh b/ci/thirdparty-testing/run_jump_tests.sh new file mode 100644 index 0000000000..7eaabd93a6 --- /dev/null +++ b/ci/thirdparty-testing/run_jump_tests.sh @@ -0,0 +1,60 @@ +# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -euo pipefail + +# Install Julia using the official installer + +if ! command -v julia &> /dev/null; then + rapids-logger "Installing Julia using official installer..." + # Pass 'yes' to the installer to accept any prompts automatically + curl -fsSL https://install.julialang.org | sh -s -- --yes + # Add Julia to PATH for current session + export PATH="$HOME/.juliaup/bin:$PATH" + # Also add to .bashrc for future sessions + rapids-logger 'export PATH="$HOME/.juliaup/bin:$PATH"' >> ~/.bashrc +else + rapids-logger "Julia is already installed." +fi + +# Confirm Julia install +julia --version + +CUOPT_JL_DIR=/tmp/cuOpt.jl +rm -rf $CUOPT_JL_DIR + +# clone the jump-dev/cuOpt.jl repo (main branch) +git clone https://github.com/jump-dev/cuOpt.jl $CUOPT_JL_DIR + +# set weird permissions, run tests as root (bad) +cd $CUOPT_JL_DIR || exit 1 + +# export LD_LIBRARY_PATH=/usr/local/lib/python3.13/dist-packages/libcuopt/lib64/:${LD_LIBRARY_PATH} + +# use Julia to instantiate and run tests for the package +julia --project=. -e ' +import Pkg; +Pkg.instantiate(); +# forcefully add maybe-missing deps (bad) +try + Pkg.add("Test") +catch +end +println("Running Pkg.test() for cuOpt.jl -- this will spew output and may fail loudly"); +Pkg.test(; coverage=true) +' + +# awkward "success" message even if anything failed +rapids-logger "All done! If anything broke, that was probably intended. ¯\_(ツ)_/¯" From 929d444eb3193af928f5e9e5c8db1d2eb0f6991c Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Mon, 15 Sep 2025 13:54:15 -0500 Subject: [PATCH 02/22] fix style --- ci/test_wheel_cuopt.sh | 2 +- ci/thirdparty-testing/run_jump_tests.sh | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ci/test_wheel_cuopt.sh b/ci/test_wheel_cuopt.sh index 70f87d30f5..3703aeb597 100755 --- a/ci/test_wheel_cuopt.sh +++ b/ci/test_wheel_cuopt.sh @@ -77,4 +77,4 @@ RAPIDS_DATASET_ROOT_DIR=./datasets timeout 30m python -m pytest --verbose --capt ./ci/thirdparty-testing/run_cvxpy_tests.sh # run jump tests -./ci/thirdparty-testing/run_jump_tests.sh \ No newline at end of file +./ci/thirdparty-testing/run_jump_tests.sh diff --git a/ci/thirdparty-testing/run_jump_tests.sh b/ci/thirdparty-testing/run_jump_tests.sh index 7eaabd93a6..af153f8b4c 100644 --- a/ci/thirdparty-testing/run_jump_tests.sh +++ b/ci/thirdparty-testing/run_jump_tests.sh @@ -1,3 +1,5 @@ +#!/bin/bash + # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 # @@ -20,7 +22,7 @@ set -euo pipefail if ! command -v julia &> /dev/null; then rapids-logger "Installing Julia using official installer..." # Pass 'yes' to the installer to accept any prompts automatically - curl -fsSL https://install.julialang.org | sh -s -- --yes + curl -fsSL https://install.julialang.org | sh -s -- --yes # Add Julia to PATH for current session export PATH="$HOME/.juliaup/bin:$PATH" # Also add to .bashrc for future sessions From d3f42843f4734148e823b7f4e39eb93b6d4f5782 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Mon, 15 Sep 2025 16:58:53 -0500 Subject: [PATCH 03/22] change mode --- ci/thirdparty-testing/run_jump_tests.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 ci/thirdparty-testing/run_jump_tests.sh diff --git a/ci/thirdparty-testing/run_jump_tests.sh b/ci/thirdparty-testing/run_jump_tests.sh old mode 100644 new mode 100755 From 9c56eb9a14f478e51b87a07f22b8d02bb414eaf8 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Tue, 16 Sep 2025 15:19:03 -0500 Subject: [PATCH 04/22] Empty commit From db26d48c62c2db8bc2fe6dd829e773ddcb4f2ad1 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Wed, 17 Sep 2025 16:52:21 -0500 Subject: [PATCH 05/22] fix path --- ci/thirdparty-testing/run_jump_tests.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/ci/thirdparty-testing/run_jump_tests.sh b/ci/thirdparty-testing/run_jump_tests.sh index af153f8b4c..37fb45229e 100755 --- a/ci/thirdparty-testing/run_jump_tests.sh +++ b/ci/thirdparty-testing/run_jump_tests.sh @@ -43,7 +43,15 @@ git clone https://github.com/jump-dev/cuOpt.jl $CUOPT_JL_DIR # set weird permissions, run tests as root (bad) cd $CUOPT_JL_DIR || exit 1 -# export LD_LIBRARY_PATH=/usr/local/lib/python3.13/dist-packages/libcuopt/lib64/:${LD_LIBRARY_PATH} +# Find libcuopt.so and add its directory to LD_LIBRARY_PATH +LIBCUOPT_PATH=$(find / -name "libcuopt.so" -type f 2>/dev/null | head -1) +if [ -n "$LIBCUOPT_PATH" ]; then + LIBCUOPT_DIR=$(dirname "$LIBCUOPT_PATH") + export LD_LIBRARY_PATH="${LIBCUOPT_DIR}:${LD_LIBRARY_PATH}" + rapids-logger "Found libcuopt.so at $LIBCUOPT_PATH, added directory to LD_LIBRARY_PATH: $LIBCUOPT_DIR" +else + rapids-logger "Warning: libcuopt.so not found in root filesystem" +fi # use Julia to instantiate and run tests for the package julia --project=. -e ' From 088f2194415f20f69c0dc4a46d62ce2c889c5a33 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Thu, 18 Sep 2025 13:49:29 -0500 Subject: [PATCH 06/22] update for testing --- .github/workflows/pr.yaml | 89 --------------------------------------- ci/test_wheel_cuopt.sh | 21 +++++---- 2 files changed, 12 insertions(+), 98 deletions(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 51203186fa..5b80e4a22f 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -29,19 +29,10 @@ jobs: needs: - changed-files - checks - - conda-cpp-build - - conda-cpp-tests - - conda-python-build - - conda-python-tests - - docs-build - wheel-build-libcuopt - wheel-build-cuopt - wheel-tests-cuopt - - wheel-build-cuopt-server - - wheel-tests-cuopt-server - wheel-build-cuopt-mps-parser - - wheel-build-cuopt-sh-client - - test-self-hosted-server secrets: inherit uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@branch-25.10 changed-files: @@ -115,49 +106,6 @@ jobs: with: enable_check_generated_files: false - conda-cpp-build: - needs: checks - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@branch-25.10 - with: - build_type: pull-request - script: ci/build_cpp.sh - conda-cpp-tests: - needs: [conda-cpp-build, changed-files] - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-tests.yaml@branch-25.10 - #if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp - with: - build_type: pull-request - script: ci/test_cpp.sh - conda-python-build: - needs: conda-cpp-build - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@branch-25.10 - with: - build_type: pull-request - script: ci/build_python.sh - conda-python-tests: - needs: [conda-python-build, changed-files] - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@branch-25.10 - #if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python - with: - run_codecov: false - build_type: pull-request - script: ci/test_python.sh - docs-build: - needs: conda-python-build - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@branch-25.10 - with: - build_type: pull-request - node_type: "gpu-l4-latest-1" - arch: "amd64" - file_to_upload: "docs/cuopt/build/html/" - artifact-name: "cuopt_docs" - container_image: "rapidsai/ci-conda:25.10-latest" - script: "ci/build_docs.sh" wheel-build-cuopt-mps-parser: secrets: inherit uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@branch-25.10 @@ -197,40 +145,3 @@ jobs: with: build_type: pull-request script: ci/test_wheel_cuopt.sh - wheel-build-cuopt-server: - needs: wheel-build-cuopt - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@branch-25.10 - with: - build_type: pull-request - script: ci/build_wheel_cuopt_server.sh - package-name: cuopt_server - package-type: python - wheel-build-cuopt-sh-client: - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@branch-25.10 - with: - build_type: pull-request - script: ci/build_wheel_cuopt_sh_client.sh - 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-tests-cuopt-server: - needs: [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 - with: - build_type: pull-request - script: ci/test_wheel_cuopt_server.sh - test-self-hosted-server: - needs: [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 - with: - build_type: pull-request - script: ci/test_self_hosted_service.sh diff --git a/ci/test_wheel_cuopt.sh b/ci/test_wheel_cuopt.sh index 3703aeb597..11829df1cb 100755 --- a/ci/test_wheel_cuopt.sh +++ b/ci/test_wheel_cuopt.sh @@ -21,6 +21,9 @@ set -euo pipefail # so those constraints will affect all future 'pip install' calls source rapids-init-pip +git clone --verbose https://github.com/jump-dev/cuOpt.jl /tmp/cuOpt.jl +cd /tmp/cuOpt.jl + # 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) @@ -56,25 +59,25 @@ elif command -v dnf &> /dev/null; then dnf -y install file unzip fi -./datasets/linear_programming/download_pdlp_test_dataset.sh -./datasets/mip/download_miplib_test_dataset.sh -cd ./datasets -./get_test_data.sh --solomon -./get_test_data.sh --tsp -cd - +#./datasets/linear_programming/download_pdlp_test_dataset.sh +#./datasets/mip/download_miplib_test_dataset.sh +#cd ./datasets +#./get_test_data.sh --solomon +#./get_test_data.sh --tsp +#cd - RAPIDS_DATASET_ROOT_DIR="$(realpath datasets)" export RAPIDS_DATASET_ROOT_DIR # Please enable this once ISSUE https://github.com/NVIDIA/cuopt/issues/94 is fixed # Run CLI tests -timeout 10m bash ./python/libcuopt/libcuopt/tests/test_cli.sh +#timeout 10m bash ./python/libcuopt/libcuopt/tests/test_cli.sh # Run Python tests -RAPIDS_DATASET_ROOT_DIR=./datasets timeout 30m python -m pytest --verbose --capture=no ./python/cuopt/cuopt/tests/ +#RAPIDS_DATASET_ROOT_DIR=./datasets timeout 30m python -m pytest --verbose --capture=no ./python/cuopt/cuopt/tests/ # run cvxpy integration tests -./ci/thirdparty-testing/run_cvxpy_tests.sh +#./ci/thirdparty-testing/run_cvxpy_tests.sh # run jump tests ./ci/thirdparty-testing/run_jump_tests.sh From 9e5f15fa0b057b62ee642c05ee5af2d4e63f0ec1 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Thu, 18 Sep 2025 13:52:10 -0500 Subject: [PATCH 07/22] update for testing --- .github/workflows/pr.yaml | 2 +- ci/test_wheel_cuopt.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 5b80e4a22f..dbf9e181d8 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -138,7 +138,7 @@ jobs: package-name: cuopt package-type: python wheel-tests-cuopt: - needs: [wheel-build-cuopt, wheel-build-cuopt-mps-parser, wheel-build-cuopt-sh-client, changed-files] + needs: [wheel-build-cuopt, wheel-build-cuopt-mps-parser, 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 diff --git a/ci/test_wheel_cuopt.sh b/ci/test_wheel_cuopt.sh index 11829df1cb..0e3526d9e4 100755 --- a/ci/test_wheel_cuopt.sh +++ b/ci/test_wheel_cuopt.sh @@ -36,7 +36,7 @@ LIBCUOPT_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="libcuopt_${RAPIDS_PY_CUDA_SUFFIX}" r cat > "${PIP_CONSTRAINT}" < Date: Thu, 18 Sep 2025 16:10:01 -0500 Subject: [PATCH 08/22] fix issue --- ci/test_wheel_cuopt.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/ci/test_wheel_cuopt.sh b/ci/test_wheel_cuopt.sh index 0e3526d9e4..eb70492045 100755 --- a/ci/test_wheel_cuopt.sh +++ b/ci/test_wheel_cuopt.sh @@ -36,7 +36,6 @@ LIBCUOPT_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="libcuopt_${RAPIDS_PY_CUDA_SUFFIX}" r cat > "${PIP_CONSTRAINT}" < Date: Thu, 18 Sep 2025 16:36:52 -0500 Subject: [PATCH 09/22] fix test --- ci/test_wheel_cuopt.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/ci/test_wheel_cuopt.sh b/ci/test_wheel_cuopt.sh index eb70492045..e87837e7c7 100755 --- a/ci/test_wheel_cuopt.sh +++ b/ci/test_wheel_cuopt.sh @@ -27,7 +27,6 @@ cd /tmp/cuOpt.jl # 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_SH_CLIENT_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="cuopt_sh_client" 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) @@ -45,7 +44,6 @@ rapids-pip-retry install \ --constraint "${PIP_CONSTRAINT}" \ "${CUOPT_MPS_PARSER_WHEELHOUSE}"/cuopt_mps_parser*.whl \ "$(echo "${CUOPT_WHEELHOUSE}"/cuopt*.whl)[test]" \ - "${CUOPT_SH_CLIENT_WHEELHOUSE}"/cuopt_sh_client*.whl \ "${LIBCUOPT_WHEELHOUSE}"/libcuopt*.whl python -c "import cuopt" From d33b217dac6e659814c109f2ef46e85cde1910d6 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Thu, 18 Sep 2025 20:59:04 -0500 Subject: [PATCH 10/22] testing --- ci/test_wheel_cuopt.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/test_wheel_cuopt.sh b/ci/test_wheel_cuopt.sh index e87837e7c7..6209d5974a 100755 --- a/ci/test_wheel_cuopt.sh +++ b/ci/test_wheel_cuopt.sh @@ -22,7 +22,7 @@ set -euo pipefail source rapids-init-pip git clone --verbose https://github.com/jump-dev/cuOpt.jl /tmp/cuOpt.jl -cd /tmp/cuOpt.jl +#cd /tmp/cuOpt.jl # Download the packages built in the previous step RAPIDS_PY_CUDA_SUFFIX="$(rapids-wheel-ctk-name-gen "${RAPIDS_CUDA_VERSION}")" From 51391e326697eca43277be691c4e8a2619b4af16 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Fri, 19 Sep 2025 11:39:17 -0500 Subject: [PATCH 11/22] testing --- ci/test_wheel_cuopt.sh | 2 +- ci/thirdparty-testing/run_jump_tests.sh | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/ci/test_wheel_cuopt.sh b/ci/test_wheel_cuopt.sh index 6209d5974a..3cacf1ab51 100755 --- a/ci/test_wheel_cuopt.sh +++ b/ci/test_wheel_cuopt.sh @@ -21,7 +21,7 @@ set -euo pipefail # so those constraints will affect all future 'pip install' calls source rapids-init-pip -git clone --verbose https://github.com/jump-dev/cuOpt.jl /tmp/cuOpt.jl +#git clone --verbose git@github.com:jump-dev/cuOpt.jl.git /tmp/cuOpt.jl #cd /tmp/cuOpt.jl # Download the packages built in the previous step diff --git a/ci/thirdparty-testing/run_jump_tests.sh b/ci/thirdparty-testing/run_jump_tests.sh index 37fb45229e..184b0b11d0 100755 --- a/ci/thirdparty-testing/run_jump_tests.sh +++ b/ci/thirdparty-testing/run_jump_tests.sh @@ -34,11 +34,9 @@ fi # Confirm Julia install julia --version -CUOPT_JL_DIR=/tmp/cuOpt.jl -rm -rf $CUOPT_JL_DIR - -# clone the jump-dev/cuOpt.jl repo (main branch) -git clone https://github.com/jump-dev/cuOpt.jl $CUOPT_JL_DIR +CUOPT_JL_DIR="$(mktemp -d)/cuOpt.jl" +rapids-logger "Cloning cuOpt.jl into ${CUOPT_JL_DIR}" +git clone --verbose https://github.com/jump-dev/cuOpt.jl.git "${CUOPT_JL_DIR}" # set weird permissions, run tests as root (bad) cd $CUOPT_JL_DIR || exit 1 From f56a38fa2f37663aaf42154cd375ca80b8d9a175 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Fri, 19 Sep 2025 13:23:50 -0500 Subject: [PATCH 12/22] test with logs --- .github/workflows/pr.yaml | 8 ++++++++ ci/thirdparty-testing/run_jump_tests.sh | 5 +++++ 2 files changed, 13 insertions(+) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index dbf9e181d8..822c23df4d 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -29,6 +29,7 @@ jobs: needs: - changed-files - checks + - wheel-tests-jump - wheel-build-libcuopt - wheel-build-cuopt - wheel-tests-cuopt @@ -106,6 +107,13 @@ jobs: with: enable_check_generated_files: false + wheel-tests-jump: + secrets: inherit + uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@branch-25.10 + with: + build_type: pull-request + script: ci/test_wheel_jump.sh + wheel-build-cuopt-mps-parser: secrets: inherit uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@branch-25.10 diff --git a/ci/thirdparty-testing/run_jump_tests.sh b/ci/thirdparty-testing/run_jump_tests.sh index 184b0b11d0..c7cde981e7 100755 --- a/ci/thirdparty-testing/run_jump_tests.sh +++ b/ci/thirdparty-testing/run_jump_tests.sh @@ -37,10 +37,13 @@ julia --version CUOPT_JL_DIR="$(mktemp -d)/cuOpt.jl" rapids-logger "Cloning cuOpt.jl into ${CUOPT_JL_DIR}" git clone --verbose https://github.com/jump-dev/cuOpt.jl.git "${CUOPT_JL_DIR}" +rapids-logger "CuOpt.jl cloned into ${CUOPT_JL_DIR}" # set weird permissions, run tests as root (bad) cd $CUOPT_JL_DIR || exit 1 +rapids-logger "Changed directory to ${CUOPT_JL_DIR}" + # Find libcuopt.so and add its directory to LD_LIBRARY_PATH LIBCUOPT_PATH=$(find / -name "libcuopt.so" -type f 2>/dev/null | head -1) if [ -n "$LIBCUOPT_PATH" ]; then @@ -51,6 +54,8 @@ else rapids-logger "Warning: libcuopt.so not found in root filesystem" fi +rapids-logger "Running Julia tests for cuOpt.jl" + # use Julia to instantiate and run tests for the package julia --project=. -e ' import Pkg; From ae6e9af96be0148fdf5b7874d7ce09245f26efec Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Fri, 19 Sep 2025 14:22:09 -0500 Subject: [PATCH 13/22] update --- ci/test_jump.sh | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 ci/test_jump.sh diff --git a/ci/test_jump.sh b/ci/test_jump.sh new file mode 100644 index 0000000000..b93f406f64 --- /dev/null +++ b/ci/test_jump.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +set -euo pipefail +straints file for 'pip' and puts its location in an exported variable PIP_EXPORT, +# so those cons +# sets up a contraints will affect all future 'pip install' calls +source rapids-init-pip + +./ci/thirdparty-testing/run_jump_tests.sh From a60e370d9fa7f8a0e8bbd28bc38133f1bedcf0b8 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Fri, 19 Sep 2025 14:42:15 -0500 Subject: [PATCH 14/22] Fix directory path --- ci/thirdparty-testing/run_jump_tests.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ci/thirdparty-testing/run_jump_tests.sh b/ci/thirdparty-testing/run_jump_tests.sh index c7cde981e7..81e3adbd2d 100755 --- a/ci/thirdparty-testing/run_jump_tests.sh +++ b/ci/thirdparty-testing/run_jump_tests.sh @@ -45,9 +45,14 @@ cd $CUOPT_JL_DIR || exit 1 rapids-logger "Changed directory to ${CUOPT_JL_DIR}" # Find libcuopt.so and add its directory to LD_LIBRARY_PATH -LIBCUOPT_PATH=$(find / -name "libcuopt.so" -type f 2>/dev/null | head -1) +LIBCUOPT_PATH=$(find /pyenv/ -name "libcuopt.so" -type f 2>/dev/null | head -1) + +rapids-logger "LIBCUOPT_PATH: $LIBCUOPT_PATH" + if [ -n "$LIBCUOPT_PATH" ]; then + rapids-logger "LIBCUOPT_PATH: $LIBCUOPT_PATH" LIBCUOPT_DIR=$(dirname "$LIBCUOPT_PATH") + rapids-logger "LIBCUOPT_DIR: $LIBCUOPT_DIR" export LD_LIBRARY_PATH="${LIBCUOPT_DIR}:${LD_LIBRARY_PATH}" rapids-logger "Found libcuopt.so at $LIBCUOPT_PATH, added directory to LD_LIBRARY_PATH: $LIBCUOPT_DIR" else From fc04ab0cff67bc68a2cc0b99ec41d9d60acb9da0 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Fri, 19 Sep 2025 14:47:30 -0500 Subject: [PATCH 15/22] fix --- ci/{test_jump.sh => test_wheel_jump.sh} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename ci/{test_jump.sh => test_wheel_jump.sh} (100%) diff --git a/ci/test_jump.sh b/ci/test_wheel_jump.sh similarity index 100% rename from ci/test_jump.sh rename to ci/test_wheel_jump.sh From 22bdf32cf702cf7c3d5654faac5d90af6bc6ac13 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Fri, 19 Sep 2025 14:53:10 -0500 Subject: [PATCH 16/22] fix --- ci/test_wheel_jump.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 ci/test_wheel_jump.sh diff --git a/ci/test_wheel_jump.sh b/ci/test_wheel_jump.sh old mode 100644 new mode 100755 From bb35e902ff5ac6dbe0692cb218602894d3d33e36 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Fri, 19 Sep 2025 15:01:08 -0500 Subject: [PATCH 17/22] test --- ci/test_wheel_jump.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/test_wheel_jump.sh b/ci/test_wheel_jump.sh index b93f406f64..3879987950 100755 --- a/ci/test_wheel_jump.sh +++ b/ci/test_wheel_jump.sh @@ -1,7 +1,7 @@ #!/bin/bash set -euo pipefail -straints file for 'pip' and puts its location in an exported variable PIP_EXPORT, +#straints file for 'pip' and puts its location in an exported variable PIP_EXPORT, # so those cons # sets up a contraints will affect all future 'pip install' calls source rapids-init-pip From fc08fb6c43fb9782abdd4c17fb6d9d75c750efbe Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Wed, 24 Sep 2025 17:35:02 -0500 Subject: [PATCH 18/22] Fix Jump --- .github/workflows/pr.yaml | 98 +++++++++++++++++++++++-- ci/test_wheel_cuopt.sh | 26 +++---- ci/thirdparty-testing/run_jump_tests.sh | 13 +--- 3 files changed, 106 insertions(+), 31 deletions(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index a09746f1f5..9517f92365 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -29,11 +29,19 @@ jobs: needs: - changed-files - checks - - wheel-tests-jump + - conda-cpp-build + - conda-cpp-tests + - conda-python-build + - conda-python-tests + - docs-build - wheel-build-libcuopt - wheel-build-cuopt - wheel-tests-cuopt + - wheel-build-cuopt-server + - wheel-tests-cuopt-server - wheel-build-cuopt-mps-parser + - wheel-build-cuopt-sh-client + - test-self-hosted-server secrets: inherit uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@branch-25.10 changed-files: @@ -107,13 +115,49 @@ jobs: with: enable_check_generated_files: false - wheel-tests-jump: + conda-cpp-build: + needs: checks secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@branch-25.10 with: build_type: pull-request - script: ci/test_wheel_jump.sh - + script: ci/build_cpp.sh + conda-cpp-tests: + needs: [conda-cpp-build, changed-files] + secrets: inherit + uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-tests.yaml@branch-25.10 + #if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp + with: + build_type: pull-request + script: ci/test_cpp.sh + conda-python-build: + needs: conda-cpp-build + secrets: inherit + uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@branch-25.10 + with: + build_type: pull-request + script: ci/build_python.sh + conda-python-tests: + needs: [conda-python-build, changed-files] + secrets: inherit + uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@branch-25.10 + #if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python + with: + run_codecov: false + build_type: pull-request + script: ci/test_python.sh + docs-build: + needs: conda-python-build + secrets: inherit + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@branch-25.10 + with: + build_type: pull-request + node_type: "gpu-l4-latest-1" + arch: "amd64" + file_to_upload: "docs/cuopt/build/html/" + artifact-name: "cuopt_docs" + container_image: "rapidsai/ci-conda:25.10-latest" + script: "ci/build_docs.sh" wheel-build-cuopt-mps-parser: secrets: inherit uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@branch-25.10 @@ -146,10 +190,50 @@ jobs: package-name: cuopt package-type: python wheel-tests-cuopt: - needs: [wheel-build-cuopt, wheel-build-cuopt-mps-parser, changed-files] + needs: [wheel-build-cuopt, wheel-build-cuopt-mps-parser, wheel-build-cuopt-sh-client, 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 with: build_type: pull-request - script: ci/test_wheel_cuopt.sh \ No newline at end of file + script: ci/test_wheel_cuopt.sh + wheel-build-cuopt-server: + needs: checks + secrets: inherit + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@branch-25.10 + with: + build_type: pull-request + 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 + with: + build_type: pull-request + script: ci/build_wheel_cuopt_sh_client.sh + 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-tests-cuopt-server: + 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 + with: + build_type: pull-request + script: ci/test_wheel_cuopt_server.sh + test-self-hosted-server: + 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 + with: + build_type: pull-request + script: ci/test_self_hosted_service.sh diff --git a/ci/test_wheel_cuopt.sh b/ci/test_wheel_cuopt.sh index 3cacf1ab51..70f87d30f5 100755 --- a/ci/test_wheel_cuopt.sh +++ b/ci/test_wheel_cuopt.sh @@ -21,12 +21,10 @@ set -euo pipefail # so those constraints will affect all future 'pip install' calls source rapids-init-pip -#git clone --verbose git@github.com:jump-dev/cuOpt.jl.git /tmp/cuOpt.jl -#cd /tmp/cuOpt.jl - # 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_SH_CLIENT_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="cuopt_sh_client" 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) @@ -35,6 +33,7 @@ LIBCUOPT_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="libcuopt_${RAPIDS_PY_CUDA_SUFFIX}" r cat > "${PIP_CONSTRAINT}" < /dev/null; then dnf -y install file unzip fi -#./datasets/linear_programming/download_pdlp_test_dataset.sh -#./datasets/mip/download_miplib_test_dataset.sh -#cd ./datasets -#./get_test_data.sh --solomon -#./get_test_data.sh --tsp -#cd - +./datasets/linear_programming/download_pdlp_test_dataset.sh +./datasets/mip/download_miplib_test_dataset.sh +cd ./datasets +./get_test_data.sh --solomon +./get_test_data.sh --tsp +cd - RAPIDS_DATASET_ROOT_DIR="$(realpath datasets)" export RAPIDS_DATASET_ROOT_DIR # Please enable this once ISSUE https://github.com/NVIDIA/cuopt/issues/94 is fixed # Run CLI tests -#timeout 10m bash ./python/libcuopt/libcuopt/tests/test_cli.sh +timeout 10m bash ./python/libcuopt/libcuopt/tests/test_cli.sh # Run Python tests -#RAPIDS_DATASET_ROOT_DIR=./datasets timeout 30m python -m pytest --verbose --capture=no ./python/cuopt/cuopt/tests/ +RAPIDS_DATASET_ROOT_DIR=./datasets timeout 30m python -m pytest --verbose --capture=no ./python/cuopt/cuopt/tests/ # run cvxpy integration tests -#./ci/thirdparty-testing/run_cvxpy_tests.sh +./ci/thirdparty-testing/run_cvxpy_tests.sh # run jump tests -./ci/thirdparty-testing/run_jump_tests.sh +./ci/thirdparty-testing/run_jump_tests.sh \ No newline at end of file diff --git a/ci/thirdparty-testing/run_jump_tests.sh b/ci/thirdparty-testing/run_jump_tests.sh index 81e3adbd2d..964f27a6bc 100755 --- a/ci/thirdparty-testing/run_jump_tests.sh +++ b/ci/thirdparty-testing/run_jump_tests.sh @@ -36,19 +36,13 @@ julia --version CUOPT_JL_DIR="$(mktemp -d)/cuOpt.jl" rapids-logger "Cloning cuOpt.jl into ${CUOPT_JL_DIR}" -git clone --verbose https://github.com/jump-dev/cuOpt.jl.git "${CUOPT_JL_DIR}" -rapids-logger "CuOpt.jl cloned into ${CUOPT_JL_DIR}" +git clone --branch fix_get_for_parameters https://github.com/jump-dev/cuOpt.jl.git "${CUOPT_JL_DIR}" -# set weird permissions, run tests as root (bad) cd $CUOPT_JL_DIR || exit 1 -rapids-logger "Changed directory to ${CUOPT_JL_DIR}" - # Find libcuopt.so and add its directory to LD_LIBRARY_PATH LIBCUOPT_PATH=$(find /pyenv/ -name "libcuopt.so" -type f 2>/dev/null | head -1) -rapids-logger "LIBCUOPT_PATH: $LIBCUOPT_PATH" - if [ -n "$LIBCUOPT_PATH" ]; then rapids-logger "LIBCUOPT_PATH: $LIBCUOPT_PATH" LIBCUOPT_DIR=$(dirname "$LIBCUOPT_PATH") @@ -72,7 +66,4 @@ catch end println("Running Pkg.test() for cuOpt.jl -- this will spew output and may fail loudly"); Pkg.test(; coverage=true) -' - -# awkward "success" message even if anything failed -rapids-logger "All done! If anything broke, that was probably intended. ¯\_(ツ)_/¯" +' \ No newline at end of file From bb3cfdc9749a3ab12be90403920444b2252b5cd9 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Wed, 24 Sep 2025 17:36:23 -0500 Subject: [PATCH 19/22] remove unsued files --- ci/test_wheel_jump.sh | 9 --------- 1 file changed, 9 deletions(-) delete mode 100755 ci/test_wheel_jump.sh diff --git a/ci/test_wheel_jump.sh b/ci/test_wheel_jump.sh deleted file mode 100755 index 3879987950..0000000000 --- a/ci/test_wheel_jump.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -set -euo pipefail -#straints file for 'pip' and puts its location in an exported variable PIP_EXPORT, -# so those cons -# sets up a contraints will affect all future 'pip install' calls -source rapids-init-pip - -./ci/thirdparty-testing/run_jump_tests.sh From 1acea036d22902f4cd67b36c221b7f40fa6c1c02 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Wed, 24 Sep 2025 17:41:04 -0500 Subject: [PATCH 20/22] fix style --- ci/test_wheel_cuopt.sh | 2 +- ci/thirdparty-testing/run_jump_tests.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/test_wheel_cuopt.sh b/ci/test_wheel_cuopt.sh index 70f87d30f5..3703aeb597 100755 --- a/ci/test_wheel_cuopt.sh +++ b/ci/test_wheel_cuopt.sh @@ -77,4 +77,4 @@ RAPIDS_DATASET_ROOT_DIR=./datasets timeout 30m python -m pytest --verbose --capt ./ci/thirdparty-testing/run_cvxpy_tests.sh # run jump tests -./ci/thirdparty-testing/run_jump_tests.sh \ No newline at end of file +./ci/thirdparty-testing/run_jump_tests.sh diff --git a/ci/thirdparty-testing/run_jump_tests.sh b/ci/thirdparty-testing/run_jump_tests.sh index 964f27a6bc..35ac12e6e0 100755 --- a/ci/thirdparty-testing/run_jump_tests.sh +++ b/ci/thirdparty-testing/run_jump_tests.sh @@ -66,4 +66,4 @@ catch end println("Running Pkg.test() for cuOpt.jl -- this will spew output and may fail loudly"); Pkg.test(; coverage=true) -' \ No newline at end of file +' From 4cf7c539e0b381278f1310a25904fcc3b143df12 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Thu, 25 Sep 2025 09:35:13 -0500 Subject: [PATCH 21/22] fix repo link --- ci/thirdparty-testing/run_jump_tests.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/thirdparty-testing/run_jump_tests.sh b/ci/thirdparty-testing/run_jump_tests.sh index 35ac12e6e0..a08d5df482 100755 --- a/ci/thirdparty-testing/run_jump_tests.sh +++ b/ci/thirdparty-testing/run_jump_tests.sh @@ -36,7 +36,7 @@ julia --version CUOPT_JL_DIR="$(mktemp -d)/cuOpt.jl" rapids-logger "Cloning cuOpt.jl into ${CUOPT_JL_DIR}" -git clone --branch fix_get_for_parameters https://github.com/jump-dev/cuOpt.jl.git "${CUOPT_JL_DIR}" +git clone https://github.com/jump-dev/cuOpt.jl.git "${CUOPT_JL_DIR}" cd $CUOPT_JL_DIR || exit 1 From 03c1192195139be507b0ac83a0235c855197f9a1 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Thu, 25 Sep 2025 13:47:25 -0500 Subject: [PATCH 22/22] update --- ci/test_wheel_cuopt.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ci/test_wheel_cuopt.sh b/ci/test_wheel_cuopt.sh index 3703aeb597..02f1d64ced 100755 --- a/ci/test_wheel_cuopt.sh +++ b/ci/test_wheel_cuopt.sh @@ -76,5 +76,7 @@ RAPIDS_DATASET_ROOT_DIR=./datasets timeout 30m python -m pytest --verbose --capt # run cvxpy integration tests ./ci/thirdparty-testing/run_cvxpy_tests.sh -# run jump tests -./ci/thirdparty-testing/run_jump_tests.sh +# run jump tests for only nightly builds +if [[ "${RAPIDS_BUILD_TYPE}" == "nightly" ]]; then + ./ci/thirdparty-testing/run_jump_tests.sh +fi