From a623866757190c936a12412677d47590c004c7ad Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Tue, 30 Sep 2025 10:43:28 -0500 Subject: [PATCH 01/10] Enable only conda build --- .github/workflows/julia-tests.yaml | 135 +++++++++++++++++++++++++++++ .github/workflows/pr.yaml | 100 --------------------- ci/test_cpp.sh | 10 +-- ci/test_python.sh | 17 ++-- dependencies.yaml | 5 ++ 5 files changed, 149 insertions(+), 118 deletions(-) create mode 100644 .github/workflows/julia-tests.yaml diff --git a/.github/workflows/julia-tests.yaml b/.github/workflows/julia-tests.yaml new file mode 100644 index 0000000000..ad84d117ec --- /dev/null +++ b/.github/workflows/julia-tests.yaml @@ -0,0 +1,135 @@ +# 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. + +name: Julia Tests + +on: + workflow_call: + inputs: + build_type: + required: true + type: string + branch: + required: true + type: string + date: + required: true + type: string + sha: + required: true + type: string + libcuopt_wheelhouse: + required: true + type: string + description: "Path to libcuopt wheelhouse for testing" + +jobs: + julia-tests: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + ref: ${{ inputs.sha }} + + - name: Set up Julia + uses: julia-actions/setup-julia@v1 + with: + version: '1.10' # Use a stable LTS version + arch: x64 + + - name: Cache Julia packages + uses: actions/cache@v4 + with: + path: ~/.julia + key: ${{ runner.os }}-julia-${{ hashFiles('**/Project.toml') }} + + - name: Install system dependencies + run: | + sudo apt-get update + sudo apt-get install -y file unzip + + - name: Download test datasets + run: | + ./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 - + + - name: Set up Python environment + uses: actions/setup-python@v5 + with: + python-version: '3.11' + + - name: Install Python dependencies + run: | + python -m pip install --upgrade pip + pip install pytest pexpect + + - name: Install cuOpt wheels + run: | + # Install libcuopt wheel + pip install "${{ inputs.libcuopt_wheelhouse }}"/libcuopt*.whl + + - name: Find and set up libcuopt library path + run: | + # Find libcuopt.so and add its directory to LD_LIBRARY_PATH + LIBCUOPT_PATH=$(find /usr/local -name "libcuopt.so" -type f 2>/dev/null | head -1) + if [ -n "$LIBCUOPT_PATH" ]; then + echo "LIBCUOPT_PATH: $LIBCUOPT_PATH" + LIBCUOPT_DIR=$(dirname "$LIBCUOPT_PATH") + echo "LIBCUOPT_DIR: $LIBCUOPT_DIR" + echo "LD_LIBRARY_PATH=${LIBCUOPT_DIR}:${LD_LIBRARY_PATH}" >> $GITHUB_ENV + echo "Found libcuopt.so at $LIBCUOPT_PATH, added directory to LD_LIBRARY_PATH: $LIBCUOPT_DIR" + else + echo "Warning: libcuopt.so not found in expected locations" + fi + + - name: Clone cuOpt.jl repository + run: | + CUOPT_JL_DIR="$(mktemp -d)/cuOpt.jl" + echo "Cloning cuOpt.jl into ${CUOPT_JL_DIR}" + git clone https://github.com/jump-dev/cuOpt.jl.git "${CUOPT_JL_DIR}" + echo "CUOPT_JL_DIR=${CUOPT_JL_DIR}" >> $GITHUB_ENV + + - name: Run Julia tests + run: | + cd $CUOPT_JL_DIR + echo "Running Julia tests for cuOpt.jl" + + # 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) + ' + + - name: Upload test results + uses: actions/upload-artifact@v4 + if: always() + with: + name: julia-test-results + path: | + ${{ env.CUOPT_JL_DIR }}/test/ + ${{ env.CUOPT_JL_DIR }}/coverage/ + retention-days: 7 diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 9517f92365..175dfc0d88 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -33,15 +33,6 @@ jobs: - 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: @@ -146,94 +137,3 @@ jobs: 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 - with: - build_type: pull-request - script: ci/build_wheel_cuopt_mps_parser.sh - package-name: cuopt_mps_parser - package-type: python - append-cuda-suffix: false - # need 1 build per Python version and arch (but CUDA version doesn't matter so choose the latest) - matrix_filter: 'group_by([.ARCH, (.PY_VER |split(".") | map(tonumber))])|map(max_by([(.CUDA_VER|split(".")|map(tonumber))]))' - wheel-build-libcuopt: - needs: wheel-build-cuopt-mps-parser - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@branch-25.10 - with: - # build for every combination of arch and CUDA version, but only for the latest Python - matrix_filter: group_by([.ARCH, (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | map(max_by(.PY_VER|split(".")|map(tonumber))) - package-type: cpp - package-name: libcuopt - build_type: pull-request - script: ci/build_wheel_libcuopt.sh - wheel-build-cuopt: - needs: [wheel-build-cuopt-mps-parser, wheel-build-libcuopt] - 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 - 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] - 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 - 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_cpp.sh b/ci/test_cpp.sh index 30d664dc2a..84e3264146 100755 --- a/ci/test_cpp.sh +++ b/ci/test_cpp.sh @@ -21,14 +21,15 @@ set -euo pipefail CUOPT_VERSION="$(rapids-version)" +CPP_CHANNEL=$(rapids-download-conda-from-github cpp) + rapids-logger "Generate C++ testing dependencies" rapids-dependency-file-generator \ --output conda \ --file-key test_cpp \ + --prepend-channel "${CPP_CHANNEL}" \ --matrix "cuda=${RAPIDS_CUDA_VERSION%.*};arch=$(arch)" | tee env.yaml -CPP_CHANNEL=$(rapids-download-conda-from-github cpp) - rapids-mamba-retry env create --yes -f env.yaml -n test --channel "${CPP_CHANNEL}" # Temporarily allow unbound variables for conda activation. @@ -41,11 +42,6 @@ mkdir -p "${RAPIDS_TESTS_DIR}" rapids-print-env -rapids-mamba-retry install \ - --channel "${CPP_CHANNEL}" \ - "libcuopt=${CUOPT_VERSION}" \ - "libcuopt-tests=${CUOPT_VERSION}" - rapids-logger "Check GPU usage" nvidia-smi diff --git a/ci/test_python.sh b/ci/test_python.sh index 46de2d0d82..42566a7f2f 100755 --- a/ci/test_python.sh +++ b/ci/test_python.sh @@ -21,10 +21,16 @@ set -euo pipefail CUOPT_VERSION="$(rapids-version)" +rapids-logger "Downloading artifacts from previous jobs" +CPP_CHANNEL=$(rapids-download-conda-from-github cpp) +PYTHON_CHANNEL=$(rapids-download-conda-from-github python) + rapids-logger "Generate Python testing dependencies" rapids-dependency-file-generator \ --output conda \ --file-key test_python \ + --prepend-channel "${CPP_CHANNEL}" \ + --prepend-channel "${PYTHON_CHANNEL}" \ --matrix "cuda=${RAPIDS_CUDA_VERSION%.*};arch=$(arch);py=${RAPIDS_PY_VERSION}" | tee env.yaml rapids-mamba-retry env create --yes -f env.yaml -n test @@ -34,23 +40,12 @@ set +u conda activate test set -u -rapids-logger "Downloading artifacts from previous jobs" -CPP_CHANNEL=$(rapids-download-conda-from-github cpp) -PYTHON_CHANNEL=$(rapids-download-conda-from-github python) - RAPIDS_TESTS_DIR=${RAPIDS_TESTS_DIR:-"${PWD}/test-results"} RAPIDS_COVERAGE_DIR=${RAPIDS_COVERAGE_DIR:-"${PWD}/coverage-results"} mkdir -p "${RAPIDS_TESTS_DIR}" "${RAPIDS_COVERAGE_DIR}" rapids-print-env -rapids-mamba-retry install \ - --channel "${CPP_CHANNEL}" \ - --channel "${PYTHON_CHANNEL}" \ - "libcuopt=${CUOPT_VERSION}" \ - "cuopt=${CUOPT_VERSION}" \ - "cuopt-server=${CUOPT_VERSION}" - rapids-logger "Download datasets" RAPIDS_DATASET_ROOT_DIR="$(realpath datasets)" export RAPIDS_DATASET_ROOT_DIR diff --git a/dependencies.yaml b/dependencies.yaml index ee479e520a..6100d4b6ca 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -60,6 +60,11 @@ files: output: none includes: - py_version + - depends_on_libcuopt + - depends_on_cuopt + - depends_on_cuopt_server + - depends_on_cuopt_sh_client + - depends_on_mps_parser - test_python_common - test_python_cuopt - test_python_cuopt_server From 006daa7f798a227f39e83a108d802a9688d3b1ff Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Tue, 30 Sep 2025 10:46:05 -0500 Subject: [PATCH 02/10] debug --- ci/test_python.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ci/test_python.sh b/ci/test_python.sh index 42566a7f2f..1c53cac555 100755 --- a/ci/test_python.sh +++ b/ci/test_python.sh @@ -33,7 +33,13 @@ rapids-dependency-file-generator \ --prepend-channel "${PYTHON_CHANNEL}" \ --matrix "cuda=${RAPIDS_CUDA_VERSION%.*};arch=$(arch);py=${RAPIDS_PY_VERSION}" | tee env.yaml -rapids-mamba-retry env create --yes -f env.yaml -n test +rapids-logger "Listing local channels" +ls ${CPP_CHANNEL}/linux-64 +ls ${CPP_CHANNEL}/noarch +ls ${PYTHON_CHANNEL}/linux-64 +ls ${PYTHON_CHANNEL}/noarch + +rapids-mamba-retry env create --yes --verbose -f env.yaml -n test # Temporarily allow unbound variables for conda activation. set +u From 5c5448643ad75e15ab5892c9d50044cd9cf60b19 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Tue, 30 Sep 2025 10:53:40 -0500 Subject: [PATCH 03/10] remove file --- .github/workflows/julia-tests.yaml | 135 ----------------------------- 1 file changed, 135 deletions(-) delete mode 100644 .github/workflows/julia-tests.yaml diff --git a/.github/workflows/julia-tests.yaml b/.github/workflows/julia-tests.yaml deleted file mode 100644 index ad84d117ec..0000000000 --- a/.github/workflows/julia-tests.yaml +++ /dev/null @@ -1,135 +0,0 @@ -# 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. - -name: Julia Tests - -on: - workflow_call: - inputs: - build_type: - required: true - type: string - branch: - required: true - type: string - date: - required: true - type: string - sha: - required: true - type: string - libcuopt_wheelhouse: - required: true - type: string - description: "Path to libcuopt wheelhouse for testing" - -jobs: - julia-tests: - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - ref: ${{ inputs.sha }} - - - name: Set up Julia - uses: julia-actions/setup-julia@v1 - with: - version: '1.10' # Use a stable LTS version - arch: x64 - - - name: Cache Julia packages - uses: actions/cache@v4 - with: - path: ~/.julia - key: ${{ runner.os }}-julia-${{ hashFiles('**/Project.toml') }} - - - name: Install system dependencies - run: | - sudo apt-get update - sudo apt-get install -y file unzip - - - name: Download test datasets - run: | - ./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 - - - - name: Set up Python environment - uses: actions/setup-python@v5 - with: - python-version: '3.11' - - - name: Install Python dependencies - run: | - python -m pip install --upgrade pip - pip install pytest pexpect - - - name: Install cuOpt wheels - run: | - # Install libcuopt wheel - pip install "${{ inputs.libcuopt_wheelhouse }}"/libcuopt*.whl - - - name: Find and set up libcuopt library path - run: | - # Find libcuopt.so and add its directory to LD_LIBRARY_PATH - LIBCUOPT_PATH=$(find /usr/local -name "libcuopt.so" -type f 2>/dev/null | head -1) - if [ -n "$LIBCUOPT_PATH" ]; then - echo "LIBCUOPT_PATH: $LIBCUOPT_PATH" - LIBCUOPT_DIR=$(dirname "$LIBCUOPT_PATH") - echo "LIBCUOPT_DIR: $LIBCUOPT_DIR" - echo "LD_LIBRARY_PATH=${LIBCUOPT_DIR}:${LD_LIBRARY_PATH}" >> $GITHUB_ENV - echo "Found libcuopt.so at $LIBCUOPT_PATH, added directory to LD_LIBRARY_PATH: $LIBCUOPT_DIR" - else - echo "Warning: libcuopt.so not found in expected locations" - fi - - - name: Clone cuOpt.jl repository - run: | - CUOPT_JL_DIR="$(mktemp -d)/cuOpt.jl" - echo "Cloning cuOpt.jl into ${CUOPT_JL_DIR}" - git clone https://github.com/jump-dev/cuOpt.jl.git "${CUOPT_JL_DIR}" - echo "CUOPT_JL_DIR=${CUOPT_JL_DIR}" >> $GITHUB_ENV - - - name: Run Julia tests - run: | - cd $CUOPT_JL_DIR - echo "Running Julia tests for cuOpt.jl" - - # 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) - ' - - - name: Upload test results - uses: actions/upload-artifact@v4 - if: always() - with: - name: julia-test-results - path: | - ${{ env.CUOPT_JL_DIR }}/test/ - ${{ env.CUOPT_JL_DIR }}/coverage/ - retention-days: 7 From 1e55bd6004c2dae28d2d33412a868f25aac13f74 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Tue, 30 Sep 2025 10:55:28 -0500 Subject: [PATCH 04/10] fix --- ci/test_cpp.sh | 2 +- ci/test_python.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/test_cpp.sh b/ci/test_cpp.sh index 84e3264146..f0deda5b0b 100755 --- a/ci/test_cpp.sh +++ b/ci/test_cpp.sh @@ -19,7 +19,7 @@ set -euo pipefail . /opt/conda/etc/profile.d/conda.sh -CUOPT_VERSION="$(rapids-version)" +#CUOPT_VERSION="$(rapids-version)" CPP_CHANNEL=$(rapids-download-conda-from-github cpp) diff --git a/ci/test_python.sh b/ci/test_python.sh index 1c53cac555..c441676db0 100755 --- a/ci/test_python.sh +++ b/ci/test_python.sh @@ -19,7 +19,7 @@ set -euo pipefail . /opt/conda/etc/profile.d/conda.sh -CUOPT_VERSION="$(rapids-version)" +#CUOPT_VERSION="$(rapids-version)" rapids-logger "Downloading artifacts from previous jobs" CPP_CHANNEL=$(rapids-download-conda-from-github cpp) From f49737c2b873068910779040f830b442cd9bb902 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Tue, 30 Sep 2025 12:26:28 -0500 Subject: [PATCH 05/10] fix tests --- ci/test_python.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ci/test_python.sh b/ci/test_python.sh index c441676db0..4145f12091 100755 --- a/ci/test_python.sh +++ b/ci/test_python.sh @@ -33,11 +33,11 @@ rapids-dependency-file-generator \ --prepend-channel "${PYTHON_CHANNEL}" \ --matrix "cuda=${RAPIDS_CUDA_VERSION%.*};arch=$(arch);py=${RAPIDS_PY_VERSION}" | tee env.yaml -rapids-logger "Listing local channels" -ls ${CPP_CHANNEL}/linux-64 -ls ${CPP_CHANNEL}/noarch -ls ${PYTHON_CHANNEL}/linux-64 -ls ${PYTHON_CHANNEL}/noarch +#rapids-logger "Listing local channels" +#ls ${CPP_CHANNEL}/linux-64 +#ls ${CPP_CHANNEL}/noarch +#ls ${PYTHON_CHANNEL}/linux-64 +#ls ${PYTHON_CHANNEL}/noarch rapids-mamba-retry env create --yes --verbose -f env.yaml -n test From 64a43d3c8e3ec72569e418b20e4e5d14c25b33f4 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Tue, 30 Sep 2025 12:35:45 -0500 Subject: [PATCH 06/10] add test depe --- dependencies.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/dependencies.yaml b/dependencies.yaml index 6100d4b6ca..c1c75b73aa 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -55,6 +55,7 @@ files: - cuda - cuda_version - test_cpp + - test_cpp_cuopt - depends_on_libcuopt test_python: output: none @@ -323,6 +324,11 @@ dependencies: - cuda-sanitizer-api - gmock - gtest + test_cpp_cuopt: + common: + - output_types: [conda] + packages: + - libcuopt-tests==25.10.*,>=0.0.0a0 build_wheels: common: - output_types: [requirements, pyproject] From f93731b057b1990d584f172e7570a9b25fbe164f Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Tue, 30 Sep 2025 15:16:44 -0500 Subject: [PATCH 07/10] update psutil version --- conda/environments/all_cuda-129_arch-aarch64.yaml | 2 +- conda/environments/all_cuda-129_arch-x86_64.yaml | 2 +- conda/environments/all_cuda-130_arch-aarch64.yaml | 2 +- conda/environments/all_cuda-130_arch-x86_64.yaml | 2 +- conda/recipes/cuopt-server/recipe.yaml | 2 +- dependencies.yaml | 4 ++-- python/cuopt_server/pyproject.toml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/conda/environments/all_cuda-129_arch-aarch64.yaml b/conda/environments/all_cuda-129_arch-aarch64.yaml index e173a04100..f690f8c293 100644 --- a/conda/environments/all_cuda-129_arch-aarch64.yaml +++ b/conda/environments/all_cuda-129_arch-aarch64.yaml @@ -52,7 +52,7 @@ dependencies: - pexpect - pip - pre-commit -- psutil>=5.9,<6.0a0 +- psutil>=6.0.0 - pylibraft==25.10.*,>=0.0.0a0 - pyrsistent - pytest-cov diff --git a/conda/environments/all_cuda-129_arch-x86_64.yaml b/conda/environments/all_cuda-129_arch-x86_64.yaml index 7767e5a953..f261d370ac 100644 --- a/conda/environments/all_cuda-129_arch-x86_64.yaml +++ b/conda/environments/all_cuda-129_arch-x86_64.yaml @@ -52,7 +52,7 @@ dependencies: - pexpect - pip - pre-commit -- psutil>=5.9,<6.0a0 +- psutil>=6.0.0 - pylibraft==25.10.*,>=0.0.0a0 - pyrsistent - pytest-cov diff --git a/conda/environments/all_cuda-130_arch-aarch64.yaml b/conda/environments/all_cuda-130_arch-aarch64.yaml index e8b8ab2b5d..13a32fc830 100644 --- a/conda/environments/all_cuda-130_arch-aarch64.yaml +++ b/conda/environments/all_cuda-130_arch-aarch64.yaml @@ -52,7 +52,7 @@ dependencies: - pexpect - pip - pre-commit -- psutil>=5.9,<6.0a0 +- psutil>=6.0.0 - pylibraft==25.10.*,>=0.0.0a0 - pyrsistent - pytest-cov diff --git a/conda/environments/all_cuda-130_arch-x86_64.yaml b/conda/environments/all_cuda-130_arch-x86_64.yaml index 66b5f8f4bd..65570465fc 100644 --- a/conda/environments/all_cuda-130_arch-x86_64.yaml +++ b/conda/environments/all_cuda-130_arch-x86_64.yaml @@ -52,7 +52,7 @@ dependencies: - pexpect - pip - pre-commit -- psutil>=5.9,<6.0a0 +- psutil>=6.0.0 - pylibraft==25.10.*,>=0.0.0a0 - pyrsistent - pytest-cov diff --git a/conda/recipes/cuopt-server/recipe.yaml b/conda/recipes/cuopt-server/recipe.yaml index 32c9efa0f7..f124b95255 100644 --- a/conda/recipes/cuopt-server/recipe.yaml +++ b/conda/recipes/cuopt-server/recipe.yaml @@ -38,7 +38,7 @@ requirements: - msgpack-numpy =0.4.8 - numpy >=1.23,<3.0a0 - pandas>=2 - - psutil>=5.9,<6.0a0 + - psutil>=6.0.0 - python - uvicorn ${{ uvicorn_version }} diff --git a/dependencies.yaml b/dependencies.yaml index c1c75b73aa..19cb347c27 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -412,11 +412,11 @@ dependencies: packages: - *msgpack_python - pip - - psutil>=5.9,<6.0a0 + - psutil>=6.0.0 - output_types: [requirements, pyproject] packages: - *msgpack - - psutil==5.9.6 + - psutil>=6.0.0 run_cuopt_sh_client: common: diff --git a/python/cuopt_server/pyproject.toml b/python/cuopt_server/pyproject.toml index f842975893..40845f4a6a 100644 --- a/python/cuopt_server/pyproject.toml +++ b/python/cuopt_server/pyproject.toml @@ -40,7 +40,7 @@ dependencies = [ "msgpack==1.1.0", "numpy>=1.23.5,<3.0a0", "pandas>=2.0", - "psutil==5.9.6", + "psutil>=6.0.0", "uvicorn==0.34.*", ] # This list was generated by `rapids-dependency-file-generator`. To make changes, edit ../../dependencies.yaml and run `rapids-dependency-file-generator`. classifiers = [ From e068c72c87d5dd1e658d5fffb5bbb4226a04a26c Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Tue, 30 Sep 2025 16:14:12 -0500 Subject: [PATCH 08/10] revert pr.yaml changes --- .github/workflows/pr.yaml | 100 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 175dfc0d88..9517f92365 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -33,6 +33,15 @@ jobs: - 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: @@ -137,3 +146,94 @@ jobs: 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 + with: + build_type: pull-request + script: ci/build_wheel_cuopt_mps_parser.sh + package-name: cuopt_mps_parser + package-type: python + append-cuda-suffix: false + # need 1 build per Python version and arch (but CUDA version doesn't matter so choose the latest) + matrix_filter: 'group_by([.ARCH, (.PY_VER |split(".") | map(tonumber))])|map(max_by([(.CUDA_VER|split(".")|map(tonumber))]))' + wheel-build-libcuopt: + needs: wheel-build-cuopt-mps-parser + secrets: inherit + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@branch-25.10 + with: + # build for every combination of arch and CUDA version, but only for the latest Python + matrix_filter: group_by([.ARCH, (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | map(max_by(.PY_VER|split(".")|map(tonumber))) + package-type: cpp + package-name: libcuopt + build_type: pull-request + script: ci/build_wheel_libcuopt.sh + wheel-build-cuopt: + needs: [wheel-build-cuopt-mps-parser, wheel-build-libcuopt] + 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 + 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] + 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 + 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 From 7d4e6b2d170e25af7bf513beebbeba898d5ba216 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Tue, 30 Sep 2025 16:15:42 -0500 Subject: [PATCH 09/10] remove debug prints and commented code --- ci/test_cpp.sh | 2 -- ci/test_python.sh | 8 -------- 2 files changed, 10 deletions(-) diff --git a/ci/test_cpp.sh b/ci/test_cpp.sh index f0deda5b0b..6c68577876 100755 --- a/ci/test_cpp.sh +++ b/ci/test_cpp.sh @@ -19,8 +19,6 @@ set -euo pipefail . /opt/conda/etc/profile.d/conda.sh -#CUOPT_VERSION="$(rapids-version)" - CPP_CHANNEL=$(rapids-download-conda-from-github cpp) rapids-logger "Generate C++ testing dependencies" diff --git a/ci/test_python.sh b/ci/test_python.sh index 4145f12091..a3cccb5518 100755 --- a/ci/test_python.sh +++ b/ci/test_python.sh @@ -19,8 +19,6 @@ set -euo pipefail . /opt/conda/etc/profile.d/conda.sh -#CUOPT_VERSION="$(rapids-version)" - rapids-logger "Downloading artifacts from previous jobs" CPP_CHANNEL=$(rapids-download-conda-from-github cpp) PYTHON_CHANNEL=$(rapids-download-conda-from-github python) @@ -33,12 +31,6 @@ rapids-dependency-file-generator \ --prepend-channel "${PYTHON_CHANNEL}" \ --matrix "cuda=${RAPIDS_CUDA_VERSION%.*};arch=$(arch);py=${RAPIDS_PY_VERSION}" | tee env.yaml -#rapids-logger "Listing local channels" -#ls ${CPP_CHANNEL}/linux-64 -#ls ${CPP_CHANNEL}/noarch -#ls ${PYTHON_CHANNEL}/linux-64 -#ls ${PYTHON_CHANNEL}/noarch - rapids-mamba-retry env create --yes --verbose -f env.yaml -n test # Temporarily allow unbound variables for conda activation. From 4e69ca468da6a25c58c1a0fb6785893cfc771a87 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Tue, 30 Sep 2025 16:56:50 -0500 Subject: [PATCH 10/10] remove verbose --- ci/test_python.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/test_python.sh b/ci/test_python.sh index a3cccb5518..0d3d1e5963 100755 --- a/ci/test_python.sh +++ b/ci/test_python.sh @@ -31,7 +31,7 @@ rapids-dependency-file-generator \ --prepend-channel "${PYTHON_CHANNEL}" \ --matrix "cuda=${RAPIDS_CUDA_VERSION%.*};arch=$(arch);py=${RAPIDS_PY_VERSION}" | tee env.yaml -rapids-mamba-retry env create --yes --verbose -f env.yaml -n test +rapids-mamba-retry env create --yes -f env.yaml -n test # Temporarily allow unbound variables for conda activation. set +u