From 2a6cbab80cb4055126ad71adfea6b4bc0bd1c4dc Mon Sep 17 00:00:00 2001 From: James Lamb Date: Thu, 26 Feb 2026 09:53:51 -0600 Subject: [PATCH 01/13] wheels: start testing oldest supported CTK in CI --- .github/workflows/pr.yaml | 466 +------------------------------------- ci/test_wheel_cuvs.sh | 12 +- dependencies.yaml | 15 ++ 3 files changed, 27 insertions(+), 466 deletions(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 8007b5d6ba..af26989ce7 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -9,469 +9,16 @@ concurrency: jobs: pr-builder: needs: - - check-nightly-ci - - changed-files - - checks - - conda-cpp-build - - conda-cpp-tests - - conda-cpp-checks - - conda-python-build - - conda-python-tests - - rocky8-clib-standalone-build - - rocky8-clib-tests - - conda-java-build-and-tests - - rust-build - - go-build - - docs-build - wheel-build-libcuvs - wheel-build-cuvs - wheel-tests-cuvs - devcontainer - - telemetry-setup secrets: inherit uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@main if: always() with: needs: ${{ toJSON(needs) }} - telemetry-setup: - continue-on-error: true - runs-on: ubuntu-latest - env: - OTEL_SERVICE_NAME: 'pr-cuvs' - steps: - - name: Telemetry setup - if: ${{ vars.TELEMETRY_ENABLED == 'true' }} - uses: rapidsai/shared-actions/telemetry-dispatch-stash-base-env-vars@main - check-nightly-ci: - runs-on: ubuntu-latest - permissions: - actions: read - id-token: write - env: - GH_TOKEN: ${{ github.token }} - steps: - - name: Get PR Info - id: get-pr-info - uses: nv-gha-runners/get-pr-info@main - - name: Check if nightly CI is passing - uses: rapidsai/shared-actions/check_nightly_success/dispatch@main - with: - repo: ${{ github.repository }} - target-branch: ${{ fromJSON(steps.get-pr-info.outputs.pr-info).base.ref }} - max-days-without-success: 30 - changed-files: - needs: telemetry-setup - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/changed-files.yaml@main - with: - files_yaml: | - build_docs: - - '**' - - '!.devcontainer/**' - - '!.github/CODEOWNERS' - - '!.github/ISSUE_TEMPLATE/**' - - '!.github/PULL_REQUEST_TEMPLATE.md' - - '!.github/copy-pr-bot.yaml' - - '!.github/labeler.yml' - - '!.github/ops-bot.yaml' - - '!.github/release.yml' - - '!.github/workflows/publish-rust.yaml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!.shellcheckrc' - - '!Dockerfile' - - '!ci/build_wheel*.sh' - - '!ci/check_style.sh' - - '!ci/release/update-version.sh' - - '!ci/run*.sh' - - '!ci/test*.sh' - - '!ci/validate_wheel.sh' - - '!thirdparty/LICENSES/**' - test_cpp: - - '**' - - '!.devcontainer/**' - - '!.github/CODEOWNERS' - - '!.github/ISSUE_TEMPLATE/**' - - '!.github/PULL_REQUEST_TEMPLATE.md' - - '!.github/copy-pr-bot.yaml' - - '!.github/labeler.yml' - - '!.github/ops-bot.yaml' - - '!.github/release.yml' - - '!.github/workflows/publish-rust.yaml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!.shellcheckrc' - - '!Dockerfile' - - '!README.md' - - '!ci/build_docs.sh' - - '!ci/build_python.sh' - - '!ci/build_wheel*.sh' - - '!ci/check_style.sh' - - '!ci/release/update-version.sh' - - '!ci/run_cuvs_pytests.sh' - - '!ci/test_java.sh' - - '!ci/test_python.sh' - - '!ci/test_wheel_cuvs.sh' - - '!ci/validate_wheel.sh' - - '!docs/**' - - '!go/**' - - '!img/**' - - '!java/**' - - '!notebooks/**' - - '!python/**' - - '!rust/**' - - '!thirdparty/LICENSES/**' - test_java: - - '**' - - '!.devcontainer/**' - - '!.github/CODEOWNERS' - - '!.github/ISSUE_TEMPLATE/**' - - '!.github/PULL_REQUEST_TEMPLATE.md' - - '!.github/copy-pr-bot.yaml' - - '!.github/labeler.yml' - - '!.github/ops-bot.yaml' - - '!.github/release.yml' - - '!.github/workflows/publish-rust.yaml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!.shellcheckrc' - - '!ci/build_docs.sh' - - '!ci/build_go.sh' - - '!ci/build_python.sh' - - '!ci/build_rust.sh' - - '!ci/build_wheel*.sh' - - '!ci/checkstyle.sh' - - '!ci/run_cuvs_pytests.sh' - - '!ci/test_cpp.sh' - - '!ci/test_python.sh' - - '!ci/test_wheel_cuvs.sh' - - '!ci/validate_wheel.sh' - - '!Dockerfile' - - '!docs/**' - - '!img/**' - - '!notebooks/**' - - '!python/**' - - '!rust/**' - - '!go/**' - - '!thirdparty/LICENSES/**' - test_python_conda: - - '**' - - '!.devcontainer/**' - - '!.github/CODEOWNERS' - - '!.github/ISSUE_TEMPLATE/**' - - '!.github/PULL_REQUEST_TEMPLATE.md' - - '!.github/copy-pr-bot.yaml' - - '!.github/labeler.yml' - - '!.github/ops-bot.yaml' - - '!.github/release.yml' - - '!.github/workflows/publish-rust.yaml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!.shellcheckrc' - - '!ci/build_go.sh' - - '!ci/build_java.sh' - - '!ci/build_rust.sh' - - '!ci/check_style.sh' - - '!ci/release/update-version.sh' - - '!ci/run_ctests.sh' - - '!ci/test_cpp.sh' - - '!ci/test_java.sh' - - '!ci/test_standalone_c.sh' - - '!ci/test_wheel_cuvs.sh' - - '!ci/validate_wheel.sh' - - '!cpp/.clang-format' - - '!cpp/.clang-tidy' - - '!cpp/doxygen/**' - - '!Dockerfile' - - '!README.md' - - '!docs/**' - - '!go/**' - - '!img/**' - - '!java/**' - - '!notebooks/**' - - '!rust/**' - - '!thirdparty/LICENSES/**' - test_python_wheels: - - '**' - - '!.devcontainer/**' - - '!.github/CODEOWNERS' - - '!.github/ISSUE_TEMPLATE/**' - - '!.github/PULL_REQUEST_TEMPLATE.md' - - '!.github/copy-pr-bot.yaml' - - '!.github/labeler.yml' - - '!.github/ops-bot.yaml' - - '!.github/release.yml' - - '!.github/workflows/publish-rust.yaml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!.shellcheckrc' - - '!ci/build_cpp.sh' - - '!ci/build_docs.sh' - - '!ci/build_go.sh' - - '!ci/build_java.sh' - - '!ci/build_python.sh' - - '!ci/build_rust.sh' - - '!ci/build_standalone_c.sh' - - '!ci/check_style.sh' - - '!ci/release/update-version.sh' - - '!ci/run_ctests.sh' - - '!ci/test_cpp.sh' - - '!ci/test_java.sh' - - '!ci/test_python.sh' - - '!ci/test_standalone_c.sh' - - '!ci/validate_wheel.sh' - - '!Dockerfile' - - '!README.md' - - '!conda/**' - - '!cpp/.clang-format' - - '!cpp/.clang-tidy' - - '!cpp/doxygen/**' - - '!docs/**' - - '!java/**' - - '!go/**' - - '!img/**' - - '!notebooks/**' - - '!rust/**' - - '!thirdparty/LICENSES/**' - test_rust: - - '**' - - '!.devcontainer/**' - - '!.github/CODEOWNERS' - - '!.github/ISSUE_TEMPLATE/**' - - '!.github/PULL_REQUEST_TEMPLATE.md' - - '!.github/copy-pr-bot.yaml' - - '!.github/labeler.yml' - - '!.github/ops-bot.yaml' - - '!.github/release.yml' - - '!.github/workflows/publish-rust.yaml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!.shellcheckrc' - - '!Dockerfile' - - '!README.md' - - '!ci/build_docs.sh' - - '!ci/build_go.sh' - - '!ci/build_java.sh' - - '!ci/build_python.sh' - - '!ci/build_wheel*.sh' - - '!ci/check_style.sh' - - '!ci/release/update-version.sh' - - '!ci/run_ctests.sh' - - '!ci/run_cuvs_pytests.sh' - - '!ci/test_cpp.sh' - - '!ci/test_java.sh' - - '!ci/test_python.sh' - - '!ci/test_wheel_cuvs.sh' - - '!ci/validate_wheel.sh' - - '!docs/**' - - '!go/**' - - '!img/**' - - '!java/**' - - '!notebooks/**' - - '!python/**' - - '!thirdparty/LICENSES/**' - test_go: - - '**' - - '!.devcontainer/**' - - '!.github/CODEOWNERS' - - '!.github/ISSUE_TEMPLATE/**' - - '!.github/PULL_REQUEST_TEMPLATE.md' - - '!.github/copy-pr-bot.yaml' - - '!.github/labeler.yml' - - '!.github/ops-bot.yaml' - - '!.github/release.yml' - - '!.github/workflows/publish-rust.yaml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!.shellcheckrc' - - '!Dockerfile' - - '!README.md' - - '!ci/build_docs.sh' - - '!ci/build_java.sh' - - '!ci/build_python.sh' - - '!ci/build_rust.sh' - - '!ci/build_wheel*.sh' - - '!ci/check_style.sh' - - '!ci/release/update-version.sh' - - '!ci/run_ctests.sh' - - '!ci/run_cuvs_pytests.sh' - - '!ci/test_cpp.sh' - - '!ci/test_java.sh' - - '!ci/test_python.sh' - - '!ci/test_standalone_c.sh' - - '!ci/test_wheel_cuvs.sh' - - '!ci/validate_wheel.sh' - - '!docs/**' - - '!img/**' - - '!java/**' - - '!notebooks/**' - - '!python/**' - - '!rust/**' - - '!thirdparty/LICENSES/**' - checks: - needs: telemetry-setup - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/checks.yaml@main - with: - enable_check_generated_files: false - ignored_pr_jobs: "telemetry-summarize" - conda-cpp-build: - needs: checks - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@main - with: - build_type: pull-request - node_type: cpu16 - 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@main - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp - with: - build_type: pull-request - script: ci/test_cpp.sh - conda-cpp-checks: - needs: conda-cpp-build - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-post-build-checks.yaml@main - with: - build_type: pull-request - symbol_exclusions: (void (thrust::|cub::)) - conda-python-build: - needs: conda-cpp-build - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@main - with: - build_type: pull-request - script: ci/build_python.sh - # Build a conda package for each CUDA x ARCH x minimum supported Python version - matrix_filter: group_by({CUDA_VER, ARCH}) | map(min_by(.PY_VER | split(".") | map(tonumber))) - conda-python-tests: - needs: [conda-python-build, changed-files] - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@main - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda - with: - build_type: pull-request - script: ci/test_python.sh - rocky8-clib-standalone-build: - needs: [checks] - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main - strategy: - fail-fast: false - matrix: - cuda_version: - - &latest_cuda12 '12.9.1' - - &latest_cuda13 '13.1.1' - arch: - - amd64 - - arm64 - with: - build_type: pull-request - arch: "${{matrix.arch}}" - date: ${{ inputs.date }}_c - container_image: "rapidsai/ci-wheel:26.04-cuda${{ matrix.cuda_version }}-rockylinux8-py3.11" - node_type: "cpu16" - requires_license_builder: true - script: "ci/build_standalone_c.sh --build-tests" - artifact-name: "libcuvs_c_${{ matrix.cuda_version }}_${{ matrix.arch }}.tar.gz" - file_to_upload: "libcuvs_c.tar.gz" - sha: ${{ inputs.sha }} - rocky8-clib-tests: - needs: [rocky8-clib-standalone-build, changed-files] - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp - strategy: - fail-fast: false - matrix: - cuda_version: - - *latest_cuda12 - - *latest_cuda13 - arch: - - amd64 - - arm64 - with: - build_type: pull-request - node_type: "gpu-l4-latest-1" - arch: "${{matrix.arch}}" - date: ${{ inputs.date }}_c - container_image: "rapidsai/ci-wheel:26.04-cuda${{ matrix.cuda_version }}-rockylinux8-py3.11" - script: "ci/test_standalone_c.sh libcuvs_c_${{ matrix.cuda_version }}_${{ matrix.arch }}.tar.gz" - sha: ${{ inputs.sha }} - conda-java-build-and-tests: - needs: [conda-cpp-build, changed-files] - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_java || fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp - # Artifacts are not published from these jobs, so it's safe to run for multiple CUDA versions. - # If these jobs start producing artifacts, the names will have to differentiate between CUDA versions. - strategy: - fail-fast: false - matrix: - cuda_version: - - *latest_cuda12 - - *latest_cuda13 - with: - build_type: pull-request - node_type: "gpu-l4-latest-1" - arch: "amd64" - container_image: "rapidsai/ci-conda:26.04-cuda${{ matrix.cuda_version }}-ubuntu24.04-py3.13" - script: "ci/test_java.sh" - artifact-name: "cuvs-java-cuda${{ matrix.cuda_version }}" - file_to_upload: "java/cuvs-java/target/" - rust-build: - needs: [conda-cpp-build, changed-files] - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_rust || fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp - # Artifacts are not published from these jobs, so it's safe to run for multiple CUDA versions. - # If these jobs start producing artifacts, the names will have to differentiate between CUDA versions. - strategy: - fail-fast: false - matrix: - cuda_version: - - *latest_cuda12 - - *latest_cuda13 - with: - build_type: pull-request - node_type: "gpu-l4-latest-1" - arch: "amd64" - container_image: "rapidsai/ci-conda:26.04-cuda${{ matrix.cuda_version }}-ubuntu24.04-py3.13" - script: "ci/build_rust.sh" - go-build: - needs: [conda-cpp-build, changed-files] - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_go || fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp - # Artifacts are not published from these jobs, so it's safe to run for multiple CUDA versions. - # If these jobs start producing artifacts, the names will have to differentiate between CUDA versions. - strategy: - fail-fast: false - matrix: - cuda_version: - - *latest_cuda12 - - *latest_cuda13 - with: - build_type: pull-request - node_type: "gpu-l4-latest-1" - arch: "amd64" - container_image: "rapidsai/ci-conda:26.04-cuda${{ matrix.cuda_version }}-ubuntu24.04-py3.13" - script: "ci/build_go.sh" - 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" - container_image: "rapidsai/ci-conda:26.04-latest" - script: "ci/build_docs.sh" wheel-build-libcuvs: - needs: checks secrets: inherit uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main with: @@ -495,7 +42,7 @@ jobs: # Build a wheel for each CUDA x ARCH x minimum supported Python version matrix_filter: group_by({CUDA_VER, ARCH}) | map(min_by(.PY_VER | split(".") | map(tonumber))) wheel-tests-cuvs: - needs: [wheel-build-cuvs, changed-files] + needs: [wheel-build-cuvs] secrets: inherit uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels @@ -518,14 +65,3 @@ jobs: sccache --zero-stats; build-all -j0 --verbose 2>&1 | tee telemetry-artifacts/build.log; sccache --show-adv-stats | tee telemetry-artifacts/sccache-stats.txt; - telemetry-summarize: - # This job must use a self-hosted runner to record telemetry traces. - runs-on: linux-amd64-cpu4 - needs: pr-builder - if: ${{ vars.TELEMETRY_ENABLED == 'true' && !cancelled() }} - continue-on-error: true - steps: - - name: Telemetry summarize - uses: rapidsai/shared-actions/telemetry-dispatch-summarize@main - env: - GH_TOKEN: ${{ github.token }} diff --git a/ci/test_wheel_cuvs.sh b/ci/test_wheel_cuvs.sh index eae78b4a89..59eb2c2eb9 100755 --- a/ci/test_wheel_cuvs.sh +++ b/ci/test_wheel_cuvs.sh @@ -13,8 +13,18 @@ RAPIDS_PY_CUDA_SUFFIX="$(rapids-wheel-ctk-name-gen "${RAPIDS_CUDA_VERSION}")" LIBCUVS_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="libcuvs_${RAPIDS_PY_CUDA_SUFFIX}" rapids-download-wheels-from-github cpp) CUVS_WHEELHOUSE=$(rapids-download-from-github "$(rapids-package-name "wheel_python" cuvs --stable --cuda "$RAPIDS_CUDA_VERSION")") -# echo to expand wildcard before adding `[extra]` requires for pip +# generate constraints (possibly pinning to oldest support versions of dependencies) +rapids-generate-pip-constraints py_test_cuvs ./constraints.txt + +# notes: +# +# * echo to expand wildcard before adding `[test]` requires for pip +# * need to provide --constraint="${PIP_CONSTRAINT}" because that environment variable is +# ignored if any other --constraint are passed via the CLI +# rapids-pip-retry install \ + --constraint ./constraints.txt \ + --constraint "${PIP_CONSTRAINT}" \ "${LIBCUVS_WHEELHOUSE}"/libcuvs*.whl \ "$(echo "${CUVS_WHEELHOUSE}"/cuvs*.whl)[test]" diff --git a/dependencies.yaml b/dependencies.yaml index 329265aae1..9d6bf46e37 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -452,6 +452,21 @@ dependencies: - output_types: [conda, requirements, pyproject] packages: - scikit-learn>=1.5 + specific: + - output_types: requirements + matrices: + - matrix: + cuda: "12.*" + dependencies: "oldest" + packages: + - cuda-toolkit==12.2.* + - matrix: + cuda: "13.*" + dependencies: "oldest" + packages: + - cuda-toolkit==13.0.* + - matrix: + packages: java: common: - output_types: conda From b215b183cdbaa32223c464df83ad846dac7bc38b Mon Sep 17 00:00:00 2001 From: James Lamb Date: Thu, 26 Feb 2026 09:54:54 -0600 Subject: [PATCH 02/13] fixes --- .github/workflows/pr.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index af26989ce7..76c8cff3da 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -45,13 +45,11 @@ jobs: needs: [wheel-build-cuvs] secrets: inherit uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels with: build_type: pull-request script: ci/test_wheel_cuvs.sh devcontainer: secrets: inherit - needs: telemetry-setup uses: rapidsai/shared-workflows/.github/workflows/build-in-devcontainer.yaml@main with: arch: '["amd64", "arm64"]' From 2eac0dae8e23b3c129ba5d2cdd6364c6ec72b8fe Mon Sep 17 00:00:00 2001 From: James Lamb Date: Thu, 26 Feb 2026 10:54:25 -0600 Subject: [PATCH 03/13] use a matrix with more 'oldest' jobs --- .github/workflows/pr.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 76c8cff3da..7ad58c3c65 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -14,13 +14,13 @@ jobs: - wheel-tests-cuvs - devcontainer secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@oldest-deps if: always() with: needs: ${{ toJSON(needs) }} wheel-build-libcuvs: secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@oldest-deps with: build_type: pull-request node_type: cpu16 @@ -32,7 +32,7 @@ jobs: wheel-build-cuvs: needs: wheel-build-libcuvs secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@oldest-deps with: build_type: pull-request node_type: cpu8 @@ -44,13 +44,13 @@ jobs: wheel-tests-cuvs: needs: [wheel-build-cuvs] secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@oldest-deps with: build_type: pull-request script: ci/test_wheel_cuvs.sh devcontainer: secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/build-in-devcontainer.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/build-in-devcontainer.yaml@oldest-deps with: arch: '["amd64", "arm64"]' cuda: '["13.1"]' From b4f0ec129de0d408dd516ecc5bf4d6946638816b Mon Sep 17 00:00:00 2001 From: James Lamb Date: Thu, 26 Feb 2026 12:23:21 -0600 Subject: [PATCH 04/13] try without 'oldest' --- .github/workflows/pr.yaml | 10 +++++----- ci/test_wheel_cuvs.sh | 10 ++++++++++ dependencies.yaml | 41 +++++++++++++++++++++++++-------------- 3 files changed, 41 insertions(+), 20 deletions(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 7ad58c3c65..76c8cff3da 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -14,13 +14,13 @@ jobs: - wheel-tests-cuvs - devcontainer secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@oldest-deps + uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@main if: always() with: needs: ${{ toJSON(needs) }} wheel-build-libcuvs: secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@oldest-deps + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main with: build_type: pull-request node_type: cpu16 @@ -32,7 +32,7 @@ jobs: wheel-build-cuvs: needs: wheel-build-libcuvs secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@oldest-deps + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main with: build_type: pull-request node_type: cpu8 @@ -44,13 +44,13 @@ jobs: wheel-tests-cuvs: needs: [wheel-build-cuvs] secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@oldest-deps + uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main with: build_type: pull-request script: ci/test_wheel_cuvs.sh devcontainer: secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/build-in-devcontainer.yaml@oldest-deps + uses: rapidsai/shared-workflows/.github/workflows/build-in-devcontainer.yaml@main with: arch: '["amd64", "arm64"]' cuda: '["13.1"]' diff --git a/ci/test_wheel_cuvs.sh b/ci/test_wheel_cuvs.sh index 59eb2c2eb9..83b206078b 100755 --- a/ci/test_wheel_cuvs.sh +++ b/ci/test_wheel_cuvs.sh @@ -9,6 +9,16 @@ source rapids-init-pip # Delete system libnccl.so to ensure the wheel is used rm -rf /usr/lib64/libnccl* +# TODO(jameslamb): revert before merging +git clone --branch generate-pip-constraints \ + git@github.com:rapidsai/gha-tools.git \ + /tmp/gha-tools + +export PATH="/tmp/gha-tools/tools:${PATH}" +echo "--- rapids-generate-pip-constraints ---" +cat $(which rapids-generate-pip-constraints) +echo "" + RAPIDS_PY_CUDA_SUFFIX="$(rapids-wheel-ctk-name-gen "${RAPIDS_CUDA_VERSION}")" LIBCUVS_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="libcuvs_${RAPIDS_PY_CUDA_SUFFIX}" rapids-download-wheels-from-github cpp) CUVS_WHEELHOUSE=$(rapids-download-from-github "$(rapids-package-name "wheel_python" cuvs --stable --cuda "$RAPIDS_CUDA_VERSION")") diff --git a/dependencies.yaml b/dependencies.yaml index 9d6bf46e37..dff13c9c8d 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -314,6 +314,32 @@ dependencies: cuda: "13.1" packages: - cuda-version=13.1 + - output_types: requirements + matrices: + - matrix: + cuda: "12.2" + packages: + - cuda-toolkit==12.2.* + - matrix: + cuda: "12.5" + packages: + - cuda-toolkit==12.5.* + - matrix: + cuda: "12.8" + packages: + - cuda-toolkit==12.8.* + - matrix: + cuda: "12.9" + packages: + - cuda-toolkit==12.9.* + - matrix: + cuda: "13.0" + packages: + - cuda-toolkit==13.0.* + - matrix: + cuda: "13.1" + packages: + - cuda-toolkit==13.1.* cuda: common: - output_types: [conda] @@ -452,21 +478,6 @@ dependencies: - output_types: [conda, requirements, pyproject] packages: - scikit-learn>=1.5 - specific: - - output_types: requirements - matrices: - - matrix: - cuda: "12.*" - dependencies: "oldest" - packages: - - cuda-toolkit==12.2.* - - matrix: - cuda: "13.*" - dependencies: "oldest" - packages: - - cuda-toolkit==13.0.* - - matrix: - packages: java: common: - output_types: conda From 3f7509f18c1f184f5d1a63278e93a77110f22ad7 Mon Sep 17 00:00:00 2001 From: Divye Gala Date: Thu, 26 Feb 2026 18:28:08 +0000 Subject: [PATCH 05/13] add shim --- cpp/CMakeLists.txt | 2 +- cpp/src/detail/jit_lto/AlgorithmPlanner.cu | 3 +- cpp/src/detail/jit_lto/FragmentEntry.cu | 2 +- cpp/src/detail/jit_lto/nvjitlink_checker.hpp | 11 ------- ...tlink_checker.cpp => nvjitlink_helper.cpp} | 2 +- cpp/src/detail/jit_lto/nvjitlink_helper.hpp | 32 +++++++++++++++++++ 6 files changed, 36 insertions(+), 16 deletions(-) delete mode 100644 cpp/src/detail/jit_lto/nvjitlink_checker.hpp rename cpp/src/detail/jit_lto/{nvjitlink_checker.cpp => nvjitlink_helper.cpp} (96%) create mode 100644 cpp/src/detail/jit_lto/nvjitlink_helper.hpp diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index d90579812a..8fed9972eb 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -432,7 +432,7 @@ if(NOT BUILD_CPU_ONLY) src/detail/jit_lto/AlgorithmPlanner.cu src/detail/jit_lto/FragmentDatabase.cu src/detail/jit_lto/FragmentEntry.cu - src/detail/jit_lto/nvjitlink_checker.cpp + src/detail/jit_lto/nvjitlink_helper.cpp ) set_target_properties( cuvs_jit_lto_kernels PROPERTIES POSITION_INDEPENDENT_CODE ON CXX_STANDARD 20 diff --git a/cpp/src/detail/jit_lto/AlgorithmPlanner.cu b/cpp/src/detail/jit_lto/AlgorithmPlanner.cu index 3f8a3eeba1..3db1321dfb 100644 --- a/cpp/src/detail/jit_lto/AlgorithmPlanner.cu +++ b/cpp/src/detail/jit_lto/AlgorithmPlanner.cu @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -#include "nvjitlink_checker.hpp" +#include "nvjitlink_helper.hpp" #include #include @@ -17,7 +17,6 @@ #include #include "cuda_runtime.h" -#include "nvJitLink.h" #include #include diff --git a/cpp/src/detail/jit_lto/FragmentEntry.cu b/cpp/src/detail/jit_lto/FragmentEntry.cu index af1fb90e58..62d01c5f2d 100644 --- a/cpp/src/detail/jit_lto/FragmentEntry.cu +++ b/cpp/src/detail/jit_lto/FragmentEntry.cu @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -#include "nvjitlink_checker.hpp" +#include "nvjitlink_helper.hpp" #include diff --git a/cpp/src/detail/jit_lto/nvjitlink_checker.hpp b/cpp/src/detail/jit_lto/nvjitlink_checker.hpp deleted file mode 100644 index 12b062d795..0000000000 --- a/cpp/src/detail/jit_lto/nvjitlink_checker.hpp +++ /dev/null @@ -1,11 +0,0 @@ -/* - * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. - * SPDX-License-Identifier: Apache-2.0 - */ - -#pragma once - -#include - -// We can make a better RAII wrapper around nvjitlinkhandle -void check_nvjitlink_result(nvJitLinkHandle handle, nvJitLinkResult result); diff --git a/cpp/src/detail/jit_lto/nvjitlink_checker.cpp b/cpp/src/detail/jit_lto/nvjitlink_helper.cpp similarity index 96% rename from cpp/src/detail/jit_lto/nvjitlink_checker.cpp rename to cpp/src/detail/jit_lto/nvjitlink_helper.cpp index 6f9ae988db..0169a1513c 100644 --- a/cpp/src/detail/jit_lto/nvjitlink_checker.cpp +++ b/cpp/src/detail/jit_lto/nvjitlink_helper.cpp @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -#include "nvjitlink_checker.hpp" +#include "nvjitlink_helper.hpp" #include #include diff --git a/cpp/src/detail/jit_lto/nvjitlink_helper.hpp b/cpp/src/detail/jit_lto/nvjitlink_helper.hpp new file mode 100644 index 0000000000..19f21e548c --- /dev/null +++ b/cpp/src/detail/jit_lto/nvjitlink_helper.hpp @@ -0,0 +1,32 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. + * SPDX-License-Identifier: Apache-2.0 + */ + +#pragma once + +#define NVJITLINK_NO_INLINE +#include +#undef NVJITLINK_NO_INLINE + +// declare unversioned functions + +extern "C" { +nvJitLinkResult nvJitLinkCreate(nvJitLinkHandle*, uint32_t, const char**); +nvJitLinkResult nvJitLinkDestroy(nvJitLinkHandle*); +nvJitLinkResult nvJitLinkAddData( + nvJitLinkHandle, nvJitLinkInputType, const void*, size_t, const char*); +nvJitLinkResult nvJitLinkAddFile(nvJitLinkHandle, nvJitLinkInputType, const char*); +nvJitLinkResult nvJitLinkComplete(nvJitLinkHandle); +nvJitLinkResult nvJitLinkGetLinkedCubinSize(nvJitLinkHandle, size_t*); +nvJitLinkResult nvJitLinkGetLinkedCubin(nvJitLinkHandle, void*); +nvJitLinkResult nvJitLinkGetLinkedPtxSize(nvJitLinkHandle, size_t*); +nvJitLinkResult nvJitLinkGetLinkedPtx(nvJitLinkHandle, char*); +nvJitLinkResult nvJitLinkGetErrorLogSize(nvJitLinkHandle, size_t*); +nvJitLinkResult nvJitLinkGetErrorLog(nvJitLinkHandle, char*); +nvJitLinkResult nvJitLinkGetInfoLogSize(nvJitLinkHandle, size_t*); +nvJitLinkResult nvJitLinkGetInfoLog(nvJitLinkHandle, char*); +} + +// We can make a better RAII wrapper around nvjitlinkhandle +void check_nvjitlink_result(nvJitLinkHandle handle, nvJitLinkResult result); From 2ff12fabd8a782dadc2544f9153a681a82101efb Mon Sep 17 00:00:00 2001 From: James Lamb Date: Thu, 26 Feb 2026 12:59:25 -0600 Subject: [PATCH 06/13] ugh, HTTPS remote! --- ci/test_wheel_cuvs.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/test_wheel_cuvs.sh b/ci/test_wheel_cuvs.sh index 83b206078b..430f3e43d7 100755 --- a/ci/test_wheel_cuvs.sh +++ b/ci/test_wheel_cuvs.sh @@ -11,7 +11,7 @@ rm -rf /usr/lib64/libnccl* # TODO(jameslamb): revert before merging git clone --branch generate-pip-constraints \ - git@github.com:rapidsai/gha-tools.git \ + https://github.com/rapidsai/gha-tools.git \ /tmp/gha-tools export PATH="/tmp/gha-tools/tools:${PATH}" From 6e705b2a069a66e40299aaac33ac52902845955e Mon Sep 17 00:00:00 2001 From: James Lamb Date: Thu, 26 Feb 2026 13:45:27 -0600 Subject: [PATCH 07/13] use the correct deps group --- ci/test_wheel_cuvs.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/test_wheel_cuvs.sh b/ci/test_wheel_cuvs.sh index 430f3e43d7..8c42987468 100755 --- a/ci/test_wheel_cuvs.sh +++ b/ci/test_wheel_cuvs.sh @@ -24,7 +24,7 @@ LIBCUVS_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="libcuvs_${RAPIDS_PY_CUDA_SUFFIX}" rap CUVS_WHEELHOUSE=$(rapids-download-from-github "$(rapids-package-name "wheel_python" cuvs --stable --cuda "$RAPIDS_CUDA_VERSION")") # generate constraints (possibly pinning to oldest support versions of dependencies) -rapids-generate-pip-constraints py_test_cuvs ./constraints.txt +rapids-generate-pip-constraints test_python ./constraints.txt # notes: # From 19c0d82659f4ea03c5c0b1fa0abb61b1efffe6b6 Mon Sep 17 00:00:00 2001 From: Divye Gala Date: Thu, 26 Feb 2026 22:20:04 +0000 Subject: [PATCH 08/13] remove header --- cpp/src/detail/jit_lto/nvjitlink_helper.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/cpp/src/detail/jit_lto/nvjitlink_helper.cpp b/cpp/src/detail/jit_lto/nvjitlink_helper.cpp index 0169a1513c..d9fabe192f 100644 --- a/cpp/src/detail/jit_lto/nvjitlink_helper.cpp +++ b/cpp/src/detail/jit_lto/nvjitlink_helper.cpp @@ -6,7 +6,6 @@ #include "nvjitlink_helper.hpp" #include -#include #include #include From 250fe7d3fbf0b2995b4af52ae2be2c9d32a48891 Mon Sep 17 00:00:00 2001 From: Divye Gala Date: Thu, 26 Feb 2026 23:14:45 +0000 Subject: [PATCH 09/13] one more include --- cpp/include/cuvs/detail/jit_lto/FragmentEntry.hpp | 2 +- cpp/{src => include/cuvs}/detail/jit_lto/nvjitlink_helper.cpp | 2 +- cpp/src/detail/jit_lto/AlgorithmPlanner.cu | 2 +- cpp/src/detail/jit_lto/FragmentEntry.cu | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) rename cpp/{src => include/cuvs}/detail/jit_lto/nvjitlink_helper.cpp (94%) diff --git a/cpp/include/cuvs/detail/jit_lto/FragmentEntry.hpp b/cpp/include/cuvs/detail/jit_lto/FragmentEntry.hpp index a376068425..bfdb6a710b 100644 --- a/cpp/include/cuvs/detail/jit_lto/FragmentEntry.hpp +++ b/cpp/include/cuvs/detail/jit_lto/FragmentEntry.hpp @@ -10,7 +10,7 @@ #include #include -#include +#include struct FragmentEntry { FragmentEntry(std::string const& key); diff --git a/cpp/src/detail/jit_lto/nvjitlink_helper.cpp b/cpp/include/cuvs/detail/jit_lto/nvjitlink_helper.cpp similarity index 94% rename from cpp/src/detail/jit_lto/nvjitlink_helper.cpp rename to cpp/include/cuvs/detail/jit_lto/nvjitlink_helper.cpp index d9fabe192f..5736ba8231 100644 --- a/cpp/src/detail/jit_lto/nvjitlink_helper.cpp +++ b/cpp/include/cuvs/detail/jit_lto/nvjitlink_helper.cpp @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -#include "nvjitlink_helper.hpp" +#include #include #include diff --git a/cpp/src/detail/jit_lto/AlgorithmPlanner.cu b/cpp/src/detail/jit_lto/AlgorithmPlanner.cu index 3db1321dfb..0dc1a12aab 100644 --- a/cpp/src/detail/jit_lto/AlgorithmPlanner.cu +++ b/cpp/src/detail/jit_lto/AlgorithmPlanner.cu @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -#include "nvjitlink_helper.hpp" +#include #include #include diff --git a/cpp/src/detail/jit_lto/FragmentEntry.cu b/cpp/src/detail/jit_lto/FragmentEntry.cu index 62d01c5f2d..fcc47b87b7 100644 --- a/cpp/src/detail/jit_lto/FragmentEntry.cu +++ b/cpp/src/detail/jit_lto/FragmentEntry.cu @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -#include "nvjitlink_helper.hpp" +#include #include From 76d1998b8c48475699855761ffa9929e2a95def5 Mon Sep 17 00:00:00 2001 From: Divye Gala Date: Fri, 27 Feb 2026 00:25:19 +0000 Subject: [PATCH 10/13] moved wrong files --- cpp/{src => include/cuvs}/detail/jit_lto/nvjitlink_helper.hpp | 1 - cpp/{include/cuvs => src}/detail/jit_lto/nvjitlink_helper.cpp | 0 2 files changed, 1 deletion(-) rename cpp/{src => include/cuvs}/detail/jit_lto/nvjitlink_helper.hpp (95%) rename cpp/{include/cuvs => src}/detail/jit_lto/nvjitlink_helper.cpp (100%) diff --git a/cpp/src/detail/jit_lto/nvjitlink_helper.hpp b/cpp/include/cuvs/detail/jit_lto/nvjitlink_helper.hpp similarity index 95% rename from cpp/src/detail/jit_lto/nvjitlink_helper.hpp rename to cpp/include/cuvs/detail/jit_lto/nvjitlink_helper.hpp index 19f21e548c..c1359d2b91 100644 --- a/cpp/src/detail/jit_lto/nvjitlink_helper.hpp +++ b/cpp/include/cuvs/detail/jit_lto/nvjitlink_helper.hpp @@ -28,5 +28,4 @@ nvJitLinkResult nvJitLinkGetInfoLogSize(nvJitLinkHandle, size_t*); nvJitLinkResult nvJitLinkGetInfoLog(nvJitLinkHandle, char*); } -// We can make a better RAII wrapper around nvjitlinkhandle void check_nvjitlink_result(nvJitLinkHandle handle, nvJitLinkResult result); diff --git a/cpp/include/cuvs/detail/jit_lto/nvjitlink_helper.cpp b/cpp/src/detail/jit_lto/nvjitlink_helper.cpp similarity index 100% rename from cpp/include/cuvs/detail/jit_lto/nvjitlink_helper.cpp rename to cpp/src/detail/jit_lto/nvjitlink_helper.cpp From 0ee336c9b5f1e90c57955097aa59894963f08e93 Mon Sep 17 00:00:00 2001 From: James Lamb Date: Fri, 27 Feb 2026 13:26:57 -0600 Subject: [PATCH 11/13] loosen pip constraints --- dependencies.yaml | 59 ++++++++++++++++++++++++++++++----- python/libcuvs/pyproject.toml | 3 +- 2 files changed, 53 insertions(+), 9 deletions(-) diff --git a/dependencies.yaml b/dependencies.yaml index dff13c9c8d..a3dbac475e 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -316,30 +316,36 @@ dependencies: - cuda-version=13.1 - output_types: requirements matrices: + - matrix: + arch: aarch64 + cuda: "12.2" + packages: + # nvidia-cublas-cu12 didn't get aarch64 wheels until CTK 12.3 + - cuda-toolkit[cublas,curand,cusolver,cusparse]>=12.2,<12.4 - matrix: cuda: "12.2" packages: - - cuda-toolkit==12.2.* + - cuda-toolkit[cublas,curand,cusolver,cusparse]==12.2.* - matrix: cuda: "12.5" packages: - - cuda-toolkit==12.5.* + - cuda-toolkit[cublas,curand,cusolver,cusparse]==12.5.* - matrix: cuda: "12.8" packages: - - cuda-toolkit==12.8.* + - cuda-toolkit[cublas,curand,cusolver,cusparse]==12.8.* - matrix: cuda: "12.9" packages: - - cuda-toolkit==12.9.* + - cuda-toolkit[cublas,curand,cusolver,cusparse]==12.9.* - matrix: cuda: "13.0" packages: - - cuda-toolkit==13.0.* + - cuda-toolkit[cublas,curand,cusolver,cusparse]==13.0.* - matrix: cuda: "13.1" packages: - - cuda-toolkit==13.1.* + - cuda-toolkit[cublas,curand,cusolver,cusparse]==13.1.* cuda: common: - output_types: [conda] @@ -365,24 +371,61 @@ dependencies: specific: - output_types: [requirements, pyproject] matrices: + # skip this whole group if explicitly opting out of CUDA wheels + - matrix: + use_cuda_wheels: "false" + packages: - matrix: cuda: "12.*" use_cuda_wheels: "true" packages: + # cuVS doesn't place a direct requirement on nvJitLink at runtime for CUDA 12, + # but does need to ensure cusparse and nvJitLink installed together are compatible - cuda-toolkit[cublas,curand,cusolver,cusparse,nvjitlink]==12.* - matrix: cuda: "13.*" use_cuda_wheels: "true" packages: - - cuda-toolkit[cublas,curand,cusolver,cusparse,nvjitlink]==13.* + # cuVS needs 'nvJitLink>={whatever-cuvs-was-built-against}' at runtime, so + # omits it here and constrains it separately from cuda-toolkit + - cuda-toolkit[cublas,curand,cusolver,cusparse]==13.* + # if no matching matrix selectors passed, list a range + # (just as a source of documentation, as this populates pyproject.toml in source control) + - matrix: + packages: + - cuda-toolkit[cublas,curand,cusolver,cusparse]>=12,<14 + - output_types: [requirements, pyproject] + matrices: + # skip this whole group if explicitly opting out of CUDA wheels - matrix: use_cuda_wheels: "false" packages: + # for CUDA 12, using cuda-toolkit[nvjitlink] above + - matrix: + cuda: "12.*" + packages: + # We always want nvJitLink >= whatever version cuVS was built against. + # nvJitLink tends to follow the CTK's minor versions, but check at https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html + - matrix: + cuda: "13.0" + use_cuda_wheels: "true" + packages: + - nvidia-nvjitlink>=13.0,<14 + - matrix: + cuda: "13.1" + use_cuda_wheels: "true" + packages: + - &nvjitlink_cu13 nvidia-nvjitlink>=13.1,<14 + - matrix: + cuda: "13.*" + use_cuda_wheels: "true" + packages: + - *nvjitlink_cu13 # if no matching matrix selectors passed, list a range # (just as a source of documentation, as this populates pyproject.toml in source control) - matrix: packages: - - cuda-toolkit[cublas,curand,cusolver,cusparse,nvjitlink]>=12,<14 + - nvidia-nvjitlink>=12,<14 depends_on_cupy: common: - output_types: conda diff --git a/python/libcuvs/pyproject.toml b/python/libcuvs/pyproject.toml index f43bc35dbf..fe43cddc64 100644 --- a/python/libcuvs/pyproject.toml +++ b/python/libcuvs/pyproject.toml @@ -19,9 +19,10 @@ authors = [ license = "Apache-2.0" requires-python = ">=3.11" dependencies = [ - "cuda-toolkit[cublas,curand,cusolver,cusparse,nvjitlink]>=12,<14", + "cuda-toolkit[cublas,curand,cusolver,cusparse]>=12,<14", "libraft==26.4.*,>=0.0.0a0", "librmm==26.4.*,>=0.0.0a0", + "nvidia-nvjitlink>=12,<14", ] # This list was generated by `rapids-dependency-file-generator`. To make changes, edit ../../dependencies.yaml and run `rapids-dependency-file-generator`. classifiers = [ "Intended Audience :: Developers", From 53d5c9de845f69d364117432d7860ecea376f9a5 Mon Sep 17 00:00:00 2001 From: James Lamb Date: Fri, 27 Feb 2026 14:15:25 -0600 Subject: [PATCH 12/13] no extras in constraints --- dependencies.yaml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/dependencies.yaml b/dependencies.yaml index a3dbac475e..95d463bbb8 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -321,31 +321,31 @@ dependencies: cuda: "12.2" packages: # nvidia-cublas-cu12 didn't get aarch64 wheels until CTK 12.3 - - cuda-toolkit[cublas,curand,cusolver,cusparse]>=12.2,<12.4 + - cuda-toolkit>=12.2,<12.4 - matrix: cuda: "12.2" packages: - - cuda-toolkit[cublas,curand,cusolver,cusparse]==12.2.* + - cuda-toolkit==12.2.* - matrix: cuda: "12.5" packages: - - cuda-toolkit[cublas,curand,cusolver,cusparse]==12.5.* + - cuda-toolkit==12.5.* - matrix: cuda: "12.8" packages: - - cuda-toolkit[cublas,curand,cusolver,cusparse]==12.8.* + - cuda-toolkit==12.8.* - matrix: cuda: "12.9" packages: - - cuda-toolkit[cublas,curand,cusolver,cusparse]==12.9.* + - cuda-toolkit==12.9.* - matrix: cuda: "13.0" packages: - - cuda-toolkit[cublas,curand,cusolver,cusparse]==13.0.* + - cuda-toolkit==13.0.* - matrix: cuda: "13.1" packages: - - cuda-toolkit[cublas,curand,cusolver,cusparse]==13.1.* + - cuda-toolkit==13.1.* cuda: common: - output_types: [conda] From 1fa6343d79e4391f33c3ff4e2ddad575d94a21f8 Mon Sep 17 00:00:00 2001 From: James Lamb Date: Fri, 6 Mar 2026 10:52:57 -0600 Subject: [PATCH 13/13] test with nvjitlink 13.0 --- ci/test_wheel_cuvs.sh | 14 ++-------- dependencies.yaml | 60 ++++++++++++++++++------------------------- 2 files changed, 27 insertions(+), 47 deletions(-) diff --git a/ci/test_wheel_cuvs.sh b/ci/test_wheel_cuvs.sh index 8c42987468..82158498d9 100755 --- a/ci/test_wheel_cuvs.sh +++ b/ci/test_wheel_cuvs.sh @@ -9,22 +9,12 @@ source rapids-init-pip # Delete system libnccl.so to ensure the wheel is used rm -rf /usr/lib64/libnccl* -# TODO(jameslamb): revert before merging -git clone --branch generate-pip-constraints \ - https://github.com/rapidsai/gha-tools.git \ - /tmp/gha-tools - -export PATH="/tmp/gha-tools/tools:${PATH}" -echo "--- rapids-generate-pip-constraints ---" -cat $(which rapids-generate-pip-constraints) -echo "" - RAPIDS_PY_CUDA_SUFFIX="$(rapids-wheel-ctk-name-gen "${RAPIDS_CUDA_VERSION}")" LIBCUVS_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="libcuvs_${RAPIDS_PY_CUDA_SUFFIX}" rapids-download-wheels-from-github cpp) CUVS_WHEELHOUSE=$(rapids-download-from-github "$(rapids-package-name "wheel_python" cuvs --stable --cuda "$RAPIDS_CUDA_VERSION")") # generate constraints (possibly pinning to oldest support versions of dependencies) -rapids-generate-pip-constraints test_python ./constraints.txt +rapids-generate-pip-constraints test_python "${PIP_CONSTRAINT}" # notes: # @@ -33,7 +23,7 @@ rapids-generate-pip-constraints test_python ./constraints.txt # ignored if any other --constraint are passed via the CLI # rapids-pip-retry install \ - --constraint ./constraints.txt \ + --prefer-binary \ --constraint "${PIP_CONSTRAINT}" \ "${LIBCUVS_WHEELHOUSE}"/libcuvs*.whl \ "$(echo "${CUVS_WHEELHOUSE}"/cuvs*.whl)[test]" diff --git a/dependencies.yaml b/dependencies.yaml index 95d463bbb8..fcea87a671 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -286,6 +286,8 @@ dependencies: - clang==20.1.4 - clang-tools==20.1.4 - libclang==20.1.4 + # 'cuda_version' intentionally does not contain fallback entries... we want + # a loud error if an unsupported 'cuda' value is passed cuda_version: specific: - output_types: conda @@ -316,36 +318,51 @@ dependencies: - cuda-version=13.1 - output_types: requirements matrices: + # if use_cuda_wheels=false is provided, do not add dependencies on any CUDA wheels + # (e.g. for DLFW and pip devcontainers) + - matrix: + use_cuda_wheels: "false" + packages: - matrix: arch: aarch64 cuda: "12.2" + use_cuda_wheels: "true" packages: - # nvidia-cublas-cu12 didn't get aarch64 wheels until CTK 12.3 + # some components (like nvidia-cublas-cu12 and nvidia-cuda-nvcc-cu12) didn't have + # aarch64 wheels until CTK 12.3, so allow a slightly looser bound here - cuda-toolkit>=12.2,<12.4 - matrix: cuda: "12.2" + use_cuda_wheels: "true" packages: - cuda-toolkit==12.2.* - matrix: cuda: "12.5" + use_cuda_wheels: "true" packages: - cuda-toolkit==12.5.* - matrix: cuda: "12.8" + use_cuda_wheels: "true" packages: - cuda-toolkit==12.8.* - matrix: cuda: "12.9" + use_cuda_wheels: "true" packages: - cuda-toolkit==12.9.* - matrix: cuda: "13.0" + use_cuda_wheels: "true" packages: - cuda-toolkit==13.0.* + - nvidia-nvjitlink==13.0.* - matrix: cuda: "13.1" + use_cuda_wheels: "true" packages: - cuda-toolkit==13.1.* + - nvidia-nvjitlink==13.1.* cuda: common: - output_types: [conda] @@ -369,6 +386,8 @@ dependencies: packages: cuda_wheels: specific: + # nvJitLink has historically roughly followed the CTK's minor versioning scheme, + # but check at https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html - output_types: [requirements, pyproject] matrices: # skip this whole group if explicitly opting out of CUDA wheels @@ -386,45 +405,16 @@ dependencies: cuda: "13.*" use_cuda_wheels: "true" packages: - # cuVS needs 'nvJitLink>={whatever-cuvs-was-built-against}' at runtime, so - # omits it here and constrains it separately from cuda-toolkit - - cuda-toolkit[cublas,curand,cusolver,cusparse]==13.* - # if no matching matrix selectors passed, list a range - # (just as a source of documentation, as this populates pyproject.toml in source control) - - matrix: - packages: - - cuda-toolkit[cublas,curand,cusolver,cusparse]>=12,<14 - - output_types: [requirements, pyproject] - matrices: - # skip this whole group if explicitly opting out of CUDA wheels - - matrix: - use_cuda_wheels: "false" - packages: - # for CUDA 12, using cuda-toolkit[nvjitlink] above - - matrix: - cuda: "12.*" - packages: - # We always want nvJitLink >= whatever version cuVS was built against. - # nvJitLink tends to follow the CTK's minor versions, but check at https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html - - matrix: - cuda: "13.0" - use_cuda_wheels: "true" - packages: + # nvJitlink generally imposes a runtime constraint of `>={whatever-version-was-built-against}`, + # but we use a compatibility shim to try to allow building on newer nvJitLink and running + # against an older version + - &cuda_toolkit_any_cu13 cuda-toolkit[cublas,curand,cusolver,cusparse]==13.* - nvidia-nvjitlink>=13.0,<14 - - matrix: - cuda: "13.1" - use_cuda_wheels: "true" - packages: - - &nvjitlink_cu13 nvidia-nvjitlink>=13.1,<14 - - matrix: - cuda: "13.*" - use_cuda_wheels: "true" - packages: - - *nvjitlink_cu13 # if no matching matrix selectors passed, list a range # (just as a source of documentation, as this populates pyproject.toml in source control) - matrix: packages: + - cuda-toolkit[cublas,curand,cusolver,cusparse]>=12,<14 - nvidia-nvjitlink>=12,<14 depends_on_cupy: common: