Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
f19cf9f
feat: add release build output manifests
msarahan Aug 4, 2026
31a99e1
Test container-safe release output dispatch
msarahan Aug 7, 2026
b548f50
Use RAPIDS-owned dispatch canary ref
msarahan Aug 7, 2026
178d21c
Clarify release output inputs
msarahan Aug 13, 2026
9008e17
improve description and parameter name of release-build-output param
msarahan Aug 18, 2026
b5ed206
Address release build output review feedback
msarahan Aug 18, 2026
98762b3
simplify release-build-output section
msarahan Aug 18, 2026
dcb7583
Use release catalog configuration terminology
msarahan Aug 18, 2026
76a8c6b
Rename release catalog integration
msarahan Aug 18, 2026
17fcb1c
pin unified release catalog entries action
msarahan Aug 18, 2026
bdb908f
pin simplified package identity action
msarahan Aug 18, 2026
8d72dfa
use automatic release catalog artifact detection
msarahan Aug 18, 2026
7819b70
rename release catalog artifact directory
msarahan Aug 18, 2026
7421456
use inherited release catalog source sha
msarahan Aug 18, 2026
d3e174d
ci: update release catalog action canary
msarahan Aug 21, 2026
4de7515
feat: add release candidate build mode
msarahan Aug 21, 2026
c005f8c
fix: use executable candidate upload action
msarahan Aug 21, 2026
c1594e3
fix: pin verified candidate upload action revision
msarahan Aug 21, 2026
be660b0
feat: assume candidate store role for release builds
msarahan Aug 21, 2026
58f30f4
fix: ignore absent catalog signatures
msarahan Aug 21, 2026
621c9f3
fix: use nightly behavior for release candidates
msarahan Aug 21, 2026
e9e5bc3
feat: tag final-version release candidates locally
msarahan Aug 21, 2026
e16ff87
fix: mark candidate builds as releases
msarahan Aug 21, 2026
c10e280
fix: force local release candidate context
msarahan Aug 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/workflows/compute-matrix.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ on:
workflow_call:
inputs:
build_type:
description: "One of: [branch, nightly, pull-request]"
description: "One of: [branch, nightly, pull-request, release-candidate]"
required: true
type: string
matrix_name:
Expand Down Expand Up @@ -200,8 +200,8 @@ jobs:
env:
MATRIX: ${{ steps.prepare-matrix.outputs.matrix }}
run: |
if [[ "$BUILD_TYPE" != "branch" ]] && [[ "$BUILD_TYPE" != "nightly" ]] && [[ "$BUILD_TYPE" != "pull-request" ]]; then
echo "Invalid build_type! Must be one of 'branch', 'nightly', or 'pull-request'."
if [[ "$BUILD_TYPE" != "branch" ]] && [[ "$BUILD_TYPE" != "nightly" ]] && [[ "$BUILD_TYPE" != "pull-request" ]] && [[ "$BUILD_TYPE" != "release-candidate" ]]; then
echo "Invalid build_type! Must be one of 'branch', 'nightly', 'pull-request', or 'release-candidate'."
exit 1
fi
if [[ "$MATRIX_TYPE" != "auto" ]] && [[ "$MATRIX_TYPE" != "nightly" ]] && [[ "$MATRIX_TYPE" != "pull-request" ]]; then
Expand All @@ -224,7 +224,7 @@ jobs:

# only overwrite MATRIX_TYPE if it was set to 'auto'
if [[ "${MATRIX_TYPE}" == "auto" ]]; then
if [[ "${BUILD_TYPE}" == "branch" ]]; then
if [[ "${BUILD_TYPE}" == "branch" || "${BUILD_TYPE}" == "release-candidate" ]]; then
# Use the nightly matrix for branch tests
MATRIX_TYPE="nightly"
else
Expand Down
60 changes: 54 additions & 6 deletions .github/workflows/conda-cpp-build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ on:
workflow_call:
inputs:
build_type:
description: "One of: [branch, nightly, pull-request]"
description: "One of: [branch, nightly, pull-request, release-candidate]"
required: true
type: string
branch:
Expand Down Expand Up @@ -44,6 +44,14 @@ on:
default: true
required: false
description: "One of [true, false], true if artifacts should be uploaded to GitHub's artifact store"
candidate-train-sha256:
description: "Canonical SHA-256 of the release train; required for release-candidate builds."
type: string
default: ""
release-candidate-tag:
description: "Final source tag created locally for a release-candidate build; it is never pushed."
type: string
default: ""
matrix_filter:
description: |
jq expression which modifies the matrix.
Expand Down Expand Up @@ -108,7 +116,10 @@ jobs:
container:
image: rapidsai/ci-conda:26.10-cuda${{ matrix.CUDA_VER }}-${{ matrix.LINUX_VER }}-py${{ matrix.PY_VER }}
env:
RAPIDS_BUILD_TYPE: ${{ inputs.build_type }}
# Candidate orchestration retains its own input mode, while RAPIDS
# build helpers use the established nightly dependency behavior.
RAPIDS_BUILD_TYPE: ${{ inputs.build_type == 'release-candidate' && 'nightly' || inputs.build_type }}
RAPIDS_RELEASE_CANDIDATE: ${{ inputs.build_type == 'release-candidate' }}
RAPIDS_DATETIME_STRING: ${{ inputs.build-datetime }}
steps:
- uses: aws-actions/configure-aws-credentials@517a711dbcd0e402f90c77e7e2f81e849156e31d # v6.2.2
Expand All @@ -122,6 +133,23 @@ jobs:
ref: ${{ inputs.sha }}
fetch-depth: 0
persist-credentials: true
- name: Create local release-candidate tag
if: ${{ inputs.build_type == 'release-candidate' }}
env:
RELEASE_CANDIDATE_TAG: ${{ inputs.release-candidate-tag }}
RELEASE_CANDIDATE_SHA: ${{ inputs.sha }}
run: |
test -n "${RELEASE_CANDIDATE_TAG}"
git tag --force "${RELEASE_CANDIDATE_TAG}" "${RELEASE_CANDIDATE_SHA}"
git remote set-url --push origin no_push
git show-ref --verify --quiet "refs/tags/${RELEASE_CANDIDATE_TAG}"
- name: Force local release-candidate build context
if: ${{ inputs.build_type == 'release-candidate' }}
run: |
mkdir -p "${RUNNER_TEMP}/release-candidate-tools"
printf '%s\n' '#!/usr/bin/env bash' 'exit 0' > "${RUNNER_TEMP}/release-candidate-tools/rapids-is-release-build"
chmod +x "${RUNNER_TEMP}/release-candidate-tools/rapids-is-release-build"
echo "${RUNNER_TEMP}/release-candidate-tools" >> "${GITHUB_PATH}"
- name: Standardize repository information
env:
RAPIDS_REPOSITORY: ${{ inputs.repo || github.repository }}
Expand Down Expand Up @@ -200,7 +228,7 @@ jobs:
MAMBA_USE_SHARDED_REPODATA: false
RATTLER_SHARDED: false
- name: Get Package Name and Location
if: ${{ inputs.upload-artifacts }}
if: ${{ inputs.upload-artifacts || inputs.build_type == 'release-candidate' }}
env:
# Pass RAPIDS_PACKAGE_NAME from cpp-build step if available
RAPIDS_PACKAGE_NAME: ${{ steps.cpp-build.outputs.rapids-package-name }}
Expand All @@ -214,20 +242,40 @@ jobs:
echo "CONDA_OUTPUT_DIR=${RAPIDS_CONDA_BLD_OUTPUT_DIR}" >> "${GITHUB_OUTPUT}"
id: package-name
- name: Show files to be uploaded
if: ${{ inputs.upload-artifacts }}
if: ${{ inputs.upload-artifacts || inputs.build_type == 'release-candidate' }}
env:
CONDA_OUTPUT_DIR: ${{ steps.package-name.outputs.CONDA_OUTPUT_DIR }}
run: |
echo "Contents of directory to be uploaded:"
ls -R "${CONDA_OUTPUT_DIR}"
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
if: ${{ inputs.upload-artifacts }}
if: ${{ inputs.upload-artifacts && inputs.build_type != 'release-candidate' }}
with:
if-no-files-found: 'error'
name: ${{ steps.package-name.outputs.RAPIDS_PACKAGE_NAME }}
path: ${{ steps.package-name.outputs.CONDA_OUTPUT_DIR }}

- name: Configure release-candidate store credentials
if: ${{ inputs.build_type == 'release-candidate' }}
uses: aws-actions/configure-aws-credentials@517a711dbcd0e402f90c77e7e2f81e849156e31d # v6.2.2
with:
aws-region: us-east-2
role-duration-seconds: 43200 # 12h
role-to-assume: arn:aws:iam::279114543810:role/gha-oidc-rapids-release-candidates
- name: Create Conda release catalog companion
if: ${{ inputs.build_type == 'release-candidate' }}
uses: rapidsai/shared-actions/release-catalog-dispatch@079aafb321c9a87d5741a79234d65ad30f1e9bb0 # shared-actions PR 136 candidate-store head
with:
config: >-
{
"release_catalog_key": ${{ toJSON(format('conda:{0}', github.event.repository.name)) }},
"artifact_directory": ${{ toJSON(steps.package-name.outputs.CONDA_OUTPUT_DIR) }}
}
source-artifact-name: ${{ steps.package-name.outputs.RAPIDS_PACKAGE_NAME }}
candidate-train-sha256: ${{ inputs.candidate-train-sha256 }}
upload-to-s3: 'true'
- name: Upload additional artifacts
if: "!cancelled()"
if: ${{ !cancelled() && inputs.build_type != 'release-candidate' }}
run: rapids-upload-artifacts-dir "cuda${RAPIDS_CUDA_VERSION%%.*}_$(arch)"
- name: Telemetry upload attributes
uses: rapidsai/shared-actions/telemetry-dispatch-stash-job-artifacts@main
Expand Down
60 changes: 54 additions & 6 deletions .github/workflows/conda-python-build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ on:
workflow_call:
inputs:
build_type:
description: "One of: [branch, nightly, pull-request]"
description: "One of: [branch, nightly, pull-request, release-candidate]"
required: true
type: string
branch:
Expand Down Expand Up @@ -44,6 +44,14 @@ on:
default: true
required: false
description: "One of [true, false], true if artifacts should be uploaded to GitHub's artifact store"
candidate-train-sha256:
description: "Canonical SHA-256 of the release train; required for release-candidate builds."
type: string
default: ""
release-candidate-tag:
description: "Final source tag created locally for a release-candidate build; it is never pushed."
type: string
default: ""
matrix_filter:
description: |
jq expression which modifies the matrix.
Expand Down Expand Up @@ -118,7 +126,10 @@ jobs:
container:
image: rapidsai/ci-conda:26.10-cuda${{ matrix.CUDA_VER }}-${{ matrix.LINUX_VER }}-py${{ matrix.PY_VER }}
env:
RAPIDS_BUILD_TYPE: ${{ inputs.build_type }}
# Candidate orchestration retains its own input mode, while RAPIDS
# build helpers use the established nightly dependency behavior.
RAPIDS_BUILD_TYPE: ${{ inputs.build_type == 'release-candidate' && 'nightly' || inputs.build_type }}
RAPIDS_RELEASE_CANDIDATE: ${{ inputs.build_type == 'release-candidate' }}
RAPIDS_DATETIME_STRING: ${{ inputs.build-datetime }}
steps:
- uses: aws-actions/configure-aws-credentials@517a711dbcd0e402f90c77e7e2f81e849156e31d # v6.2.2
Expand All @@ -132,6 +143,23 @@ jobs:
ref: ${{ inputs.sha }}
fetch-depth: 0
persist-credentials: true
- name: Create local release-candidate tag
if: ${{ inputs.build_type == 'release-candidate' }}
env:
RELEASE_CANDIDATE_TAG: ${{ inputs.release-candidate-tag }}
RELEASE_CANDIDATE_SHA: ${{ inputs.sha }}
run: |
test -n "${RELEASE_CANDIDATE_TAG}"
git tag --force "${RELEASE_CANDIDATE_TAG}" "${RELEASE_CANDIDATE_SHA}"
git remote set-url --push origin no_push
git show-ref --verify --quiet "refs/tags/${RELEASE_CANDIDATE_TAG}"
- name: Force local release-candidate build context
if: ${{ inputs.build_type == 'release-candidate' }}
run: |
mkdir -p "${RUNNER_TEMP}/release-candidate-tools"
printf '%s\n' '#!/usr/bin/env bash' 'exit 0' > "${RUNNER_TEMP}/release-candidate-tools/rapids-is-release-build"
chmod +x "${RUNNER_TEMP}/release-candidate-tools/rapids-is-release-build"
echo "${RUNNER_TEMP}/release-candidate-tools" >> "${GITHUB_PATH}"
- name: Standardize repository information
env:
RAPIDS_REPOSITORY: ${{ inputs.repo || github.repository }}
Expand Down Expand Up @@ -205,7 +233,7 @@ jobs:
MAMBA_USE_SHARDED_REPODATA: false
RATTLER_SHARDED: false
- name: Get Package Name and Location
if: ${{ inputs.upload-artifacts }}
if: ${{ inputs.upload-artifacts || inputs.build_type == 'release-candidate' }}
env:
# Pass RAPIDS_PACKAGE_NAME from python-build step if available
RAPIDS_PACKAGE_NAME: ${{ steps.python-build.outputs.rapids-package-name }}
Expand All @@ -219,20 +247,40 @@ jobs:
echo "CONDA_OUTPUT_DIR=${RAPIDS_CONDA_BLD_OUTPUT_DIR}" >> "${GITHUB_OUTPUT}"
id: package-name
- name: Show files to be uploaded
if: ${{ inputs.upload-artifacts }}
if: ${{ inputs.upload-artifacts || inputs.build_type == 'release-candidate' }}
env:
CONDA_OUTPUT_DIR: ${{ steps.package-name.outputs.CONDA_OUTPUT_DIR }}
run: |
echo "Contents of directory to be uploaded:"
ls -R "${CONDA_OUTPUT_DIR}"
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
if: ${{ inputs.upload-artifacts }}
if: ${{ inputs.upload-artifacts && inputs.build_type != 'release-candidate' }}
with:
if-no-files-found: 'error'
name: ${{ steps.package-name.outputs.RAPIDS_PACKAGE_NAME }}
path: ${{ steps.package-name.outputs.CONDA_OUTPUT_DIR }}

- name: Configure release-candidate store credentials
if: ${{ inputs.build_type == 'release-candidate' }}
uses: aws-actions/configure-aws-credentials@517a711dbcd0e402f90c77e7e2f81e849156e31d # v6.2.2
with:
aws-region: us-east-2
role-duration-seconds: 43200 # 12h
role-to-assume: arn:aws:iam::279114543810:role/gha-oidc-rapids-release-candidates
- name: Create Conda release catalog companion
if: ${{ inputs.build_type == 'release-candidate' }}
uses: rapidsai/shared-actions/release-catalog-dispatch@079aafb321c9a87d5741a79234d65ad30f1e9bb0 # shared-actions PR 136 candidate-store head
with:
config: >-
{
"release_catalog_key": ${{ toJSON(format('conda:{0}', github.event.repository.name)) }},
"artifact_directory": ${{ toJSON(steps.package-name.outputs.CONDA_OUTPUT_DIR) }}
}
source-artifact-name: ${{ steps.package-name.outputs.RAPIDS_PACKAGE_NAME }}
candidate-train-sha256: ${{ inputs.candidate-train-sha256 }}
upload-to-s3: 'true'
- name: Upload additional artifacts
if: "!cancelled()"
if: ${{ !cancelled() && inputs.build_type != 'release-candidate' }}
run: rapids-upload-artifacts-dir "cuda${RAPIDS_CUDA_VERSION%%.*}_$(arch)_py${RAPIDS_PY_VERSION//.}"
- name: Telemetry upload attributes
uses: rapidsai/shared-actions/telemetry-dispatch-stash-job-artifacts@main
Expand Down
58 changes: 55 additions & 3 deletions .github/workflows/custom-job.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ on:
workflow_call:
inputs:
build_type:
description: "One of: [branch, nightly, pull-request]"
description: "One of: [branch, nightly, pull-request, release-candidate]"
required: true
type: string
branch:
Expand Down Expand Up @@ -105,6 +105,22 @@ on:
default: false
type: boolean
required: false
release-catalog-config:
description: >-
Optional JSON configuration for the shared-actions release catalog action. In release-candidate mode,
it writes the declared files and evidence to the private candidate store. See
https://github.com/rapidsai/shared-actions/tree/main/release-catalog for configuration details.
default: ''
type: string
required: false
candidate-train-sha256:
description: "Canonical SHA-256 of the release train; required for release-candidate builds."
type: string
default: ""
release-candidate-tag:
description: "Final source tag created locally for a release-candidate build; it is never pushed."
type: string
default: ""

defaults:
run:
Expand Down Expand Up @@ -138,7 +154,10 @@ jobs:
options: ${{ inputs.container-options }}
env:
NVIDIA_VISIBLE_DEVICES: ${{ env.NVIDIA_VISIBLE_DEVICES }}
RAPIDS_BUILD_TYPE: ${{ inputs.build_type }}
# Candidate orchestration retains its own input mode, while RAPIDS
# build helpers use the established nightly dependency behavior.
RAPIDS_BUILD_TYPE: ${{ inputs.build_type == 'release-candidate' && 'nightly' || inputs.build_type }}
RAPIDS_RELEASE_CANDIDATE: ${{ inputs.build_type == 'release-candidate' }}
RAPIDS_DATETIME_STRING: ${{ inputs.build-datetime }}
steps:
- uses: aws-actions/configure-aws-credentials@517a711dbcd0e402f90c77e7e2f81e849156e31d # v6.2.2
Expand All @@ -152,6 +171,23 @@ jobs:
ref: ${{ inputs.sha }}
fetch-depth: 0
persist-credentials: true
- name: Create local release-candidate tag
if: ${{ inputs.build_type == 'release-candidate' }}
env:
RELEASE_CANDIDATE_TAG: ${{ inputs.release-candidate-tag }}
RELEASE_CANDIDATE_SHA: ${{ inputs.sha }}
run: |
test -n "${RELEASE_CANDIDATE_TAG}"
git tag --force "${RELEASE_CANDIDATE_TAG}" "${RELEASE_CANDIDATE_SHA}"
git remote set-url --push origin no_push
git show-ref --verify --quiet "refs/tags/${RELEASE_CANDIDATE_TAG}"
- name: Force local release-candidate build context
if: ${{ inputs.build_type == 'release-candidate' }}
run: |
mkdir -p "${RUNNER_TEMP}/release-candidate-tools"
printf '%s\n' '#!/usr/bin/env bash' 'exit 0' > "${RUNNER_TEMP}/release-candidate-tools/rapids-is-release-build"
chmod +x "${RUNNER_TEMP}/release-candidate-tools/rapids-is-release-build"
echo "${RUNNER_TEMP}/release-candidate-tools" >> "${GITHUB_PATH}"
- name: Telemetry setup
uses: rapidsai/shared-actions/telemetry-dispatch-setup@main
continue-on-error: true
Expand Down Expand Up @@ -223,13 +259,29 @@ jobs:
MAMBA_USE_SHARDED_REPODATA: false
RATTLER_SHARDED: false
- name: Upload file to GitHub Artifact
if: ${{ inputs.build_type != 'release-candidate' }}
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: ${{ inputs.artifact-name }}
path: ${{ inputs.file_to_upload }}
if-no-files-found: ignore
- name: Configure release-candidate store credentials
if: ${{ inputs.build_type == 'release-candidate' }}
uses: aws-actions/configure-aws-credentials@517a711dbcd0e402f90c77e7e2f81e849156e31d # v6.2.2
with:
aws-region: us-east-2
role-duration-seconds: 43200 # 12h
role-to-assume: arn:aws:iam::279114543810:role/gha-oidc-rapids-release-candidates
- name: Create release catalog companion
if: ${{ inputs.build_type == 'release-candidate' && inputs.release-catalog-config != '' }}
uses: rapidsai/shared-actions/release-catalog-dispatch@079aafb321c9a87d5741a79234d65ad30f1e9bb0 # shared-actions PR 136 candidate-store head
with:
config: ${{ inputs.release-catalog-config }}
source-artifact-name: ${{ inputs.artifact-name }}
candidate-train-sha256: ${{ inputs.candidate-train-sha256 }}
upload-to-s3: 'true'
- name: Upload additional artifacts
if: "!cancelled()"
if: ${{ !cancelled() && inputs.build_type != 'release-candidate' }}
run: rapids-upload-artifacts-dir "custom-job-$(arch)"
- name: Telemetry upload attributes
uses: rapidsai/shared-actions/telemetry-dispatch-stash-job-artifacts@main
Expand Down
Loading