From 86bd80d70b7fd1057063ce515b2e8829e55fb70c Mon Sep 17 00:00:00 2001 From: James Lamb Date: Tue, 27 Jan 2026 11:49:10 -0600 Subject: [PATCH 01/11] try removing pypi.nvidia.com --- .github/workflows/pr.yaml | 64 ------------------------ .pre-commit-config.yaml | 10 +++- ci/build_wheel.sh | 3 +- ci/build_wheel_cuopt.sh | 2 + ci/build_wheel_cuopt_mps_parser.sh | 4 +- ci/build_wheel_cuopt_server.sh | 4 +- ci/build_wheel_cuopt_sh_client.sh | 4 +- ci/build_wheel_libcuopt.sh | 4 +- ci/rapids-init-pip | 18 +++++++ ci/test_self_hosted_service.sh | 5 +- ci/test_wheel_cuopt.sh | 5 +- ci/test_wheel_cuopt_server.sh | 5 +- ci/thirdparty-testing/run_cvxpy_tests.sh | 3 +- dependencies.yaml | 9 ---- docs/cuopt/source/versions1.json | 8 ++- 15 files changed, 58 insertions(+), 90 deletions(-) create mode 100644 ci/rapids-init-pip diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 4ba04d307..b8bb870b7 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -20,11 +20,6 @@ jobs: - compute-matrix-filters - 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 @@ -176,65 +171,6 @@ jobs: uses: rapidsai/shared-workflows/.github/workflows/checks.yaml@main with: enable_check_generated_files: false - conda-cpp-build: - needs: [checks, compute-matrix-filters] - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@main - with: - build_type: pull-request - script: ci/build_cpp.sh - matrix_filter: ${{ needs.compute-matrix-filters.outputs.conda_lean_filter }} - conda-cpp-tests: - needs: [conda-cpp-build, changed-files, compute-matrix-filters] - uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-tests.yaml@main - #if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp - with: - build_type: pull-request - script: ci/test_cpp.sh - matrix_filter: ${{ needs.compute-matrix-filters.outputs.conda_test_filter }} - secrets: - script-env-secret-1-key: CUOPT_DATASET_S3_URI - script-env-secret-1-value: ${{ secrets.CUOPT_DATASET_S3_URI }} - script-env-secret-2-key: CUOPT_AWS_ACCESS_KEY_ID - script-env-secret-2-value: ${{ secrets.CUOPT_AWS_ACCESS_KEY_ID }} - script-env-secret-3-key: CUOPT_AWS_SECRET_ACCESS_KEY - script-env-secret-3-value: ${{ secrets.CUOPT_AWS_SECRET_ACCESS_KEY }} - conda-python-build: - needs: [conda-cpp-build, compute-matrix-filters] - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@main - with: - build_type: pull-request - script: ci/build_python.sh - matrix_filter: ${{ needs.compute-matrix-filters.outputs.conda_test_filter }} - conda-python-tests: - needs: [conda-python-build, changed-files, compute-matrix-filters] - uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@main - #if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python - with: - run_codecov: false - build_type: pull-request - script: ci/test_python.sh - matrix_filter: ${{ needs.compute-matrix-filters.outputs.conda_test_filter }} - secrets: - script-env-secret-1-key: CUOPT_DATASET_S3_URI - script-env-secret-1-value: ${{ secrets.CUOPT_DATASET_S3_URI }} - script-env-secret-2-key: CUOPT_AWS_ACCESS_KEY_ID - script-env-secret-2-value: ${{ secrets.CUOPT_AWS_ACCESS_KEY_ID }} - script-env-secret-3-key: CUOPT_AWS_SECRET_ACCESS_KEY - script-env-secret-3-value: ${{ secrets.CUOPT_AWS_SECRET_ACCESS_KEY }} - docs-build: - needs: conda-python-build - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main - 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:26.04-latest" - script: "ci/build_docs.sh" wheel-build-cuopt-mps-parser: needs: compute-matrix-filters secrets: inherit diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 799eb291f..e903ea70f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2019-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2019-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 repos: @@ -54,7 +54,7 @@ repos: - id: shellcheck args: ["--severity=warning"] - repo: https://github.com/rapidsai/pre-commit-hooks - rev: v1.2.1 + rev: v1.3.1 hooks: - id: verify-copyright args: [--fix, --spdx] @@ -76,6 +76,12 @@ repos: (?x)^( ^cpp/tests/utilities/cxxopts.hpp ) + # - id: verify-pyproject-license + # # ignore the top-level pyproject.toml, which doesn't + # # have or need a [project] table + # exclude: | + # (?x) + # ^pyproject[.]toml$ - repo: local hooks: - id: update-versions diff --git a/ci/build_wheel.sh b/ci/build_wheel.sh index 41a71cef9..0eaf2a9ab 100755 --- a/ci/build_wheel.sh +++ b/ci/build_wheel.sh @@ -10,6 +10,8 @@ package_dir=$2 source rapids-configure-sccache source rapids-date-string +RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX="true" +export RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX source rapids-init-pip # Update the version to accomdate nightly and release changes for the wheel name @@ -26,7 +28,6 @@ RAPIDS_PIP_WHEEL_ARGS=( -v --no-deps --disable-pip-version-check - --extra-index-url=https://pypi.nvidia.com ) # Only use --build-constraint when build isolation is enabled. diff --git a/ci/build_wheel_cuopt.sh b/ci/build_wheel_cuopt.sh index 0ba991e57..83f715172 100755 --- a/ci/build_wheel_cuopt.sh +++ b/ci/build_wheel_cuopt.sh @@ -6,6 +6,8 @@ set -euo pipefail +RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX="true" +export RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX source rapids-init-pip # Install rockylinux repo diff --git a/ci/build_wheel_cuopt_mps_parser.sh b/ci/build_wheel_cuopt_mps_parser.sh index 21681db46..9c7037368 100755 --- a/ci/build_wheel_cuopt_mps_parser.sh +++ b/ci/build_wheel_cuopt_mps_parser.sh @@ -1,11 +1,13 @@ #!/bin/bash -# SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 set -euo pipefail +RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX="true" +export RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX source rapids-init-pip package_dir="python/cuopt/cuopt/linear_programming" diff --git a/ci/build_wheel_cuopt_server.sh b/ci/build_wheel_cuopt_server.sh index a316bad1d..4193cde43 100755 --- a/ci/build_wheel_cuopt_server.sh +++ b/ci/build_wheel_cuopt_server.sh @@ -1,10 +1,12 @@ #!/bin/bash -# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 set -euo pipefail +RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX="true" +export RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX source rapids-init-pip package_dir="python/cuopt_server" diff --git a/ci/build_wheel_cuopt_sh_client.sh b/ci/build_wheel_cuopt_sh_client.sh index a7792226a..0e52ed434 100755 --- a/ci/build_wheel_cuopt_sh_client.sh +++ b/ci/build_wheel_cuopt_sh_client.sh @@ -1,10 +1,12 @@ #!/bin/bash -# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 set -euo pipefail +RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX="true" +export RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX source rapids-init-pip package_dir="python/cuopt_self_hosted" diff --git a/ci/build_wheel_libcuopt.sh b/ci/build_wheel_libcuopt.sh index 640562ed3..164d025e9 100755 --- a/ci/build_wheel_libcuopt.sh +++ b/ci/build_wheel_libcuopt.sh @@ -1,9 +1,11 @@ #!/bin/bash -# SPDX-FileCopyrightText: Copyright (c) 2023-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 set -euo pipefail +RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX="true" +export RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX source rapids-init-pip package_name="libcuopt" diff --git a/ci/rapids-init-pip b/ci/rapids-init-pip new file mode 100644 index 000000000..60f26673f --- /dev/null +++ b/ci/rapids-init-pip @@ -0,0 +1,18 @@ +#!/bin/bash + +PIP_CONSTRAINT="${PIP_CONSTRAINT:-$(mktemp -d)/constraints.txt}" +touch "${PIP_CONSTRAINT}" +export PIP_CONSTRAINT + +# TODO: remove when https://github.com/rapidsai/ci-imgs/pull/357 is merged +# +# Patching out pypi.nvidia.com in this script allows a slow migration across RAPIDS +# without ever breaking CI (unlike just removing this in CI images and seeing what breaks). +if [[ "${RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX}" == "true" ]]; then + rapids-logger "patching pypi.nvidia.com out of pip.conf" + sed -i '/pypi\.nvidia\.com/d' /etc/xdg/pip/pip.conf + rapids-logger "updated 'pip.conf':" + rapids-logger "" + cat /etc/xdg/pip/pip.conf + rapids-logger "" +fi diff --git a/ci/test_self_hosted_service.sh b/ci/test_self_hosted_service.sh index 65e3f0498..6b126b809 100755 --- a/ci/test_self_hosted_service.sh +++ b/ci/test_self_hosted_service.sh @@ -1,10 +1,12 @@ #!/bin/bash -# SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 set -euo pipefail +RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX="true" +export RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX source rapids-init-pip # Download the cuopt built in the previous step @@ -16,7 +18,6 @@ LIBCUOPT_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="libcuopt_${RAPIDS_PY_CUDA_SUFFIX}" r # echo to expand wildcard before adding `[extra]` requires for pip rapids-pip-retry install \ - --extra-index-url=https://pypi.nvidia.com \ "${CUOPT_MPS_PARSER_WHEELHOUSE}"/cuopt_mps_parser*.whl \ "${CUOPT_WHEELHOUSE}"/cuopt*.whl \ "${LIBCUOPT_WHEELHOUSE}"/libcuopt*.whl \ diff --git a/ci/test_wheel_cuopt.sh b/ci/test_wheel_cuopt.sh index b5faa8496..22392c7e8 100755 --- a/ci/test_wheel_cuopt.sh +++ b/ci/test_wheel_cuopt.sh @@ -1,12 +1,14 @@ #!/bin/bash -# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 set -euo pipefail # sets up a constraints file for 'pip' and puts its location in an exported variable PIP_EXPORT, # so those constraints will affect all future 'pip install' calls +RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX="true" +export RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX source rapids-init-pip # Download the packages built in the previous step @@ -27,7 +29,6 @@ EOF # echo to expand wildcard before adding `[extra]` requires for pip rapids-pip-retry install \ - --extra-index-url=https://pypi.nvidia.com \ --constraint "${PIP_CONSTRAINT}" \ "${CUOPT_MPS_PARSER_WHEELHOUSE}"/cuopt_mps_parser*.whl \ "$(echo "${CUOPT_WHEELHOUSE}"/cuopt*.whl)[test]" \ diff --git a/ci/test_wheel_cuopt_server.sh b/ci/test_wheel_cuopt_server.sh index 68e3aa931..652638878 100755 --- a/ci/test_wheel_cuopt_server.sh +++ b/ci/test_wheel_cuopt_server.sh @@ -1,10 +1,12 @@ #!/bin/bash -# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 set -eou pipefail +RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX="true" +export RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX source rapids-init-pip # Download the packages built in the previous step @@ -17,7 +19,6 @@ LIBCUOPT_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="libcuopt_${RAPIDS_PY_CUDA_SUFFIX}" r # echo to expand wildcard before adding `[extra]` requires for pip rapids-pip-retry install \ - --extra-index-url=https://pypi.nvidia.com \ "${CUOPT_MPS_PARSER_WHEELHOUSE}"/cuopt_mps_parser*.whl \ "$(echo "${CUOPT_SERVER_WHEELHOUSE}"/cuopt_server*.whl)[test]" \ "${CUOPT_WHEELHOUSE}"/cuopt*.whl \ diff --git a/ci/thirdparty-testing/run_cvxpy_tests.sh b/ci/thirdparty-testing/run_cvxpy_tests.sh index 94ab0969c..c336f6a80 100755 --- a/ci/thirdparty-testing/run_cvxpy_tests.sh +++ b/ci/thirdparty-testing/run_cvxpy_tests.sh @@ -1,5 +1,5 @@ #!/bin/bash -# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 set -e -u -o pipefail @@ -25,7 +25,6 @@ pip wheel \ echo "installing 'cvxpy' with cuopt" python -m pip install \ --constraint "${PIP_CONSTRAINT}" \ - --extra-index-url=https://pypi.nvidia.com \ --extra-index-url=https://pypi.anaconda.org/rapidsai-wheels-nightly/simple \ 'pytest-error-for-skips>=2.0.2' \ "$(echo ./dist/cvxpy*.whl)[CUOPT,testing]" diff --git a/dependencies.yaml b/dependencies.yaml index c84b6ee13..3d20c5786 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -350,11 +350,6 @@ dependencies: - numba>=0.60.0 - &pandas pandas>=2.0 - &pyyaml pyyaml>=6.0.0 - - output_types: requirements - packages: - # pip recognizes the index as a global option for the requirements.txt file - - --extra-index-url=https://pypi.nvidia.com - - --extra-index-url=https://pypi.anaconda.org/rapidsai-wheels-nightly/simple specific: - output_types: [conda, requirements, pyproject] matrices: @@ -518,7 +513,6 @@ dependencies: - output_types: requirements packages: # pip recognizes the index as a global option for the requirements.txt file - - --extra-index-url=https://pypi.nvidia.com - --extra-index-url=https://pypi.anaconda.org/rapidsai-wheels-nightly/simple specific: - output_types: [requirements, pyproject] @@ -571,7 +565,6 @@ dependencies: - output_types: requirements packages: # pip recognizes the index as a global option for the requirements.txt file - - --extra-index-url=https://pypi.nvidia.com - --extra-index-url=https://pypi.anaconda.org/rapidsai-wheels-nightly/simple specific: - output_types: [requirements, pyproject] @@ -597,7 +590,6 @@ dependencies: - &cudf_unsuffixed cudf==26.4.*,>=0.0.0a0 - output_types: requirements packages: - - --extra-index-url=https://pypi.nvidia.com - --extra-index-url=https://pypi.anaconda.org/rapidsai-wheels-nightly/simple specific: - output_types: [requirements, pyproject] @@ -623,7 +615,6 @@ dependencies: - &pylibraft_unsuffixed pylibraft==26.4.*,>=0.0.0a0 - output_types: requirements packages: - - --extra-index-url=https://pypi.nvidia.com - --extra-index-url=https://pypi.anaconda.org/rapidsai-wheels-nightly/simple specific: - output_types: [requirements, pyproject] diff --git a/docs/cuopt/source/versions1.json b/docs/cuopt/source/versions1.json index 12bebcd03..1dede408c 100644 --- a/docs/cuopt/source/versions1.json +++ b/docs/cuopt/source/versions1.json @@ -1,10 +1,14 @@ [ { - "version": "26.02.00", - "url": "https://docs.nvidia.com/cuopt/user-guide/26.02.00/", + "version": "26.04.00", + "url": "../26.04.00/", "name": "latest", "preferred": true }, + { + "version": "26.02.00", + "url": "https://docs.nvidia.com/cuopt/user-guide/26.02.00/" + }, { "version": "25.12.00", "url": "https://docs.nvidia.com/cuopt/user-guide/25.12.00/" From 4983c9b06c2739525744cc7ec9748aa4006b2929 Mon Sep 17 00:00:00 2001 From: James Lamb Date: Tue, 27 Jan 2026 11:50:43 -0600 Subject: [PATCH 02/11] use local rapids-init-pip --- ci/build_wheel.sh | 2 +- ci/build_wheel_cuopt.sh | 2 +- ci/build_wheel_cuopt_mps_parser.sh | 2 +- ci/build_wheel_cuopt_server.sh | 2 +- ci/build_wheel_cuopt_sh_client.sh | 2 +- ci/build_wheel_libcuopt.sh | 2 +- ci/test_self_hosted_service.sh | 2 +- ci/test_wheel_cuopt.sh | 2 +- ci/test_wheel_cuopt_server.sh | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/ci/build_wheel.sh b/ci/build_wheel.sh index 0eaf2a9ab..63501f32e 100755 --- a/ci/build_wheel.sh +++ b/ci/build_wheel.sh @@ -12,7 +12,7 @@ source rapids-configure-sccache source rapids-date-string RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX="true" export RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX -source rapids-init-pip +source ./ci/rapids-init-pip # Update the version to accomdate nightly and release changes for the wheel name rapids-generate-version > ./VERSION diff --git a/ci/build_wheel_cuopt.sh b/ci/build_wheel_cuopt.sh index 83f715172..9139bcf48 100755 --- a/ci/build_wheel_cuopt.sh +++ b/ci/build_wheel_cuopt.sh @@ -8,7 +8,7 @@ set -euo pipefail RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX="true" export RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX -source rapids-init-pip +source ./ci/rapids-init-pip # Install rockylinux repo if command -v dnf &> /dev/null; then diff --git a/ci/build_wheel_cuopt_mps_parser.sh b/ci/build_wheel_cuopt_mps_parser.sh index 9c7037368..202511c9a 100755 --- a/ci/build_wheel_cuopt_mps_parser.sh +++ b/ci/build_wheel_cuopt_mps_parser.sh @@ -8,7 +8,7 @@ set -euo pipefail RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX="true" export RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX -source rapids-init-pip +source ./ci/rapids-init-pip package_dir="python/cuopt/cuopt/linear_programming" diff --git a/ci/build_wheel_cuopt_server.sh b/ci/build_wheel_cuopt_server.sh index 4193cde43..4a5b77799 100755 --- a/ci/build_wheel_cuopt_server.sh +++ b/ci/build_wheel_cuopt_server.sh @@ -7,7 +7,7 @@ set -euo pipefail RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX="true" export RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX -source rapids-init-pip +source ./ci/rapids-init-pip package_dir="python/cuopt_server" diff --git a/ci/build_wheel_cuopt_sh_client.sh b/ci/build_wheel_cuopt_sh_client.sh index 0e52ed434..236c6921a 100755 --- a/ci/build_wheel_cuopt_sh_client.sh +++ b/ci/build_wheel_cuopt_sh_client.sh @@ -7,7 +7,7 @@ set -euo pipefail RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX="true" export RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX -source rapids-init-pip +source ./ci/rapids-init-pip package_dir="python/cuopt_self_hosted" diff --git a/ci/build_wheel_libcuopt.sh b/ci/build_wheel_libcuopt.sh index 164d025e9..b38bc4663 100755 --- a/ci/build_wheel_libcuopt.sh +++ b/ci/build_wheel_libcuopt.sh @@ -6,7 +6,7 @@ set -euo pipefail RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX="true" export RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX -source rapids-init-pip +source ./ci/rapids-init-pip package_name="libcuopt" package_dir="python/libcuopt" diff --git a/ci/test_self_hosted_service.sh b/ci/test_self_hosted_service.sh index 6b126b809..a5931a236 100755 --- a/ci/test_self_hosted_service.sh +++ b/ci/test_self_hosted_service.sh @@ -7,7 +7,7 @@ set -euo pipefail RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX="true" export RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX -source rapids-init-pip +source ./ci/rapids-init-pip # Download the cuopt built in the previous step RAPIDS_PY_CUDA_SUFFIX="$(rapids-wheel-ctk-name-gen "${RAPIDS_CUDA_VERSION}")" diff --git a/ci/test_wheel_cuopt.sh b/ci/test_wheel_cuopt.sh index 22392c7e8..15d3a9433 100755 --- a/ci/test_wheel_cuopt.sh +++ b/ci/test_wheel_cuopt.sh @@ -9,7 +9,7 @@ set -euo pipefail # so those constraints will affect all future 'pip install' calls RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX="true" export RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX -source rapids-init-pip +source ./ci/rapids-init-pip # Download the packages built in the previous step RAPIDS_PY_CUDA_SUFFIX="$(rapids-wheel-ctk-name-gen "${RAPIDS_CUDA_VERSION}")" diff --git a/ci/test_wheel_cuopt_server.sh b/ci/test_wheel_cuopt_server.sh index 652638878..a998d3234 100755 --- a/ci/test_wheel_cuopt_server.sh +++ b/ci/test_wheel_cuopt_server.sh @@ -7,7 +7,7 @@ set -eou pipefail RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX="true" export RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX -source rapids-init-pip +source ./ci/rapids-init-pip # Download the packages built in the previous step RAPIDS_PY_CUDA_SUFFIX="$(rapids-wheel-ctk-name-gen "${RAPIDS_CUDA_VERSION}")" From 1b0188d5738f33578d7f5f85bb5cbba117e7c188 Mon Sep 17 00:00:00 2001 From: James Lamb Date: Thu, 29 Jan 2026 10:46:53 -0600 Subject: [PATCH 03/11] tighten wheel sie limits, other changes --- .github/workflows/pr.yaml | 83 +++++++------------ .pre-commit-config.yaml | 14 ++-- ci/build_wheel.sh | 4 +- ci/build_wheel_cuopt.sh | 2 +- ci/build_wheel_cuopt_mps_parser.sh | 2 +- ci/build_wheel_cuopt_server.sh | 2 +- ci/build_wheel_cuopt_sh_client.sh | 2 +- ci/build_wheel_libcuopt.sh | 2 +- ci/rapids-init-pip | 18 ---- ci/test_self_hosted_service.sh | 2 +- ci/test_wheel_cuopt.sh | 2 +- ci/test_wheel_cuopt_server.sh | 2 +- ci/validate_wheel.sh | 27 +++++- .../cuopt/linear_programming/pyproject.toml | 4 +- python/cuopt/pyproject.toml | 4 +- python/cuopt_self_hosted/pyproject.toml | 4 +- python/cuopt_server/pyproject.toml | 4 +- python/libcuopt/pyproject.toml | 9 +- 18 files changed, 86 insertions(+), 101 deletions(-) delete mode 100644 ci/rapids-init-pip diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index b8bb870b7..d8b6edfb9 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -106,66 +106,47 @@ jobs: uses: rapidsai/shared-workflows/.github/workflows/changed-files.yaml@main with: files_yaml: | - test_cpp: + test_python_wheels: - '**' - '!CONTRIBUTING.md' - '!README.md' - - '!ci/release/update-version-cuopt.sh' - - '!ci/release/update-version-rapids.sh' + - '!.ai/**' + - '!.coderabbit.yaml' + - '!.github/AGENTS.md' + - '!.github/CODE_OF_CONDUCT.md' + - '!.github/CODEOWNERS' + - '!.github/ISSUE_TEMPLATE/**' + - '!.github/PULL_REQUEST_TEMPLATE.md' + - '!.github/SECURITY.md' + - '!.github/.ai/**' + - '!.github/.coderabbit_review_guid.md' + - '!.github/agents/**' + - '!.github/copy-pr-bot.yaml' + - '!.github/ops-bot.yaml' + - '!.pre-commit-config.yaml' + - '!ci/build_cpp.sh' + - '!ci/build_docs.sh' + - '!ci/build_python.sh' + - '!ci/check_style.sh' + - '!ci/release/**' + - '!ci/run_ctests.sh' + - '!ci/test_python.sh' + - '!conda/**' + - '!container-builder/**' - '!docs/**' + - '!helmchart/**' - '!img/**' + - '!ngc/**' - '!notebooks/**' + - '!omniverse/**' - '!python/**' - '!readme_pages/**' - - '!container-builder/**' - - '!helm-chart/**' - - '!ngc/**' - - '!omniverse/**' - '!regression/**' - '!resources/**' + - '!sonar-project.properties' + - '!sonarqube/**' - '!ucf/**' - '!utilities/**' - test_notebooks: - - '**' - - '!CONTRIBUTING.md' - - '!README.md' - - '!ci/release/update-version-cuopt.sh' - - '!ci/release/update-version-rapids.sh' - - '!docs/**' - - '!python/nvcf_client/**' - test_python: - - '**' - - '!CONTRIBUTING.md' - - '!README.md' - - '!ci/release/update-version-cuopt.sh' - - '!ci/release/update-version-rapids.sh' - - '!docs/**' - - '!img/**' - - '!notebooks/**' - - '!python/nvcf_client/**' - test_python_cuopt: - - '**' - - '!CONTRIBUTING.md' - - '!README.md' - - '!ci/release/update-version-cuopt.sh' - - '!ci/release/update-version-rapids.sh' - - '!docs/**' - - '!img/**' - - '!notebooks/**' - - '!python/cuopt_self_hosted/**' - - '!python/cuopt_server/**' - - '!python/nvcf_client/**' - test_python_cuopt_server: - - '**' - - '!CONTRIBUTING.md' - - '!README.md' - - '!ci/release/update-version-cuopt.sh' - - '!ci/release/update-version-rapids.sh' - - '!docs/**' - - '!img/**' - - '!notebooks/**' - - '!python/cuopt_self_hosted/**' - - '!python/nvcf_client/**' checks: secrets: inherit uses: rapidsai/shared-workflows/.github/workflows/checks.yaml@main @@ -207,7 +188,7 @@ jobs: wheel-tests-cuopt: needs: [wheel-build-cuopt, wheel-build-cuopt-mps-parser, wheel-build-cuopt-sh-client, changed-files, compute-matrix-filters] uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main - #if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_cuopt + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels with: build_type: pull-request script: ci/test_wheel_cuopt.sh @@ -247,7 +228,7 @@ jobs: wheel-tests-cuopt-server: needs: [wheel-build-cuopt, wheel-build-cuopt-server, changed-files, compute-matrix-filters] uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main - #if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_cuopt_server + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels with: build_type: pull-request script: ci/test_wheel_cuopt_server.sh @@ -263,7 +244,7 @@ jobs: 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 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels with: build_type: pull-request script: ci/test_self_hosted_service.sh diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e903ea70f..8571bb87a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -54,7 +54,7 @@ repos: - id: shellcheck args: ["--severity=warning"] - repo: https://github.com/rapidsai/pre-commit-hooks - rev: v1.3.1 + rev: v1.3.3 hooks: - id: verify-copyright args: [--fix, --spdx] @@ -76,12 +76,12 @@ repos: (?x)^( ^cpp/tests/utilities/cxxopts.hpp ) - # - id: verify-pyproject-license - # # ignore the top-level pyproject.toml, which doesn't - # # have or need a [project] table - # exclude: | - # (?x) - # ^pyproject[.]toml$ + - id: verify-pyproject-license + # ignore the top-level pyproject.toml, which doesn't + # have or need a [project] table + exclude: | + (?x) + ^pyproject[.]toml$ - repo: local hooks: - id: update-versions diff --git a/ci/build_wheel.sh b/ci/build_wheel.sh index 63501f32e..7b1f772c3 100755 --- a/ci/build_wheel.sh +++ b/ci/build_wheel.sh @@ -12,7 +12,7 @@ source rapids-configure-sccache source rapids-date-string RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX="true" export RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX -source ./ci/rapids-init-pip +source rapids-init-pip # Update the version to accomdate nightly and release changes for the wheel name rapids-generate-version > ./VERSION @@ -34,7 +34,7 @@ RAPIDS_PIP_WHEEL_ARGS=( # # Passing '--build-constraint' and '--no-build-isolation` together results in an error from 'pip', # but we want to keep environment variable PIP_CONSTRAINT set unconditionally. -# PIP_NO_BUILD_ISOLATION=0 means "add --no-build-isolation" (ref: https://github.com/pypa/pip/issues/573 +# PIP_NO_BUILD_ISOLATION=0 means "add --no-build-isolation" (ref: https://github.com/pypa/pip/issues/5735) if [[ "${PIP_NO_BUILD_ISOLATION:-}" != "0" ]]; then RAPIDS_PIP_WHEEL_ARGS+=(--build-constraint="${PIP_CONSTRAINT}") fi diff --git a/ci/build_wheel_cuopt.sh b/ci/build_wheel_cuopt.sh index 9139bcf48..83f715172 100755 --- a/ci/build_wheel_cuopt.sh +++ b/ci/build_wheel_cuopt.sh @@ -8,7 +8,7 @@ set -euo pipefail RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX="true" export RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX -source ./ci/rapids-init-pip +source rapids-init-pip # Install rockylinux repo if command -v dnf &> /dev/null; then diff --git a/ci/build_wheel_cuopt_mps_parser.sh b/ci/build_wheel_cuopt_mps_parser.sh index 202511c9a..9c7037368 100755 --- a/ci/build_wheel_cuopt_mps_parser.sh +++ b/ci/build_wheel_cuopt_mps_parser.sh @@ -8,7 +8,7 @@ set -euo pipefail RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX="true" export RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX -source ./ci/rapids-init-pip +source rapids-init-pip package_dir="python/cuopt/cuopt/linear_programming" diff --git a/ci/build_wheel_cuopt_server.sh b/ci/build_wheel_cuopt_server.sh index 4a5b77799..4193cde43 100755 --- a/ci/build_wheel_cuopt_server.sh +++ b/ci/build_wheel_cuopt_server.sh @@ -7,7 +7,7 @@ set -euo pipefail RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX="true" export RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX -source ./ci/rapids-init-pip +source rapids-init-pip package_dir="python/cuopt_server" diff --git a/ci/build_wheel_cuopt_sh_client.sh b/ci/build_wheel_cuopt_sh_client.sh index 236c6921a..0e52ed434 100755 --- a/ci/build_wheel_cuopt_sh_client.sh +++ b/ci/build_wheel_cuopt_sh_client.sh @@ -7,7 +7,7 @@ set -euo pipefail RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX="true" export RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX -source ./ci/rapids-init-pip +source rapids-init-pip package_dir="python/cuopt_self_hosted" diff --git a/ci/build_wheel_libcuopt.sh b/ci/build_wheel_libcuopt.sh index b38bc4663..164d025e9 100755 --- a/ci/build_wheel_libcuopt.sh +++ b/ci/build_wheel_libcuopt.sh @@ -6,7 +6,7 @@ set -euo pipefail RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX="true" export RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX -source ./ci/rapids-init-pip +source rapids-init-pip package_name="libcuopt" package_dir="python/libcuopt" diff --git a/ci/rapids-init-pip b/ci/rapids-init-pip deleted file mode 100644 index 60f26673f..000000000 --- a/ci/rapids-init-pip +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash - -PIP_CONSTRAINT="${PIP_CONSTRAINT:-$(mktemp -d)/constraints.txt}" -touch "${PIP_CONSTRAINT}" -export PIP_CONSTRAINT - -# TODO: remove when https://github.com/rapidsai/ci-imgs/pull/357 is merged -# -# Patching out pypi.nvidia.com in this script allows a slow migration across RAPIDS -# without ever breaking CI (unlike just removing this in CI images and seeing what breaks). -if [[ "${RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX}" == "true" ]]; then - rapids-logger "patching pypi.nvidia.com out of pip.conf" - sed -i '/pypi\.nvidia\.com/d' /etc/xdg/pip/pip.conf - rapids-logger "updated 'pip.conf':" - rapids-logger "" - cat /etc/xdg/pip/pip.conf - rapids-logger "" -fi diff --git a/ci/test_self_hosted_service.sh b/ci/test_self_hosted_service.sh index a5931a236..6b126b809 100755 --- a/ci/test_self_hosted_service.sh +++ b/ci/test_self_hosted_service.sh @@ -7,7 +7,7 @@ set -euo pipefail RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX="true" export RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX -source ./ci/rapids-init-pip +source rapids-init-pip # Download the cuopt built in the previous step RAPIDS_PY_CUDA_SUFFIX="$(rapids-wheel-ctk-name-gen "${RAPIDS_CUDA_VERSION}")" diff --git a/ci/test_wheel_cuopt.sh b/ci/test_wheel_cuopt.sh index 15d3a9433..22392c7e8 100755 --- a/ci/test_wheel_cuopt.sh +++ b/ci/test_wheel_cuopt.sh @@ -9,7 +9,7 @@ set -euo pipefail # so those constraints will affect all future 'pip install' calls RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX="true" export RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX -source ./ci/rapids-init-pip +source rapids-init-pip # Download the packages built in the previous step RAPIDS_PY_CUDA_SUFFIX="$(rapids-wheel-ctk-name-gen "${RAPIDS_CUDA_VERSION}")" diff --git a/ci/test_wheel_cuopt_server.sh b/ci/test_wheel_cuopt_server.sh index a998d3234..652638878 100755 --- a/ci/test_wheel_cuopt_server.sh +++ b/ci/test_wheel_cuopt_server.sh @@ -7,7 +7,7 @@ set -eou pipefail RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX="true" export RAPIDS_INIT_PIP_REMOVE_NVIDIA_INDEX -source ./ci/rapids-init-pip +source rapids-init-pip # Download the packages built in the previous step RAPIDS_PY_CUDA_SUFFIX="$(rapids-wheel-ctk-name-gen "${RAPIDS_CUDA_VERSION}")" diff --git a/ci/validate_wheel.sh b/ci/validate_wheel.sh index 4b84e1038..3c17934a0 100755 --- a/ci/validate_wheel.sh +++ b/ci/validate_wheel.sh @@ -1,6 +1,6 @@ #!/bin/bash -# SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 set -euo pipefail @@ -12,8 +12,31 @@ cd "${package_dir}" rapids-logger "validate packages with 'pydistcheck'" +PYDISTCHECK_ARGS=( + --inspect +) + +# PyPI hard limit is 1GiB, but try to keep these as small as possible +if [[ "${package_dir}" == "python/libcuopt" ]]; then + if [[ "${RAPIDS_CUDA_MAJOR}" == "12" ]]; then + PYDISTCHECK_ARGS+=( + --max-allowed-size-compressed '525Mi' + ) + else + PYDISTCHECK_ARGS+=( + --max-allowed-size-compressed '420Mi' + ) + fi +elif [[ "${package_dir}" != "python/cuopt" ]] && \ + [[ "${package_dir}" != "python/cuopt/cuopt/linear_programming" ]] && \ + [[ "${package_dir}" != "python/cuopt_server" ]] && \ + [[ "${package_dir}" != "python/cuopt_self_hosted" ]]; then + rapids-echo-stderr "unrecognized package_dir: '${package_dir}'" + exit 1 +fi + pydistcheck \ - --inspect \ + "${PYDISTCHECK_ARGS[@]}" \ "$(echo "${wheel_dir_relative_path}"/*.whl)" rapids-logger "validate packages with 'twine'" diff --git a/python/cuopt/cuopt/linear_programming/pyproject.toml b/python/cuopt/cuopt/linear_programming/pyproject.toml index 7407b65aa..1be6eb27c 100644 --- a/python/cuopt/cuopt/linear_programming/pyproject.toml +++ b/python/cuopt/cuopt/linear_programming/pyproject.toml @@ -60,8 +60,8 @@ select = [ "distro-too-large-compressed", ] -# PyPI limit is 100 MiB, fail CI before we get too close to that -max_allowed_size_compressed = '75M' +# PyPI hard limit is 1GiB, but try to keep this as small as possible +max_allowed_size_compressed = '15Mi' [tool.rapids-build-backend] build-backend = "scikit_build_core.build" diff --git a/python/cuopt/pyproject.toml b/python/cuopt/pyproject.toml index 74f1e440f..ce902a9b9 100644 --- a/python/cuopt/pyproject.toml +++ b/python/cuopt/pyproject.toml @@ -74,8 +74,8 @@ select = [ "distro-too-large-compressed", ] -# detect when package size grows significantly -max_allowed_size_compressed = '100M' +# PyPI hard limit is 1GiB, but try to keep this as small as possible +max_allowed_size_compressed = '15Mi' [tool.pytest.ini_options] testpaths = ["cuopt/tests"] diff --git a/python/cuopt_self_hosted/pyproject.toml b/python/cuopt_self_hosted/pyproject.toml index 5812cde5f..e3162d692 100644 --- a/python/cuopt_self_hosted/pyproject.toml +++ b/python/cuopt_self_hosted/pyproject.toml @@ -79,8 +79,8 @@ select = [ "distro-too-large-compressed", ] -# PyPI limit is 100 MiB, fail CI before we get too close to that -max_allowed_size_compressed = '75M' +# PyPI hard limit is 1GiB, but try to keep this as small as possible +max_allowed_size_compressed = '15Mi' [tool.pytest.ini_options] testpaths = ["tests"] diff --git a/python/cuopt_server/pyproject.toml b/python/cuopt_server/pyproject.toml index 09b7155ed..33ae814dc 100644 --- a/python/cuopt_server/pyproject.toml +++ b/python/cuopt_server/pyproject.toml @@ -88,8 +88,8 @@ select = [ "distro-too-large-compressed", ] -# PyPI limit is 100 MiB, fail CI before we get too close to that -max_allowed_size_compressed = '75M' +# PyPI hard limit is 1GiB, but try to keep this as small as possible +max_allowed_size_compressed = '15Mi' [tool.pytest.ini_options] testpaths = ["cuopt_server/tests"] diff --git a/python/libcuopt/pyproject.toml b/python/libcuopt/pyproject.toml index 78e2cf418..feb53ac13 100644 --- a/python/libcuopt/pyproject.toml +++ b/python/libcuopt/pyproject.toml @@ -49,15 +49,14 @@ Source = "https://github.com/nvidia/cuopt" [project.entry-points."cmake.prefix"] libcuopt = "libcuopt" +[project.scripts] +cuopt_cli = "libcuopt._cli_wrapper:main" + [tool.pydistcheck] select = [ + # note: max_allowed_size_compressed is set as a command-line arg "distro-too-large-compressed", ] -max_allowed_size_compressed = '620M' - -[project.scripts] -cuopt_cli = "libcuopt._cli_wrapper:main" - [tool.scikit-build] build-dir = "build/{wheel_tag}" From 9110bcd5fdcf78ef3ac6e1d548d420d177b7d93c Mon Sep 17 00:00:00 2001 From: James Lamb Date: Thu, 29 Jan 2026 11:02:57 -0600 Subject: [PATCH 04/11] update changed-files groups --- .github/workflows/pr.yaml | 173 +++++++++++++++++++++++++++++++++++++- 1 file changed, 169 insertions(+), 4 deletions(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index d8b6edfb9..1bc53def6 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -20,6 +20,11 @@ jobs: - compute-matrix-filters - 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 @@ -106,6 +111,110 @@ jobs: uses: rapidsai/shared-workflows/.github/workflows/changed-files.yaml@main with: files_yaml: | + build_docs: + - '**' + - '!.ai/**' + - '!.coderabbit.yaml' + - '!.github/AGENTS.md' + - '!.github/CODE_OF_CONDUCT.md' + - '!.github/CODEOWNERS' + - '!.github/ISSUE_TEMPLATE/**' + - '!.github/PULL_REQUEST_TEMPLATE.md' + - '!.github/SECURITY.md' + - '!.github/.ai/**' + - '!.github/.coderabbit_review_guid.md' + - '!.github/agents/**' + - '!.github/copy-pr-bot.yaml' + - '!.github/ops-bot.yaml' + - '!.pre-commit-config.yaml' + - '!ci/build_wheel*.sh' + - '!ci/check_style.sh' + - '!ci/release/**' + - '!ci/run_ctests.sh' + - '!ci/run_*.pytests.sh' + - '!ci/test_cpp*.sh' + - '!ci/test_notebooks.sh' + - '!ci/test_python.sh' + - '!ci/test_self_hosted_service.sh' + - '!ci/test_wheel*.sh' + - '!container-builder/**' + - '!helmchart/**' + - '!ngc/**' + - '!sonar-project.properties' + - '!sonarqube/**' + - '!ucf/**' + - '!utilities/**' + test_cpp: + - '**' + - '!CONTRIBUTING.md' + - '!README.md' + - '!.ai/**' + - '!.coderabbit.yaml' + - '!.github/AGENTS.md' + - '!.github/CODE_OF_CONDUCT.md' + - '!.github/CODEOWNERS' + - '!.github/ISSUE_TEMPLATE/**' + - '!.github/PULL_REQUEST_TEMPLATE.md' + - '!.github/SECURITY.md' + - '!.github/.ai/**' + - '!.github/.coderabbit_review_guid.md' + - '!.github/agents/**' + - '!.github/copy-pr-bot.yaml' + - '!.github/ops-bot.yaml' + - '!.pre-commit-config.yaml' + - '!ci/build_docs.sh' + - '!ci/build_python.sh' + - '!ci/build_wheel*.sh' + - '!ci/check_style.sh' + - '!ci/release/**' + - '!ci/test_python.sh' + - '!ci/test_self_hosted_service.sh' + - '!ci/test_wheel*.sh' + - '!container-builder/**' + - '!docs/**' + - '!helmchart/**' + - '!img/**' + - '!ngc/**' + - '!notebooks/**' + - '!python/**' + - '!sonar-project.properties' + - '!sonarqube/**' + - '!ucf/**' + - '!utilities/**' + test_python_conda: + - '**' + - '!CONTRIBUTING.md' + - '!README.md' + - '!.ai/**' + - '!.coderabbit.yaml' + - '!.github/AGENTS.md' + - '!.github/CODE_OF_CONDUCT.md' + - '!.github/CODEOWNERS' + - '!.github/ISSUE_TEMPLATE/**' + - '!.github/PULL_REQUEST_TEMPLATE.md' + - '!.github/SECURITY.md' + - '!.github/.ai/**' + - '!.github/.coderabbit_review_guid.md' + - '!.github/agents/**' + - '!.github/copy-pr-bot.yaml' + - '!.github/ops-bot.yaml' + - '!.pre-commit-config.yaml' + - '!ci/build_docs.sh' + - '!ci/build_wheel*.sh' + - '!ci/check_style.sh' + - '!ci/release/**' + - '!ci/test_self_hosted_service.sh' + - '!ci/test_wheel*.sh' + - '!container-builder/**' + - '!docs/**' + - '!helmchart/**' + - '!img/**' + - '!ngc/**' + - '!notebooks/**' + - '!sonar-project.properties' + - '!sonarqube/**' + - '!ucf/**' + - '!utilities/**' test_python_wheels: - '**' - '!CONTRIBUTING.md' @@ -138,11 +247,7 @@ jobs: - '!img/**' - '!ngc/**' - '!notebooks/**' - - '!omniverse/**' - '!python/**' - - '!readme_pages/**' - - '!regression/**' - - '!resources/**' - '!sonar-project.properties' - '!sonarqube/**' - '!ucf/**' @@ -152,6 +257,66 @@ jobs: uses: rapidsai/shared-workflows/.github/workflows/checks.yaml@main with: enable_check_generated_files: false + conda-cpp-build: + needs: [checks, compute-matrix-filters] + secrets: inherit + uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@main + with: + build_type: pull-request + script: ci/build_cpp.sh + matrix_filter: ${{ needs.compute-matrix-filters.outputs.conda_lean_filter }} + conda-cpp-tests: + needs: [conda-cpp-build, changed-files, compute-matrix-filters] + uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-tests.yaml@main + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp + with: + build_type: pull-request + script: ci/test_cpp.sh + matrix_filter: ${{ needs.compute-matrix-filters.outputs.conda_test_filter }} + secrets: + script-env-secret-1-key: CUOPT_DATASET_S3_URI + script-env-secret-1-value: ${{ secrets.CUOPT_DATASET_S3_URI }} + script-env-secret-2-key: CUOPT_AWS_ACCESS_KEY_ID + script-env-secret-2-value: ${{ secrets.CUOPT_AWS_ACCESS_KEY_ID }} + script-env-secret-3-key: CUOPT_AWS_SECRET_ACCESS_KEY + script-env-secret-3-value: ${{ secrets.CUOPT_AWS_SECRET_ACCESS_KEY }} + conda-python-build: + needs: [conda-cpp-build, compute-matrix-filters] + secrets: inherit + uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@main + with: + build_type: pull-request + script: ci/build_python.sh + matrix_filter: ${{ needs.compute-matrix-filters.outputs.conda_test_filter }} + conda-python-tests: + needs: [conda-python-build, changed-files, compute-matrix-filters] + uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@main + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda + with: + run_codecov: false + build_type: pull-request + script: ci/test_python.sh + matrix_filter: ${{ needs.compute-matrix-filters.outputs.conda_test_filter }} + secrets: + script-env-secret-1-key: CUOPT_DATASET_S3_URI + script-env-secret-1-value: ${{ secrets.CUOPT_DATASET_S3_URI }} + script-env-secret-2-key: CUOPT_AWS_ACCESS_KEY_ID + script-env-secret-2-value: ${{ secrets.CUOPT_AWS_ACCESS_KEY_ID }} + script-env-secret-3-key: CUOPT_AWS_SECRET_ACCESS_KEY + script-env-secret-3-value: ${{ secrets.CUOPT_AWS_SECRET_ACCESS_KEY }} + docs-build: + needs: [conda-python-build, changed-files] + secrets: inherit + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main + if: fromJSON(needs.changed-files.outputs.changed_file_groups).build_docs + 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:26.04-latest" + script: "ci/build_docs.sh" wheel-build-cuopt-mps-parser: needs: compute-matrix-filters secrets: inherit From 8571467173228eee79e30ffa946d1aa4bca7af62 Mon Sep 17 00:00:00 2001 From: James Lamb Date: Thu, 29 Jan 2026 21:53:24 -0600 Subject: [PATCH 05/11] fix script --- ci/validate_wheel.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ci/validate_wheel.sh b/ci/validate_wheel.sh index 3c17934a0..6ec79d085 100755 --- a/ci/validate_wheel.sh +++ b/ci/validate_wheel.sh @@ -8,6 +8,8 @@ set -euo pipefail package_dir=$1 wheel_dir_relative_path=$2 +RAPIDS_CUDA_MAJOR="${RAPIDS_CUDA_VERSION%%.*}" + cd "${package_dir}" rapids-logger "validate packages with 'pydistcheck'" From 9a7902d3bab4a611a6515755546f03ba7d4d146a Mon Sep 17 00:00:00 2001 From: James Lamb Date: Fri, 30 Jan 2026 09:17:10 -0600 Subject: [PATCH 06/11] do not skip Python wheels tests on Python code changes, yikes --- .github/workflows/pr.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 76ee1d547..a330f8d7a 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -247,7 +247,6 @@ jobs: - '!img/**' - '!ngc/**' - '!notebooks/**' - - '!python/**' - '!sonar-project.properties' - '!sonarqube/**' - '!ucf/**' From 0726dec6e53611603ad094267e2aed5f834b506c Mon Sep 17 00:00:00 2001 From: James Lamb Date: Fri, 30 Jan 2026 09:32:28 -0600 Subject: [PATCH 07/11] remove docs/ from test_python_wheels, fix typos --- .github/workflows/pr.yaml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index a330f8d7a..da1b2b0dc 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -122,7 +122,7 @@ jobs: - '!.github/PULL_REQUEST_TEMPLATE.md' - '!.github/SECURITY.md' - '!.github/.ai/**' - - '!.github/.coderabbit_review_guid.md' + - '!.github/.coderabbit_review_guide.md' - '!.github/agents/**' - '!.github/copy-pr-bot.yaml' - '!.github/ops-bot.yaml' @@ -157,7 +157,7 @@ jobs: - '!.github/PULL_REQUEST_TEMPLATE.md' - '!.github/SECURITY.md' - '!.github/.ai/**' - - '!.github/.coderabbit_review_guid.md' + - '!.github/.coderabbit_review_guide.md' - '!.github/agents/**' - '!.github/copy-pr-bot.yaml' - '!.github/ops-bot.yaml' @@ -194,7 +194,7 @@ jobs: - '!.github/PULL_REQUEST_TEMPLATE.md' - '!.github/SECURITY.md' - '!.github/.ai/**' - - '!.github/.coderabbit_review_guid.md' + - '!.github/.coderabbit_review_guide.md' - '!.github/agents/**' - '!.github/copy-pr-bot.yaml' - '!.github/ops-bot.yaml' @@ -228,7 +228,7 @@ jobs: - '!.github/PULL_REQUEST_TEMPLATE.md' - '!.github/SECURITY.md' - '!.github/.ai/**' - - '!.github/.coderabbit_review_guid.md' + - '!.github/.coderabbit_review_guide.md' - '!.github/agents/**' - '!.github/copy-pr-bot.yaml' - '!.github/ops-bot.yaml' @@ -242,7 +242,6 @@ jobs: - '!ci/test_python.sh' - '!conda/**' - '!container-builder/**' - - '!docs/**' - '!helmchart/**' - '!img/**' - '!ngc/**' From 10f33f0e3b330462f2cee6e9be2791d67ea82bac Mon Sep 17 00:00:00 2001 From: James Lamb Date: Fri, 30 Jan 2026 13:40:48 -0600 Subject: [PATCH 08/11] loosen CUDA 13 threshold --- ci/validate_wheel.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/validate_wheel.sh b/ci/validate_wheel.sh index 6ec79d085..7858b98c7 100755 --- a/ci/validate_wheel.sh +++ b/ci/validate_wheel.sh @@ -26,7 +26,7 @@ if [[ "${package_dir}" == "python/libcuopt" ]]; then ) else PYDISTCHECK_ARGS+=( - --max-allowed-size-compressed '420Mi' + --max-allowed-size-compressed '450Mi' ) fi elif [[ "${package_dir}" != "python/cuopt" ]] && \ From 15d911f5fb5a4f9f6e78d833dbb4a815b7d227e6 Mon Sep 17 00:00:00 2001 From: James Lamb Date: Fri, 30 Jan 2026 15:24:30 -0600 Subject: [PATCH 09/11] loosen libcuopt CUDA 13 limit even more --- ci/validate_wheel.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/validate_wheel.sh b/ci/validate_wheel.sh index 7858b98c7..1026470a5 100755 --- a/ci/validate_wheel.sh +++ b/ci/validate_wheel.sh @@ -26,7 +26,7 @@ if [[ "${package_dir}" == "python/libcuopt" ]]; then ) else PYDISTCHECK_ARGS+=( - --max-allowed-size-compressed '450Mi' + --max-allowed-size-compressed '475Mi' ) fi elif [[ "${package_dir}" != "python/cuopt" ]] && \ From 7ac700fc4f238b87264b066b6dbfe1798a443ae0 Mon Sep 17 00:00:00 2001 From: James Lamb Date: Fri, 30 Jan 2026 15:45:26 -0600 Subject: [PATCH 10/11] CUDA 12 wheels are bigger now too --- ci/validate_wheel.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/validate_wheel.sh b/ci/validate_wheel.sh index 1026470a5..2e337f29c 100755 --- a/ci/validate_wheel.sh +++ b/ci/validate_wheel.sh @@ -22,7 +22,7 @@ PYDISTCHECK_ARGS=( if [[ "${package_dir}" == "python/libcuopt" ]]; then if [[ "${RAPIDS_CUDA_MAJOR}" == "12" ]]; then PYDISTCHECK_ARGS+=( - --max-allowed-size-compressed '525Mi' + --max-allowed-size-compressed '625Mi' ) else PYDISTCHECK_ARGS+=( From 2c8f983331e7cbefed576b3f91d17cff5717e3e4 Mon Sep 17 00:00:00 2001 From: James Lamb Date: Fri, 30 Jan 2026 16:33:23 -0600 Subject: [PATCH 11/11] cuopt got larger too --- python/cuopt/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/cuopt/pyproject.toml b/python/cuopt/pyproject.toml index 2c2be591b..44734577c 100644 --- a/python/cuopt/pyproject.toml +++ b/python/cuopt/pyproject.toml @@ -75,7 +75,7 @@ select = [ ] # PyPI hard limit is 1GiB, but try to keep this as small as possible -max_allowed_size_compressed = '15Mi' +max_allowed_size_compressed = '55Mi' [tool.pytest.ini_options] testpaths = ["cuopt/tests"]