From bdeac9683608fd2a59efea350e9109f881717cf2 Mon Sep 17 00:00:00 2001 From: Michael Sarahan Date: Mon, 3 Aug 2026 13:30:31 -0500 Subject: [PATCH 1/2] ci: add release build output canaries --- .github/workflows/build.yaml | 50 ++++++++++++++++++++++++++++++++---- ci/build_java.sh | 10 +++++++- ci/build_standalone_c.sh | 6 ++++- 3 files changed, 59 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index c209d0c0ad..6f480767ec 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -43,7 +43,7 @@ jobs: packages: read pull-requests: read secrets: inherit # zizmor: ignore[secrets-inherit] - uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@codex/release-build-output-manifests with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -51,6 +51,8 @@ jobs: node_type: cpu16 script: ci/build_cpp.sh sha: ${{ inputs.sha }} + release-build-output: true + release-unit: conda:cuvs-cpp rocky8-clib-standalone-build-matrix: permissions: @@ -82,8 +84,25 @@ jobs: requires_license_builder: true script: "ci/build_standalone_c.sh" artifact-name: "libcuvs_c_${{ matrix.CUDA_VER }}_${{ matrix.ARCH }}.tar.gz" - file_to_upload: "libcuvs_c.tar.gz" + file_to_upload: | + libcuvs_c.tar.gz + libcuvs_c.release-package.json sha: ${{ inputs.sha }} + rocky8-clib-standalone-release-output: + needs: [rocky8-clib-standalone-build-matrix, rocky8-clib-standalone-build] + permissions: + actions: read + contents: read + uses: rapidsai/shared-workflows/.github/workflows/release-build-output.yaml@codex/release-build-output-manifests + strategy: + fail-fast: false + matrix: ${{ fromJSON(needs.rocky8-clib-standalone-build-matrix.outputs.matrix) }} + with: + artifact-name: "libcuvs_c_${{ matrix.CUDA_VER }}_${{ matrix.ARCH }}.tar.gz" + release-unit: archive:libcuvs-c + release-package-file: libcuvs_c.release-package.json + release-artifacts: '[{"path":"libcuvs_c.tar.gz"}]' + source-sha: ${{ inputs.sha || github.sha }} rust-build-matrix: needs: cpp-build permissions: @@ -184,6 +203,21 @@ jobs: artifact-name: "cuvs-java-cuda${{ matrix.CUDA_VER }}" file_to_upload: "java/cuvs-java/target/" sha: ${{ inputs.sha }} + java-release-output: + needs: [java-build-matrix, java-build] + permissions: + actions: read + contents: read + uses: rapidsai/shared-workflows/.github/workflows/release-build-output.yaml@codex/release-build-output-manifests + strategy: + fail-fast: false + matrix: ${{ fromJSON(needs.java-build-matrix.outputs.matrix) }} + with: + artifact-name: "cuvs-java-cuda${{ matrix.CUDA_VER }}" + release-unit: maven:cuvs-java + release-package-file: cuvs-java.release-package.json + release-artifacts: '[{"path":"cuvs-java-*-x86_64-cuda*.jar"}]' + source-sha: ${{ inputs.sha || github.sha }} python-build: needs: [cpp-build] permissions: @@ -193,13 +227,15 @@ jobs: packages: read pull-requests: read secrets: inherit # zizmor: ignore[secrets-inherit] - uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@codex/release-build-output-manifests with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} date: ${{ inputs.date }} script: ci/build_python.sh sha: ${{ inputs.sha }} + release-build-output: true + release-unit: conda:cuvs-python # 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))) upload-conda: @@ -254,7 +290,7 @@ jobs: packages: read pull-requests: read secrets: inherit # zizmor: ignore[secrets-inherit] - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@codex/release-build-output-manifests with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -266,6 +302,8 @@ jobs: matrix_filter: group_by([.ARCH, (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | map(max_by(.PY_VER|split(".")|map(tonumber))) package-name: libcuvs package-type: cpp + release-build-output: true + release-unit: wheel:libcuvs wheel-publish-libcuvs: needs: wheel-build-libcuvs permissions: @@ -295,7 +333,7 @@ jobs: packages: read pull-requests: read secrets: inherit # zizmor: ignore[secrets-inherit] - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@codex/release-build-output-manifests with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -305,6 +343,8 @@ jobs: script: ci/build_wheel_cuvs.sh package-name: cuvs package-type: python + release-build-output: true + release-unit: wheel:cuvs # 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-publish-cuvs: diff --git a/ci/build_java.sh b/ci/build_java.sh index 2e363bb452..3e322d80aa 100755 --- a/ci/build_java.sh +++ b/ci/build_java.sh @@ -1,5 +1,5 @@ #!/bin/bash -# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 set -euo pipefail @@ -58,6 +58,14 @@ export RAPIDS_CUDA_MAJOR bash ./build.sh java "${EXTRA_BUILD_ARGS[@]}" +if [[ "${EXITCODE}" -eq 0 ]]; then + JAVA_PACKAGE_VERSION="$(sed -n 's/.*\([^<]*\)<\/version>.*/\1/p' java/cuvs-java/pom.xml | head -n 1)" + jq -n \ + --arg version "${JAVA_PACKAGE_VERSION}" \ + '{ecosystem: "maven", name: "com.nvidia.cuvs:cuvs-java", version: $version}' \ + >java/cuvs-java/target/cuvs-java.release-package.json +fi + sccache --show-adv-stats sccache --stop-server >/dev/null 2>&1 || true diff --git a/ci/build_standalone_c.sh b/ci/build_standalone_c.sh index 33123cd79c..a790918b5b 100755 --- a/ci/build_standalone_c.sh +++ b/ci/build_standalone_c.sh @@ -1,5 +1,5 @@ #!/bin/bash -# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 set -euo pipefail @@ -99,3 +99,7 @@ license-builder . --output-json c/build/install/licenses.json --output-txt c/bui rapids-logger "Begin c tarball creation" tar czf libcuvs_c.tar.gz -C c/build/install/ . ls -lh libcuvs_c.tar.gz +jq -n \ + --arg version "${RAPIDS_PACKAGE_VERSION}" \ + '{ecosystem: "archive", name: "libcuvs-c", version: $version}' \ + >libcuvs_c.release-package.json From f0015ac7460dca3f204665f8a64dcc6ccab45156 Mon Sep 17 00:00:00 2001 From: Michael Sarahan Date: Mon, 3 Aug 2026 20:09:56 -0500 Subject: [PATCH 2/2] ci: exercise release build output in PRs --- .github/workflows/build.yaml | 36 ++++++++---------------------------- .github/workflows/pr.yaml | 34 +++++++++++++++++++++++++++------- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 6f480767ec..4e101f06e0 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -70,7 +70,7 @@ jobs: packages: read pull-requests: read secrets: inherit # zizmor: ignore[secrets-inherit] - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@codex/release-build-output-manifests strategy: fail-fast: false matrix: ${{ fromJSON(needs.rocky8-clib-standalone-build-matrix.outputs.matrix) }} @@ -87,22 +87,12 @@ jobs: file_to_upload: | libcuvs_c.tar.gz libcuvs_c.release-package.json - sha: ${{ inputs.sha }} - rocky8-clib-standalone-release-output: - needs: [rocky8-clib-standalone-build-matrix, rocky8-clib-standalone-build] - permissions: - actions: read - contents: read - uses: rapidsai/shared-workflows/.github/workflows/release-build-output.yaml@codex/release-build-output-manifests - strategy: - fail-fast: false - matrix: ${{ fromJSON(needs.rocky8-clib-standalone-build-matrix.outputs.matrix) }} - with: - artifact-name: "libcuvs_c_${{ matrix.CUDA_VER }}_${{ matrix.ARCH }}.tar.gz" + release-build-output: true + release-output-directory: . release-unit: archive:libcuvs-c release-package-file: libcuvs_c.release-package.json release-artifacts: '[{"path":"libcuvs_c.tar.gz"}]' - source-sha: ${{ inputs.sha || github.sha }} + sha: ${{ inputs.sha }} rust-build-matrix: needs: cpp-build permissions: @@ -187,7 +177,7 @@ jobs: packages: read pull-requests: read secrets: inherit # zizmor: ignore[secrets-inherit] - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@codex/release-build-output-manifests # 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: @@ -202,22 +192,12 @@ jobs: script: "ci/build_java.sh" artifact-name: "cuvs-java-cuda${{ matrix.CUDA_VER }}" file_to_upload: "java/cuvs-java/target/" - sha: ${{ inputs.sha }} - java-release-output: - needs: [java-build-matrix, java-build] - permissions: - actions: read - contents: read - uses: rapidsai/shared-workflows/.github/workflows/release-build-output.yaml@codex/release-build-output-manifests - strategy: - fail-fast: false - matrix: ${{ fromJSON(needs.java-build-matrix.outputs.matrix) }} - with: - artifact-name: "cuvs-java-cuda${{ matrix.CUDA_VER }}" + release-build-output: true + release-output-directory: java/cuvs-java/target release-unit: maven:cuvs-java release-package-file: cuvs-java.release-package.json release-artifacts: '[{"path":"cuvs-java-*-x86_64-cuda*.jar"}]' - source-sha: ${{ inputs.sha || github.sha }} + sha: ${{ inputs.sha }} python-build: needs: [cpp-build] permissions: diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 12d2d7f8eb..3c7d0eec73 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -399,11 +399,13 @@ jobs: packages: read pull-requests: read secrets: inherit # zizmor: ignore[secrets-inherit] - uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@codex/release-build-output-manifests with: build_type: pull-request node_type: cpu16 script: ci/build_cpp.sh + release-build-output: true + release-unit: conda:cuvs-cpp conda-cpp-tests: needs: [conda-cpp-build, changed-files] permissions: @@ -440,10 +442,12 @@ jobs: packages: read pull-requests: read secrets: inherit # zizmor: ignore[secrets-inherit] - uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@codex/release-build-output-manifests with: build_type: pull-request script: ci/build_python.sh + release-build-output: true + release-unit: conda:cuvs-python # 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: @@ -477,7 +481,7 @@ jobs: packages: read pull-requests: read secrets: inherit # zizmor: ignore[secrets-inherit] - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@codex/release-build-output-manifests strategy: fail-fast: false matrix: ${{ fromJSON(needs.rocky8-clib-standalone-build-matrix.outputs.matrix) }} @@ -490,7 +494,14 @@ jobs: requires_license_builder: true script: "ci/build_standalone_c.sh --build-tests" artifact-name: "libcuvs_c_${{ matrix.CUDA_VER }}_${{ matrix.ARCH }}.tar.gz" - file_to_upload: "libcuvs_c.tar.gz" + file_to_upload: | + libcuvs_c.tar.gz + libcuvs_c.release-package.json + release-build-output: true + release-output-directory: . + release-unit: archive:libcuvs-c + release-package-file: libcuvs_c.release-package.json + release-artifacts: '[{"path":"libcuvs_c.tar.gz"}]' sha: ${{ inputs.sha }} rocky8-clib-tests-matrix: needs: [rocky8-clib-standalone-build, changed-files] @@ -541,7 +552,7 @@ jobs: packages: read pull-requests: read secrets: inherit # zizmor: ignore[secrets-inherit] - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@codex/release-build-output-manifests # 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: @@ -555,6 +566,11 @@ jobs: script: "ci/test_java.sh" artifact-name: "cuvs-java-cuda${{ matrix.CUDA_VER }}" file_to_upload: "java/cuvs-java/target/" + release-build-output: true + release-output-directory: java/cuvs-java/target + release-unit: maven:cuvs-java + release-package-file: cuvs-java.release-package.json + release-artifacts: '[{"path":"cuvs-java-*-x86_64-cuda*.jar"}]' rust-build-matrix: needs: [conda-cpp-build, changed-files] permissions: @@ -641,7 +657,7 @@ jobs: packages: read pull-requests: read secrets: inherit # zizmor: ignore[secrets-inherit] - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@codex/release-build-output-manifests with: build_type: pull-request node_type: cpu16 @@ -650,6 +666,8 @@ jobs: matrix_filter: group_by([.ARCH, (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | map(max_by(.PY_VER|split(".")|map(tonumber))) package-name: libcuvs package-type: cpp + release-build-output: true + release-unit: wheel:libcuvs wheel-build-cuvs: needs: wheel-build-libcuvs permissions: @@ -659,13 +677,15 @@ jobs: packages: read pull-requests: read secrets: inherit # zizmor: ignore[secrets-inherit] - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@codex/release-build-output-manifests with: build_type: pull-request node_type: cpu8 script: ci/build_wheel_cuvs.sh package-name: cuvs package-type: python + release-build-output: true + release-unit: wheel:cuvs # 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: