Skip to content

Inline replace_multiple implementation into public entry point #42396

Inline replace_multiple implementation into public entry point

Inline replace_multiple implementation into public entry point #42396

Workflow file for this run

name: pr
on:
push:
branches:
- "pull-request/[0-9]+"
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions: {}
jobs:
# Please keep pr-builder as the top job here
pr-builder:
needs:
- build-details
- check-nightly-ci
- changed-files
- checks
- cmake-tests
- conda-cpp-build
- cpp-linters
- conda-cpp-checks
- conda-cpp-tests
- conda-python-build
- conda-python-build-noarch
- conda-python-cudf-tests
- conda-python-cudf-polars-tests
- conda-python-other-tests
- java-build-matrix
- java-build
- java-tests
- conda-notebook-tests
- docs-build
- docs-build-matrix
- publish-api-docs
- wheel-build
- wheel-tests-cudf
- wheel-tests-cudf-polars
- cudf-polars-polars-tests
- wheel-python-build-noarch
- wheel-tests-dask-cudf
- devcontainer
- unit-tests-cudf-pandas
- pandas-tests-shards
- pandas-tests
- pandas-tests-summary
- narwhals-tests
- telemetry-setup
- third-party-integration-tests-cudf-pandas
uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@main
permissions:
contents: read
if: always()
with:
needs: ${{ toJSON(needs) }}
telemetry-setup:
permissions:
id-token: write
continue-on-error: true
runs-on: ubuntu-latest
env:
OTEL_SERVICE_NAME: 'pr-cudf'
steps:
- name: Telemetry setup
if: ${{ vars.TELEMETRY_ENABLED == 'true' }}
uses: rapidsai/shared-actions/telemetry-dispatch-stash-base-env-vars@main
build-details:
uses: rapidsai/shared-workflows/.github/workflows/compute-build-details.yaml@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@090577647b8ddc4e06e809e264f7881650ecdccf # 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: 14
changed-files:
permissions:
actions: read
contents: read
packages: read
pull-requests: read
needs: telemetry-setup
uses: rapidsai/shared-workflows/.github/workflows/changed-files.yaml@main
with:
files_yaml: |
build_docs:
- 'docs/**'
- 'cpp/doxygen/**'
- 'cpp/include/**'
- 'cpp/libcudf_kafka/include/**'
- 'ci/build_docs.sh'
- 'python/**'
test_cpp_common:
- 'conda/recipes/libcudf/**'
- 'RAPIDS_BRANCH'
- 'build.sh'
- 'dependencies.yaml'
- 'ci/build_cpp.sh'
- 'ci/test_cpp.sh'
- 'ci/test_cpp_common.sh'
- '.github/workflows/pr.yaml'
test_cpp_libcudf:
- 'ci/run_cudf_ctests.sh'
- 'cpp/tests/**'
test_cpp_examples:
- 'ci/run_cudf_examples.sh'
- 'cpp/examples/**'
test_cpp_kafka:
- 'ci/run_cudf_kafka_ctests.sh'
- 'cpp/libcudf_kafka/tests/**'
test_cpp_streaming:
- 'ci/run_cudf_streaming_ctests.sh'
- 'cpp/libcudf_streaming/examples/**'
- 'cpp/libcudf_streaming/tests/**'
cpp_test_files:
- 'cpp/examples/**'
- 'cpp/libcudf_kafka/tests/**'
- 'cpp/libcudf_streaming/examples/**'
- 'cpp/libcudf_streaming/tests/**'
- 'cpp/tests/**'
cpp_build_inputs:
- 'cpp/CMakeLists.txt'
- 'cpp/cmake/**'
- 'cpp/include/**'
- 'cpp/libcudf_kafka/CMakeLists.txt'
- 'cpp/libcudf_kafka/cmake/**'
- 'cpp/libcudf_kafka/include/**'
- 'cpp/libcudf_kafka/src/**'
- 'cpp/libcudf_streaming/CMakeLists.txt'
- 'cpp/libcudf_streaming/cmake/**'
- 'cpp/libcudf_streaming/include/**'
- 'cpp/libcudf_streaming/scripts/**'
- 'cpp/libcudf_streaming/src/**'
- 'cpp/scripts/gdb-pretty-printers.py'
- 'cpp/scripts/load-pretty-printers.in'
- 'cpp/src/**'
- 'cmake/**'
test_cmake:
- 'ci/test_cmake.sh'
cpp_linters:
- 'cpp/.clang-tidy'
- 'cpp/scripts/parse_iwyu_output.py'
- 'ci/cpp_linters.sh'
unit_tests_cudf_pandas:
- 'python/cudf/cudf/pandas/**'
- 'ci/cudf_pandas_scripts/run_tests.sh'
- 'ci/utils/get_matrix_values.py'
test_java:
- 'java/**'
- 'RAPIDS_BRANCH'
- 'dependencies.yaml'
- 'ci/build_java.sh'
- '.github/workflows/pr.yaml'
- '.github/workflows/cudf-spark-jni.yaml'
test_java_packaged:
- 'ci/test_packaged_java.sh'
test_notebooks:
- 'python/cudf/**'
- '!python/cudf/cudf/pandas/**'
- 'python/dask_cudf/**'
- 'notebooks/**'
- 'dependencies.yaml'
- 'ci/test_notebooks.sh'
- 'ci/utils/nbtest.sh'
test_python_all:
- 'python/libcudf/**'
- 'python/pylibcudf/**'
- 'RAPIDS_BRANCH'
- 'dependencies.yaml'
- '.github/workflows/pr.yaml'
test_python_cudf:
- 'python/cudf/**'
test_python_cudf_benchmarks:
- 'python/cudf/**'
- '!python/cudf/cudf/pandas/**'
test_python_other:
- 'ci/test_python_other.sh'
test_python_dask_cudf:
- 'python/dask_cudf/**'
- 'ci/run_dask_cudf_pytests.sh'
test_python_cudf_kafka:
- 'python/cudf_kafka/**'
- 'ci/run_cudf_kafka_pytests.sh'
test_python_custreamz:
- 'python/custreamz/**'
- 'ci/run_custreamz_pytests.sh'
test_python_cudf_streaming_runner:
- 'ci/run_cudf_streaming_pytests.sh'
test_python_cudf_polars:
- 'python/cudf_polars/**'
- 'ci/test_python_cudf_polars.sh'
test_python_cudf_streaming:
- 'python/cudf_streaming/**'
- 'python/libcudf_streaming/**'
test_python_conda_builds:
- 'conda/**'
- 'build.sh'
- 'ci/build_cpp.sh'
- 'ci/build_python.sh'
- 'ci/build_python_noarch.sh'
test_python_conda_common:
- 'ci/test_python_common.sh'
test_python_conda_cudf:
- 'ci/test_python_cudf.sh'
test_python_conda_pylibcudf:
- 'ci/run_pylibcudf_pytests.sh'
test_python_conda_cudf_tests:
- 'ci/run_cudf_pytests.sh'
test_python_conda_cudf_benchmarks:
- 'ci/run_cudf_pytest_benchmarks.sh'
- 'ci/run_cudf_pandas_pytest_benchmarks.sh'
- 'ci/run_pylibcudf_pytests.sh'
test_python_cuml:
- 'ci/test_cuml_compat.sh'
test_python_narwhals:
- 'ci/test_narwhals.sh'
test_python_wheels:
- 'ci/build_wheel_noarch.sh'
- 'ci/build_wheel.sh'
- 'ci/build_wheel_common.sh'
- 'ci/validate_wheel.sh'
- '.github/workflows/build.yaml'
- '.github/workflows/wheels-build-stage.yaml'
test_python_wheel_cudf:
- 'ci/test_wheel_cudf.sh'
test_python_wheel_cudf_polars:
- 'ci/test_wheel_cudf_polars.sh'
- 'ci/utils/get_matrix_values.py'
test_python_wheel_dask_cudf:
- 'ci/test_wheel_dask_cudf.sh'
test_python_cudf_polars_polars:
- 'ci/test_cudf_polars_polars_tests.sh'
- 'ci/run_cudf_polars_polars_tests.sh'
- 'ci/cudf_polars/polars_test_deselections*.txt'
test_python_cudf_polars_runner:
- 'ci/run_cudf_polars_pytests.sh'
test_cudf_pandas_third_party_integration:
- 'ci/cudf_pandas_scripts/third-party-integration/**'
test_cudf_pandas_pandas_tests:
- 'ci/cudf_pandas_scripts/pandas-tests/**'
test_wheel_dask_cudf:
- 'python/cudf/**'
- '!python/cudf/cudf/pandas/**'
- 'python/dask_cudf/**'
checks:
permissions:
contents: read
needs: telemetry-setup
uses: rapidsai/shared-workflows/.github/workflows/checks.yaml@main
with:
enable_check_generated_files: false
ignored_pr_jobs: "telemetry-summarize cudf-spark-jni cuml-compat-tests"
# Main builds seed this cache. PR merge refs can restore it but should not create
# duplicate archives that are inaccessible to other PRs.
pre-commit-cache-read-only: true
conda-cpp-build:
needs: [build-details, checks]
permissions:
actions: read
contents: read
id-token: write
packages: read
pull-requests: read
secrets: inherit # zizmor: ignore[secrets-inherit]
uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@main
with:
build_type: pull-request
build-datetime: ${{ needs.build-details.outputs.build-datetime }}
node_type: cpu16
script: ci/build_cpp.sh
cmake-tests:
needs: [checks, changed-files]
permissions:
actions: read
contents: read
id-token: write
packages: read
pull-requests: read
secrets: inherit # zizmor: ignore[secrets-inherit]
uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main
if: fromJSON(needs.changed-files.outputs.changed_file_groups).cpp_build_inputs || fromJSON(needs.changed-files.outputs.changed_file_groups).test_cmake
with:
build_type: pull-request
node_type: cpu16
arch: "amd64"
container_image: "rapidsai/ci-conda:26.12-latest"
script: "ci/test_cmake.sh"
cpp-linters:
permissions:
actions: read
contents: read
id-token: write
packages: read
pull-requests: read
secrets: inherit # zizmor: ignore[secrets-inherit]
needs: [checks, changed-files]
uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main
if: >
fromJSON(needs.changed-files.outputs.changed_file_groups).cpp_build_inputs ||
fromJSON(needs.changed-files.outputs.changed_file_groups).cpp_test_files ||
fromJSON(needs.changed-files.outputs.changed_file_groups).cpp_linters
with:
build_type: pull-request
script: "ci/cpp_linters.sh"
conda-cpp-checks:
needs: conda-cpp-build
permissions:
actions: read
contents: read
id-token: write
packages: read
pull-requests: read
uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-post-build-checks.yaml@main
with:
build_type: pull-request
package_name: libcudf
conda-cpp-tests:
needs: [conda-cpp-build, changed-files]
permissions:
actions: read
contents: read
id-token: write
packages: read
pull-requests: read
secrets: inherit # zizmor: ignore[secrets-inherit]
uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-tests.yaml@main
if: >
fromJSON(needs.changed-files.outputs.changed_file_groups).cpp_build_inputs ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp_common ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp_libcudf ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp_examples ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp_kafka ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp_streaming
with:
build_type: pull-request
script: >-
env
RUN_LIBCUDF_TESTS=${{ fromJSON(needs.changed-files.outputs.changed_file_groups).cpp_build_inputs || fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp_common || fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp_libcudf }}
RUN_EXAMPLES_TESTS=${{ fromJSON(needs.changed-files.outputs.changed_file_groups).cpp_build_inputs || fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp_common || fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp_examples }}
RUN_LIBCUDF_KAFKA_TESTS=${{ fromJSON(needs.changed-files.outputs.changed_file_groups).cpp_build_inputs || fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp_common || fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp_kafka }}
RUN_LIBCUDF_STREAMING_TESTS=${{ fromJSON(needs.changed-files.outputs.changed_file_groups).cpp_build_inputs || fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp_common || fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp_streaming }}
ci/test_cpp.sh
cache-paths: .cache/libcudf
cache-key-prefix: libcudf-rtcx-v2
# Caches are immutable. Re-key when the embedded JIT runtime or its tests change so a
# completed run can save newly compiled entries; restore a compatible earlier archive first.
cache-key-files: |
cpp/CMakeLists.txt
cpp/cmake/**
cpp/include/cudf/**
cpp/src/jit/**
cpp/src/binaryop/jit/**
cpp/src/join/jit/**
cpp/src/transform/jit/**
cpp/tests/**
dependencies.yaml
# The JIT cache is independent of the Python interpreter used to run C++ tests.
cache-key-matrix-fields: |
CUDA_VER
ARCH
LINUX_VER
GPU
DRIVER
DEPENDENCIES
# PRs restore a compatible main cache but do not create merge-ref-scoped entries.
cache-read-only: true
cache-environment: |
LIBCUDF_KERNEL_CACHE_PATH=.cache/libcudf
LIBCUDF_KERNEL_CACHE_PRELOAD=1
# https://github.com/NVIDIA/cudf/issues/23498
matrix_filter: map(select(.GPU != "gb300" and .GPU != "gh200"))
conda-python-build:
needs: [build-details, conda-cpp-build]
permissions:
actions: read
contents: read
id-token: write
packages: read
pull-requests: read
secrets: inherit # zizmor: ignore[secrets-inherit]
uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@main
with:
build_type: pull-request
build-datetime: ${{ needs.build-details.outputs.build-datetime }}
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-build-noarch:
needs: [build-details, checks]
permissions:
actions: read
contents: read
id-token: write
packages: read
pull-requests: read
secrets: inherit # zizmor: ignore[secrets-inherit]
uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@main
with:
build_type: pull-request
build-datetime: ${{ needs.build-details.outputs.build-datetime }}
script: ci/build_python_noarch.sh
pure-conda: cuda_major
conda-python-cudf-tests:
needs: [conda-python-build, conda-python-build-noarch, changed-files]
permissions:
actions: read
contents: read
id-token: write
packages: read
pull-requests: read
secrets: inherit # zizmor: ignore[secrets-inherit]
uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@main
if: >
fromJSON(needs.changed-files.outputs.changed_file_groups).cpp_build_inputs ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_all ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_cudf ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_builds ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_common ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_cudf ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_pylibcudf ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_cudf_tests
with:
build_type: pull-request
script: >-
env
RUN_PYLIBCUDF_TESTS=${{ fromJSON(needs.changed-files.outputs.changed_file_groups).cpp_build_inputs || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_all || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_builds || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_common || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_cudf || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_pylibcudf }}
RUN_CUDF_TESTS=${{ fromJSON(needs.changed-files.outputs.changed_file_groups).cpp_build_inputs || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_all || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_cudf || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_builds || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_common || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_cudf || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_cudf_tests }}
RUN_CUDF_BENCHMARK_TESTS=false
ci/test_python_cudf.sh
# https://github.com/NVIDIA/cudf/issues/23498
matrix_filter: map(select(.GPU != "gb300" and .GPU != "gh200"))
conda-python-cudf-polars-tests:
needs: [conda-python-build, conda-python-build-noarch, changed-files]
permissions:
actions: read
contents: read
id-token: write
packages: read
pull-requests: read
secrets: inherit # zizmor: ignore[secrets-inherit]
uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@main
if: >
fromJSON(needs.changed-files.outputs.changed_file_groups).cpp_build_inputs ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_all ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_cudf_polars ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_builds ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_common ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_cudf_polars_runner
with:
build_type: pull-request
# https://github.com/NVIDIA/cudf/pull/22381/changes#r3196736965
container-options: "--cap-add CAP_SYS_PTRACE --shm-size=8g --ulimit=nofile=1000000:1000000"
script: ci/test_python_cudf_polars.sh
# https://github.com/NVIDIA/cudf/issues/23498
matrix_filter: map(select(.GPU != "gb300" and .GPU != "gh200"))
conda-python-other-tests:
# Tests for dask_cudf, cudf_kafka, custreamz, and cudf_streaming run separately from cudf_polars.
needs: [conda-python-build, conda-python-build-noarch, changed-files]
permissions:
actions: read
contents: read
id-token: write
packages: read
pull-requests: read
secrets: inherit # zizmor: ignore[secrets-inherit]
uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@main
if: >
fromJSON(needs.changed-files.outputs.changed_file_groups).cpp_build_inputs ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_all ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_other ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_dask_cudf ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_cudf_kafka ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_custreamz ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_cudf_streaming ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_builds ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_common ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_cudf_streaming_runner
with:
build_type: pull-request
# https://github.com/NVIDIA/cudf/pull/22381/changes#r3196736965
container-options: "--cap-add CAP_SYS_PTRACE --shm-size=8g --ulimit=nofile=1000000:1000000"
script: >-
env
RUN_DASK_CUDF_TESTS=${{ fromJSON(needs.changed-files.outputs.changed_file_groups).cpp_build_inputs || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_all || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_other || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_dask_cudf || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_builds || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_common }}
RUN_CUDF_KAFKA_TESTS=${{ fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_all || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_other || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_cudf_kafka || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_builds || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_common }}
RUN_CUSTREAMZ_TESTS=${{ fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_all || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_other || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_custreamz || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_builds || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_common }}
RUN_CUDF_STREAMING_TESTS=${{ fromJSON(needs.changed-files.outputs.changed_file_groups).cpp_build_inputs || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_all || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_other || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_cudf_streaming || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_builds || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_common || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_cudf_streaming_runner }}
ci/test_python_other.sh
# https://github.com/NVIDIA/cudf/issues/23498
matrix_filter: map(select(.GPU != "gb300" and .GPU != "gh200"))
# Build and test the cuDF Java JAR for every Maven classifier.
java-build-matrix:
needs: [checks]
permissions:
contents: read
uses: rapidsai/shared-workflows/.github/workflows/compute-matrix.yaml@main
with:
build_type: pull-request
matrix_name: conda-cpp-build
matrix_filter: 'map(. + {CUDA_MAJOR: (.CUDA_VER | split(".") | .[0])})'
java-build:
needs: [build-details, java-build-matrix, changed-files]
permissions:
actions: read
contents: read
id-token: write
packages: read
pull-requests: read
secrets: inherit # zizmor: ignore[secrets-inherit]
uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main
if: >
fromJSON(needs.changed-files.outputs.changed_file_groups).cpp_build_inputs ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_java ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_java_packaged
strategy:
fail-fast: false
matrix: ${{ fromJSON(needs.java-build-matrix.outputs.matrix) }}
with:
build_type: pull-request
build-datetime: ${{ needs.build-details.outputs.build-datetime }}
arch: ${{ matrix.ARCH }}
node_type: cpu16
container_image: "rapidsai/ci-wheel:26.12-cuda${{ matrix.CUDA_VER }}-${{ matrix.LINUX_VER }}-py${{ matrix.PY_VER }}"
script: "ci/build_java.sh"
file_to_upload: output_jars
artifact-name: cudf_java_${{ matrix.ARCH }}_cu${{ matrix.CUDA_MAJOR }}
java-tests:
needs: [java-build, java-build-matrix]
if: ${{ !cancelled() && needs.java-build.result == 'success' }}
permissions:
actions: read
contents: read
id-token: write
packages: read
pull-requests: read
secrets: inherit # zizmor: ignore[secrets-inherit]
uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main
strategy:
fail-fast: false
matrix: ${{ fromJSON(needs.java-build-matrix.outputs.matrix) }}
with:
build_type: pull-request
arch: ${{ matrix.ARCH }}
node_type: ${{ matrix.ARCH == 'amd64' && 'gpu-rtxpro6000-latest-1' || 'gpu-l4-latest-1' }}
container_image: "rapidsai/ci-wheel:26.12-cuda${{ matrix.CUDA_VER }}-${{ matrix.LINUX_VER }}-py${{ matrix.PY_VER }}"
script: "ci/test_packaged_java.sh"
conda-notebook-tests:
needs: [conda-python-build, conda-python-build-noarch, changed-files]
permissions:
actions: read
contents: read
id-token: write
packages: read
pull-requests: read
secrets: inherit # zizmor: ignore[secrets-inherit]
uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main
if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_notebooks
with:
build_type: pull-request
node_type: "gpu-rtxpro6000-latest-1"
arch: "amd64"
container_image: "rapidsai/ci-conda:26.12-latest"
script: "ci/test_notebooks.sh"
docs-build-matrix:
permissions:
contents: read
uses: rapidsai/shared-workflows/.github/workflows/compute-matrix.yaml@main
with:
build_type: pull-request
matrix_name: docs-build
docs-build:
needs: [docs-build-matrix, conda-python-build, conda-python-build-noarch, changed-files]
permissions:
actions: read
contents: read
id-token: write
packages: read
pull-requests: read
secrets: inherit # zizmor: ignore[secrets-inherit]
uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main
strategy:
fail-fast: false
matrix: ${{ fromJSON(needs.docs-build-matrix.outputs.matrix) }}
if: fromJSON(needs.changed-files.outputs.changed_file_groups).build_docs || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_all
with:
build_type: pull-request
node_type: "gpu-${{ matrix.GPU }}-${{ matrix.DRIVER }}-1"
arch: "${{ matrix.arch }}"
container_image: "rapidsai/ci-conda:26.12-cuda${{ matrix.CUDA_VER }}-${{ matrix.LINUX_VER }}-py${{ matrix.PY_VER }}"
script: "ci/build_docs.sh"
publish-api-docs:
needs: [docs-build]
permissions:
contents: read
id-token: write
secrets:
akamai-access-token: ${{ secrets.NVIDIA_DOCS_AKAMAI_ACCESS_TOKEN }}
akamai-client-token: ${{ secrets.NVIDIA_DOCS_AKAMAI_CLIENT_TOKEN }}
akamai-client-secret: ${{ secrets.NVIDIA_DOCS_AKAMAI_CLIENT_SECRET }}
akamai-emails-to-notify: ${{ secrets.NVIDIA_DOCS_AKAMAI_EMAILS_TO_NOTIFY }}
akamai-host: ${{ secrets.NVIDIA_DOCS_AKAMAI_HOST }}
target-aws-access-key-id: ${{ secrets.NVIDIA_DOCS_AWS_ACCESS_KEY_ID }}
target-aws-region: ${{ secrets.NVIDIA_DOCS_AWS_REGION }}
target-aws-secret-access-key: ${{ secrets.NVIDIA_DOCS_AWS_SECRET_ACCESS_KEY }}
target-s3-bucket: ${{ secrets.NVIDIA_DOCS_S3_BUCKET }}
uses: rapidsai/shared-workflows/.github/workflows/publish-api-docs.yaml@main
with:
docs-projects: cudf,dask-cudf,libcudf
dry-run: true
wheel-build:
needs: [build-details, checks]
permissions:
actions: read
contents: read
id-token: write
packages: read
pull-requests: read
secrets: inherit # zizmor: ignore[secrets-inherit]
uses: ./.github/workflows/wheels-build-stage.yaml
with:
# Build all non-noarch wheels for each CUDA x ARCH x minimum Python.
matrix_filter: group_by({CUDA_VER, ARCH}) | map(min_by(.PY_VER | split(".") | map(tonumber)))
build_type: pull-request
build-datetime: ${{ needs.build-details.outputs.build-datetime }}
node_type: cpu16
wheel-python-build-noarch:
needs: [build-details, checks]
permissions:
actions: read
contents: read
id-token: write
packages: read
pull-requests: read
secrets: inherit # zizmor: ignore[secrets-inherit]
uses: ./.github/workflows/wheels-build-stage.yaml
with:
# This selects amd64 and the latest Python for each CUDA major version.
matrix_filter: map(select(.ARCH == "amd64")) | group_by(.CUDA_VER|split(".")|map(tonumber)|.[0]) | map(max_by([(.PY_VER|split(".")|map(tonumber)), (.CUDA_VER|split(".")|map(tonumber))]))
build_type: pull-request
build-datetime: ${{ needs.build-details.outputs.build-datetime }}
node_type: cpu8
pure-wheel: true
wheel-tests-cudf:
needs: [wheel-build, changed-files]
permissions:
actions: read
contents: read
id-token: write
packages: read
pull-requests: read
secrets: inherit # zizmor: ignore[secrets-inherit]
uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main
if: >
fromJSON(needs.changed-files.outputs.changed_file_groups).cpp_build_inputs ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_all ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_cudf ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_cudf_streaming ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheel_cudf
with:
build_type: pull-request
script: >-
env
RUN_PYLIBCUDF_TESTS=${{ fromJSON(needs.changed-files.outputs.changed_file_groups).cpp_build_inputs || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_all || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheel_cudf }}
RUN_CUDF_TESTS=${{ fromJSON(needs.changed-files.outputs.changed_file_groups).cpp_build_inputs || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_all || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_cudf || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheel_cudf }}
RUN_CUDF_STREAMING_TESTS=${{ fromJSON(needs.changed-files.outputs.changed_file_groups).cpp_build_inputs || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_all || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_cudf_streaming || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels || fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheel_cudf }}
ci/test_wheel_cudf.sh
# https://github.com/NVIDIA/cudf/issues/23498
matrix_filter: map(select(.GPU != "gb300" and .GPU != "gh200"))
wheel-tests-cudf-polars:
needs: [wheel-build, wheel-python-build-noarch, changed-files]
permissions:
actions: read
contents: read
id-token: write
packages: read
pull-requests: read
secrets: inherit # zizmor: ignore[secrets-inherit]
uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main
if: >
fromJSON(needs.changed-files.outputs.changed_file_groups).cpp_build_inputs ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_all ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_cudf_polars ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheel_cudf_polars ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_cudf_polars_runner
with:
# This selects "ARCH=amd64 + the latest supported Python + CUDA".
matrix_filter: map(select(.ARCH == "amd64")) | group_by(.CUDA_VER|split(".")|map(tonumber)|.[0]) | map(max_by([(.PY_VER|split(".")|map(tonumber)), (.CUDA_VER|split(".")|map(tonumber))]))
build_type: pull-request
container-options: "--cap-add CAP_SYS_PTRACE --shm-size=8g --ulimit=nofile=1000000:1000000"
script: "env POLARS_VERSIONS=endpoints ci/test_wheel_cudf_polars.sh"
cudf-polars-polars-tests:
needs: [wheel-build, wheel-python-build-noarch, changed-files]
strategy:
fail-fast: false
matrix:
include:
- engine: spmd
shard_id: 0
num_shards: 2
- engine: spmd
shard_id: 1
num_shards: 2
permissions:
actions: read
contents: read
id-token: write
packages: read
pull-requests: read
secrets: inherit # zizmor: ignore[secrets-inherit]
uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main
if: >
fromJSON(needs.changed-files.outputs.changed_file_groups).cpp_build_inputs ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_all ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_cudf_polars ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheel_cudf_polars ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_cudf_polars_polars
with:
build_type: pull-request
branch: ${{ inputs.branch }}
date: ${{ inputs.date }}
sha: ${{ inputs.sha }}
arch: amd64
node_type: gpu-rtxpro6000-latest-1
container_image: rapidsai/citestwheel:26.12-latest
script: >-
ci/test_cudf_polars_polars_tests.sh --engine ${{ matrix.engine }}
--inject-gpu-engine-blocksize default
--cudf-polars-shard-id ${{ matrix.shard_id }}
--cudf-polars-num-shards ${{ matrix.num_shards }}
wheel-tests-dask-cudf:
needs: [wheel-build, wheel-python-build-noarch, changed-files]
permissions:
actions: read
contents: read
id-token: write
packages: read
pull-requests: read
secrets: inherit # zizmor: ignore[secrets-inherit]
uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main
if: >
fromJSON(needs.changed-files.outputs.changed_file_groups).test_wheel_dask_cudf ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheel_cudf ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheel_dask_cudf
with:
# This selects "ARCH=amd64 + the latest supported Python + CUDA".
matrix_filter: map(select(.ARCH == "amd64")) | group_by(.CUDA_VER|split(".")|map(tonumber)|.[0]) | map(max_by([(.PY_VER|split(".")|map(tonumber)), (.CUDA_VER|split(".")|map(tonumber))]))
build_type: pull-request
script: ci/test_wheel_dask_cudf.sh
# build cudf with benchmarks but disable for cudf_streaming since we can't use MPI/UCX in wheel-based builds
devcontainer:
permissions:
actions: read
contents: read
id-token: write
packages: read
pull-requests: read
secrets: inherit # zizmor: ignore[secrets-inherit]
needs: telemetry-setup
uses: rapidsai/shared-workflows/.github/workflows/build-in-devcontainer.yaml@main
with:
arch: '["amd64", "arm64"]'
cuda: '["13.3"]'
node_type: "cpu8"
timeout-minutes: 90
env: |
SCCACHE_DIST_MAX_RETRIES=inf
SCCACHE_SERVER_LOG=sccache=debug
SCCACHE_DIST_FALLBACK_TO_LOCAL_COMPILE=false
build_command: |
sccache --zero-stats;
build-all -j0 --verbose -DBUILD_BENCHMARKS=ON 2>&1 | tee telemetry-artifacts/build.log;
sccache --show-adv-stats | tee telemetry-artifacts/sccache-stats.txt;
unit-tests-cudf-pandas:
needs: [wheel-build, changed-files]
permissions:
actions: read
contents: read
id-token: write
packages: read
pull-requests: read
secrets: inherit # zizmor: ignore[secrets-inherit]
uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main
if: fromJSON(needs.changed-files.outputs.changed_file_groups).unit_tests_cudf_pandas
with:
# This selects the latest supported Python + CUDA minor versions for each ARCH/CUDA major version combo
# Filter out GB300 due to https://github.com/NVIDIA/cudf/issues/23498
matrix_filter: group_by([(.ARCH), (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | map(max_by([(.PY_VER|split(".")|map(tonumber)), (.CUDA_VER|split(".")|map(tonumber))])) | map(select(.GPU != "gb300" and .GPU != "gh200"))
build_type: pull-request
script: ci/cudf_pandas_scripts/run_tests.sh
third-party-integration-tests-cudf-pandas:
needs: [conda-python-build, conda-python-build-noarch, changed-files]
permissions:
actions: read
contents: read
id-token: write
packages: read
pull-requests: read
secrets: inherit # zizmor: ignore[secrets-inherit]
uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main
if: >
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_all ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_cudf ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_builds ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_cudf_pandas_third_party_integration
with:
build_type: pull-request
branch: ${{ inputs.branch }}
date: ${{ inputs.date }}
sha: ${{ inputs.sha }}
node_type: "gpu-rtxpro6000-latest-1"
continue-on-error: true
container_image: "rapidsai/ci-conda:26.12-latest"
script: |
ci/cudf_pandas_scripts/third-party-integration/test.sh python/cudf/cudf_pandas_tests/third_party_integration_tests/dependencies.yaml
cuml-compat-tests:
needs: [conda-python-build, conda-python-build-noarch, changed-files]
permissions:
actions: read
contents: read
id-token: write
packages: read
pull-requests: read
secrets: inherit # zizmor: ignore[secrets-inherit]
uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main
if: >
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_all ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_cudf ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_builds ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_common ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_cuml
with:
build_type: pull-request
branch: ${{ inputs.branch }}
date: ${{ inputs.date }}
sha: ${{ inputs.sha }}
node_type: "gpu-rtxpro6000-latest-1"
continue-on-error: true
container_image: "rapidsai/ci-conda:26.12-latest"
script: "ci/test_cuml_compat.sh"
pandas-tests-shards:
# Single source of truth for the shard count: both the matrix below and the
# num-shards argument the scripts receive are derived from NUM_SHARDS here,
# so the two can no longer drift apart.
permissions: {}
runs-on: ubuntu-latest
outputs:
num_shards: ${{ steps.shards.outputs.num_shards }}
shard_ids: ${{ steps.shards.outputs.shard_ids }}
steps:
- id: shards
env:
NUM_SHARDS: 3
run: |
{
echo "num_shards=${NUM_SHARDS}"
echo "shard_ids=$(seq 0 $((NUM_SHARDS - 1)) | jq -sc .)"
} >> "$GITHUB_OUTPUT"
pandas-tests:
# run the Pandas unit tests using PR branch, sharded across runners.
needs: [wheel-build, changed-files, pandas-tests-shards]
strategy:
fail-fast: false
matrix:
shard_id: ${{ fromJSON(needs.pandas-tests-shards.outputs.shard_ids) }}
permissions:
actions: read
contents: read
id-token: write
packages: read
pull-requests: read
uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main
if: >
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_all ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_cudf ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_cudf_pandas_pandas_tests
with:
build_type: pull-request
branch: ${{ inputs.branch }}
date: ${{ inputs.date }}
sha: ${{ inputs.sha }}
node_type: "gpu-rtxpro6000-latest-1"
container_image: "rapidsai/citestwheel:26.12-latest"
script: "ci/cudf_pandas_scripts/pandas-tests/run.sh pr ${{ matrix.shard_id }} ${{ needs.pandas-tests-shards.outputs.num_shards }}"
file_to_upload: ./pr-results.json
artifact-name: "pandas-test-pr-results-${{ matrix.shard_id }}"
pandas-tests-summary:
# Merge the sharded Pandas test results and post the diff against nightly.
# Informational only; the pass/fail signal comes from the pandas-tests job.
needs: [pandas-tests, changed-files, pandas-tests-shards]
permissions:
actions: read
contents: read
id-token: write
packages: read
pull-requests: read
uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main
# Run whenever the shards ran (pass or fail) so we always get a diff, but
# not when pandas-tests was skipped. continue-on-error keeps this purely
# informational job from ever blocking the PR.
if: ${{ !cancelled() && needs.pandas-tests.result != 'skipped' }}
with:
build_type: pull-request
branch: ${{ inputs.branch }}
date: ${{ inputs.date }}
sha: ${{ inputs.sha }}
node_type: "cpu8"
continue-on-error: true
container_image: "rapidsai/citestwheel:26.12-latest"
script: "ci/cudf_pandas_scripts/pandas-tests/summary.sh ${{ needs.pandas-tests-shards.outputs.num_shards }}"
narwhals-tests:
needs: [conda-python-build, conda-python-build-noarch, changed-files]
permissions:
actions: read
contents: read
id-token: write
packages: read
pull-requests: read
secrets: inherit # zizmor: ignore[secrets-inherit]
uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main
if: >
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_all ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_cudf ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_cudf_polars ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_builds ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda_common ||
fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_narwhals
with:
build_type: pull-request
branch: ${{ inputs.branch }}
date: ${{ inputs.date }}
sha: ${{ inputs.sha }}
node_type: "gpu-rtxpro6000-latest-1"
container_image: "rapidsai/ci-conda:26.12-latest"
script: ci/test_narwhals.sh
cudf-spark-jni:
needs: changed-files
permissions:
actions: read
contents: read
id-token: write
packages: read
pull-requests: read
uses: ./.github/workflows/cudf-spark-jni.yaml
if: fromJSON(needs.changed-files.outputs.changed_file_groups).cpp_build_inputs || fromJSON(needs.changed-files.outputs.changed_file_groups).test_java
with:
cudf_commit: ${{ github.sha }}
telemetry-summarize:
# This job must use a self-hosted runner to record telemetry traces.
runs-on: linux-amd64-cpu4
permissions:
actions: write
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 }}