From 93e532912da60c32faacef0b52f90b75bc6209d5 Mon Sep 17 00:00:00 2001 From: Paul Aiyedun <53453937+paul-aiyedun@users.noreply.github.com> Date: Mon, 27 Jul 2026 17:28:06 +0000 Subject: [PATCH 01/29] Fill Java CI gaps for Maven Central publication * Seed unclassified primary JAR from the cuda12 classifier in assemble_maven_repo.sh. * Detect release-tag builds via rapids-is-release-build. Strip -SNAPSHOT and rewrite the POM before packaging. * Require GITHUB_REF in build_cudf_java_jar.sh and forward it into the container. * Default GITHUB_REF to the current branch in test_java_build_local.sh so local runs stay on the SNAPSHOT path. * Document release-tag vs SNAPSHOT versioning in java/ci/README.md. --- java/ci/README.md | 22 +++++++++++++++++++-- java/ci/assemble_maven_repo.sh | 16 ++++++++++++++- java/ci/build_cudf_java_jar.sh | 3 +++ java/ci/build_cudf_java_jar_in_container.sh | 8 ++++++++ java/ci/test_java_build_local.sh | 6 ++++++ 5 files changed, 52 insertions(+), 3 deletions(-) diff --git a/java/ci/README.md b/java/ci/README.md index 45a019f7d408..87a278a5a5b5 100644 --- a/java/ci/README.md +++ b/java/ci/README.md @@ -72,12 +72,14 @@ inside the container. This walks every subdirectory of `--jars-dir` (each subdir name IS the classifier), gathers the per-classifier JAR, one shared sources jar, one -shared javadoc jar, and the shared POM, derives the artifact version from -the JAR filenames (requiring a single unique version across subdirs), and +shared javadoc jar, the shared POM, and seeds an unclassified primary JAR +as a copy of the `cuda12` classifier. Derives the artifact version from +the JAR filenames (requiring a single unique version across subdirs) and lays them out as: ``` /tmp/maven-repo/ai/rapids/cudf/26.08.0-SNAPSHOT/ + cudf-26.08.0-SNAPSHOT.jar cudf-26.08.0-SNAPSHOT-cuda12.jar cudf-26.08.0-SNAPSHOT-cuda13.jar cudf-26.08.0-SNAPSHOT-sources.jar @@ -90,6 +92,22 @@ The set of classifiers is whatever subdirectories are present under and `/tmp/jars/cuda13/`. For the full four-way release build, add `/tmp/jars/cuda12-arm64/` and `/tmp/jars/cuda13-arm64/`. +### Release Tag vs SNAPSHOT versioning + +Release tag CI runs (`GITHUB_REF=refs/tags/vYY.MM.PP`) produce release-versioned +JARs (`cudf-26.08.0-*.jar`). All other runs produce `-SNAPSHOT`. Gated by +[`rapids-is-release-build`](https://github.com/rapidsai/gha-tools/blob/main/tools/rapids-is-release-build). +`GITHUB_REF` is required. `test_java_build_local.sh` defaults it to the current +branch. + +To rehearse the release path locally: + + GITHUB_REF=refs/tags/vYY.MM.PP ./java/ci/test_java_build_local.sh + +Rewrites `java/pom.xml` in place. Restore with `git checkout java/pom.xml`. + +### GitHub Actions + In GitHub Actions (`.github/workflows/build.yaml`), the `java-build` matrix job runs Steps 1-2 per (CUDA x arch) entry and uploads each classifier subdir as a per-entry artifact. The separate `java-gather` job downloads them (with diff --git a/java/ci/assemble_maven_repo.sh b/java/ci/assemble_maven_repo.sh index 96bf8c8f33f3..2e384fd2c1d0 100755 --- a/java/ci/assemble_maven_repo.sh +++ b/java/ci/assemble_maven_repo.sh @@ -166,12 +166,26 @@ if [[ -z "${FIRST_VERSION}" ]]; then exit 1 fi +DEST_DIR="${OUTPUT_DIR}/${GROUP_PATH}/${ARTIFACT_ID}/${FIRST_VERSION}" + +# Seed the unclassified primary from cuda12. Maven Central serves this to +# consumers depending on ai.rapids:cudf without a . +PRIMARY_SOURCE="${DEST_DIR}/cudf-${FIRST_VERSION}-cuda12.jar" +if [[ ! -f "${PRIMARY_SOURCE}" ]]; then + echo "Error: ${PRIMARY_SOURCE} missing." >&2 + exit 1 +fi +UNCLASSIFIED="${DEST_DIR}/cudf-${FIRST_VERSION}.jar" +if [[ ! -f "${UNCLASSIFIED}" ]]; then + cp -f "${PRIMARY_SOURCE}" "${UNCLASSIFIED}" + echo " + cudf-${FIRST_VERSION}.jar (unclassified primary, copy of cuda12)" +fi + # Sources and javadoc jars are classifier-independent (pure Java, no arch or # cuda variation). Every classifier subdir produces byte-equivalent copies; # pick the lexicographically first subdir's copy as canonical. Fail fast if # any subdir is missing either file - that indicates -Prelease or # -Pjavadoc-jdk17 did not activate for that classifier's build. -DEST_DIR="${OUTPUT_DIR}/${GROUP_PATH}/${ARTIFACT_ID}/${FIRST_VERSION}" FIRST_CLASSIFIER_SUBDIR="" for subdir in "${JARS_DIR}"/*/; do if [[ -z ${FIRST_CLASSIFIER_SUBDIR} ]]; then diff --git a/java/ci/build_cudf_java_jar.sh b/java/ci/build_cudf_java_jar.sh index 084b00c68478..acdf38feb735 100755 --- a/java/ci/build_cudf_java_jar.sh +++ b/java/ci/build_cudf_java_jar.sh @@ -121,6 +121,8 @@ require_arg --libcudf-dir "${LIBCUDF_DIR}" require_arg --output-dir "${OUTPUT_DIR}" require_arg --cuda-version "${CUDA_VERSION}" +: "${GITHUB_REF:?GITHUB_REF must be set.}" + if [[ ! -d ${LIBCUDF_DIR} ]]; then echo "Error: --libcudf-dir '${LIBCUDF_DIR}' does not exist." exit 1 @@ -194,6 +196,7 @@ DOCKER_ARGS=( --env PARALLEL_LEVEL="${PARALLEL_LEVEL}" --env HOST_UID="$(id -u)" --env HOST_GID="$(id -g)" + --env GITHUB_REF="${GITHUB_REF}" ) if [[ -n ${CMAKE_CUDA_ARCHITECTURES} ]]; then diff --git a/java/ci/build_cudf_java_jar_in_container.sh b/java/ci/build_cudf_java_jar_in_container.sh index e02ea3171508..197c85c3bc64 100755 --- a/java/ci/build_cudf_java_jar_in_container.sh +++ b/java/ci/build_cudf_java_jar_in_container.sh @@ -107,6 +107,14 @@ fi cd "${REPO_ROOT}/java" CUDF_VERSION="$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout "${BUILD_ARG[@]}")" + +# Release tag builds strip -SNAPSHOT and rewrite the POM so packaged artifacts +# carry the release version. Non-release builds keep -SNAPSHOT. +if rapids-is-release-build 2>/dev/null; then + CUDF_VERSION="${CUDF_VERSION%-SNAPSHOT}" + mvn -B versions:set -DnewVersion="${CUDF_VERSION}" -DgenerateBackupPoms=false "${BUILD_ARG[@]}" +fi + rapids-logger "Packaging cuDF Java JAR version ${CUDF_VERSION} (libcudf: ${CUDF_INSTALL_DIR})" # The `clean` goal is intentionally omitted: /repo/java/target is a diff --git a/java/ci/test_java_build_local.sh b/java/ci/test_java_build_local.sh index 1d67ad62771d..672dd72bcef7 100755 --- a/java/ci/test_java_build_local.sh +++ b/java/ci/test_java_build_local.sh @@ -143,6 +143,12 @@ record_step_end() { parse_args "$@" +# Mirror GHA's GITHUB_REF locally so the container distinguishes SNAPSHOT from release-tag builds. +if [[ -z "${GITHUB_REF:-}" ]]; then + GITHUB_REF="$(git -C "${SCRIPT_DIR}" symbolic-ref HEAD 2>/dev/null || true)" +fi +export GITHUB_REF + require_arg --work-dir "${WORK_DIR}" mkdir -p "${WORK_DIR}" From ecf8bdef804b3c25160611f283b4d62e6af0544d Mon Sep 17 00:00:00 2001 From: Paul Aiyedun <53453937+paul-aiyedun@users.noreply.github.com> Date: Mon, 27 Jul 2026 21:13:06 +0000 Subject: [PATCH 02/29] TEMPORARY: commit for testing CI --- .github/workflows/pr.yaml | 75 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index d2a097dbdf43..a4ae7607ca50 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -44,6 +44,8 @@ jobs: - narwhals-tests - telemetry-setup - third-party-integration-tests-cudf-pandas + - java-build + - java-gather uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@release/26.08 permissions: contents: read @@ -874,3 +876,76 @@ jobs: uses: rapidsai/shared-actions/telemetry-dispatch-summarize@main env: GH_TOKEN: ${{ github.token }} + # Copy of build.yaml's java-build (lines 475-514). Pins GITHUB_REF to + # rehearse the release-tag path on every PR. Mirror any build.yaml edits here. + java-build: + needs: [telemetry-setup] + env: + GITHUB_REF: refs/tags/v26.08.0 + strategy: + fail-fast: false + matrix: + include: + - { cuda: "12.9", cuda_major: "12", arch: "x86_64", runner: "linux-amd64-cpu16" } + - { cuda: "13.3", cuda_major: "13", arch: "x86_64", runner: "linux-amd64-cpu16" } + - { cuda: "12.9", cuda_major: "12", arch: "aarch64", runner: "linux-arm64-cpu16" } + - { cuda: "13.3", cuda_major: "13", arch: "aarch64", runner: "linux-arm64-cpu16" } + runs-on: ${{ matrix.runner }} + permissions: + contents: read + steps: + - name: Checkout code repo + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + with: + ref: ${{ inputs.sha }} + fetch-depth: 0 + persist-credentials: false + - name: Build static libcudf + run: | + ./java/ci/build_static_libcudf.sh \ + --output-dir "${RUNNER_TEMP}/libcudf" \ + --cuda-version "${{ matrix.cuda }}" + - name: Build cuDF Java JAR + run: | + ./java/ci/build_cudf_java_jar.sh \ + --libcudf-dir "${RUNNER_TEMP}/libcudf" \ + --output-dir "${RUNNER_TEMP}/jars" \ + --cuda-version "${{ matrix.cuda }}" + - name: Upload per-entry JAR artifact + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: cudf_java_cuda${{ matrix.cuda_major }}_${{ matrix.arch }} + # Ship only the JARs and POMs. Exclude the per-classifier Maven build scratch dir. + path: | + ${{ runner.temp }}/jars + !${{ runner.temp }}/jars/.mvn-temp-target + if-no-files-found: error + # Copy of build.yaml's java-gather (lines 516-543). Rehearsal companion to java-build. + java-gather: + needs: [java-build] + runs-on: linux-amd64-cpu4 + permissions: + contents: read + steps: + - name: Checkout code repo + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + with: + ref: ${{ inputs.sha }} + persist-credentials: false + - name: Download per-entry JAR artifacts + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + with: + pattern: cudf_java_cuda* + path: ${{ runner.temp }}/jars + merge-multiple: true + - name: Assemble Maven repository layout + run: | + ./java/ci/assemble_maven_repo.sh \ + --jars-dir "${RUNNER_TEMP}/jars" \ + --output-dir "${RUNNER_TEMP}/maven-repo" + - name: Upload combined Maven repository artifact + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: cudf_java_maven_repo + path: ${{ runner.temp }}/maven-repo + if-no-files-found: error From e7d81cd318044f1eef7330c29159a6e6e50c7bbb Mon Sep 17 00:00:00 2001 From: Paul Aiyedun <53453937+paul-aiyedun@users.noreply.github.com> Date: Tue, 28 Jul 2026 18:43:13 +0000 Subject: [PATCH 03/29] TEMPORARY: commit for testing CI (simulate release) --- .github/workflows/pr.yaml | 873 +------------------- java/ci/build_cudf_java_jar_in_container.sh | 7 + 2 files changed, 18 insertions(+), 862 deletions(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index a4ae7607ca50..6e4831829685 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -1,3 +1,12 @@ +# TEMPORARY (revert before merge): this file is stripped down to just the +# java-build / java-gather rehearsal chain so a PR push can produce the +# cudf_java_maven_repo artifact used by the maven-publish end-to-end test +# without spending CI time on the rest of the PR pipeline. Restore the full +# PR workflow before merging. +# +# Paired with the temporary in-container GITHUB_REF override in +# java/ci/build_cudf_java_jar_in_container.sh, which forces the release-tag +# path so the produced artifact is release-shaped (no -SNAPSHOT). name: pr on: push: @@ -8,50 +17,6 @@ concurrency: cancel-in-progress: true permissions: {} jobs: - # Please keep pr-builder as the top job here - pr-builder: - needs: - - 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-other-tests - - conda-java-tests - - conda-notebook-tests - - docs-build - - wheel-build-libcudf - - wheel-build-libcudf-streaming - - wheel-build-cudf-streaming - - wheel-tests-cudf-streaming - - wheel-build-pylibcudf - - wheel-build-cudf - - wheel-tests-cudf - - wheel-build-cudf-polars - - wheel-tests-cudf-polars - - cudf-polars-polars-tests - - wheel-build-dask-cudf - - wheel-tests-dask-cudf - - devcontainer - - unit-tests-cudf-pandas - - pandas-tests - - narwhals-tests - - telemetry-setup - - third-party-integration-tests-cudf-pandas - - java-build - - java-gather - uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@release/26.08 - permissions: - contents: read - if: always() - with: - needs: ${{ toJSON(needs) }} telemetry-setup: permissions: id-token: write @@ -63,825 +28,9 @@ jobs: - 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@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@release/26.08 - with: - files_yaml: | - build_docs: - - '**' - - '!**/REVIEW_GUIDELINES.md' - - '!.coderabbit.yaml' - - '!.clang-format' - - '!.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/auto-assign.yml' - - '!.github/workflows/issue-release-scheduled.yml' - - '!.github/workflows/labeler.yml' - - '!.github/workflows/pr_issue_status_automation.yml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!ci/build_wheel*.sh' - - '!ci/check_style.sh' - - '!ci/discover_libcudf_tests.sh' - - '!ci/release/update-version.sh' - - '!ci/run_*.sh' - - '!ci/test_*.sh' - - '!ci/validate_wheel.sh' - - '!codecov.yml' - - '!SECURITY.md' - test_cpp: - - '**' - - '!**/REVIEW_GUIDELINES.md' - - '!.coderabbit.yaml' - - '!.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/auto-assign.yml' - - '!.github/workflows/issue-release-scheduled.yml' - - '!.github/workflows/labeler.yml' - - '!.github/workflows/pr_issue_status_automation.yml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!CONTRIBUTING.md' - - '!README.md' - - '!SECURITY.md' - - '!ci/cudf_pandas_scripts/**' - - '!ci/build_docs.sh' - - '!ci/build_python*.sh' - - '!ci/build_wheel*.sh' - - '!ci/check_style.sh' - - '!ci/cudf_pandas_scripts/**' - - '!ci/release/update-version.sh' - - '!ci/test_python*.sh' - - '!ci/test_wheel*.sh' - - '!ci/validate_wheel.sh' - - '!docs/**' - - '!img/**' - - '!java/**' - - '!notebooks/**' - - '!python/**' - test_cudf_pandas: - - '**' - - '!**/REVIEW_GUIDELINES.md' - - '!.coderabbit.yaml' - - '!.clang-format' - - '!.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/auto-assign.yml' - - '!.github/workflows/issue-release-scheduled.yml' - - '!.github/workflows/labeler.yml' - - '!.github/workflows/pr_issue_status_automation.yml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!CONTRIBUTING.md' - - '!README.md' - - '!SECURITY.md' - - '!ci/release/update-version.sh' - - '!ci/test_java.sh' - - '!ci/validate_wheel.sh' - - '!docs/**' - - '!img/**' - - '!java/**' - - '!notebooks/**' - test_java: - - '**' - - '!**/REVIEW_GUIDELINES.md' - - '!.coderabbit.yaml' - - '!.clang-format' - - '!.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/auto-assign.yml' - - '!.github/workflows/issue-release-scheduled.yml' - - '!.github/workflows/labeler.yml' - - '!.github/workflows/pr_issue_status_automation.yml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!CONTRIBUTING.md' - - '!README.md' - - '!SECURITY.md' - - '!ci/build_docs.sh' - - '!ci/build_wheel*.sh' - - '!ci/check_style.sh' - - '!ci/cudf_pandas_scripts/**' - - '!ci/release/update-version.sh' - - '!ci/test_wheel*.sh' - - '!ci/validate_wheel.sh' - - '!ci/release/update-version.sh' - - '!codecov.yml' - - '!docs/**' - - '!img/**' - - '!notebooks/**' - - '!python/**' - test_notebooks: - - '**' - - '!**/REVIEW_GUIDELINES.md' - - '!.coderabbit.yaml' - - '!.clang-format' - - '!.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/auto-assign.yml' - - '!.github/workflows/issue-release-scheduled.yml' - - '!.github/workflows/labeler.yml' - - '!.github/workflows/pr_issue_status_automation.yml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!CONTRIBUTING.md' - - '!README.md' - - '!SECURITY.md' - - '!ci/build_wheel*.sh' - - '!ci/cudf_pandas_scripts/**' - - '!ci/release/update-version.sh' - - '!ci/test_wheel*.sh' - - '!ci/validate_wheel.sh' - - '!codecov.yml' - - '!java/**' - test_python_conda: - - '**' - - '!**/REVIEW_GUIDELINES.md' - - '!.coderabbit.yaml' - - '!.clang-format' - - '!.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/auto-assign.yml' - - '!.github/workflows/issue-release-scheduled.yml' - - '!.github/workflows/labeler.yml' - - '!.github/workflows/pr_issue_status_automation.yml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!CONTRIBUTING.md' - - '!README.md' - - '!SECURITY.md' - - '!ci/build_docs.sh' - - '!ci/build_wheel*.sh' - - '!ci/check_style.sh' - - '!ci/cudf_pandas_scripts/**' - - '!ci/release/update-version.sh' - - '!ci/test_java.sh' - - '!ci/test_wheel*.sh' - - '!ci/validate_wheel.sh' - - '!docs/**' - - '!img/**' - - '!java/**' - - '!notebooks/**' - test_python_wheels: - - '**' - - '!**/REVIEW_GUIDELINES.md' - - '!.coderabbit.yaml' - - '!.clang-format' - - '!.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/auto-assign.yml' - - '!.github/workflows/issue-release-scheduled.yml' - - '!.github/workflows/labeler.yml' - - '!.github/workflows/pr_issue_status_automation.yml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!CONTRIBUTING.md' - - '!README.md' - - '!SECURITY.md' - - '!ci/build_cpp.sh' - - '!ci/build_docs.sh' - - '!ci/build_python_noarch.sh' - - '!ci/build_python.sh' - - '!ci/check-style.sh' - - '!ci/cudf_pandas_scripts/**' - - '!ci/release/update-version.sh' - - '!ci/test_cpp.sh' - - '!ci/test_cpp_common.sh' - - '!ci/test_cpp_memcheck.sh' - - '!ci/test_java.sh' - - '!ci/test_notebooks.sh' - - '!ci/test_python_common.sh' - - '!ci/test_python_cudf.sh' - - '!ci/test_python_other.sh' - - '!codecov.yml' - - '!conda/**' - - '!docs/**' - - '!img/**' - - '!java/**' - - '!notebooks/**' - not_cudf_polars: - - '**' - - '!python/cudf_polars/**' - neither_cudf_polars_nor_dask_cudf: - - '**' - - '!python/cudf_polars/**' - - '!python/dask_cudf/**' - neither_cudf_nor_dask_cudf: - - '**' - - '!python/cudf/**' - - '!python/dask_cudf/**' - neither_cpp_nor_cudf_polars_nor_dask_cudf: - - '**' - - '!cpp/**' - - '!python/cudf_polars/**' - - '!python/dask_cudf/**' - checks: - permissions: - contents: read - needs: telemetry-setup - uses: rapidsai/shared-workflows/.github/workflows/checks.yaml@release/26.08 - with: - enable_check_generated_files: false - ignored_pr_jobs: "telemetry-summarize spark-rapids-jni cuml-compat-tests" - conda-cpp-build: - needs: 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@release/26.08 - with: - build_type: pull-request - node_type: cpu16 - script: ci/build_cpp.sh - cmake-tests: - needs: 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/custom-job.yaml@release/26.08 - with: - build_type: pull-request - node_type: cpu16 - arch: "amd64" - container_image: "rapidsai/ci-conda:26.08-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 - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@release/26.08 - 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@release/26.08 - 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp - with: - build_type: pull-request - script: ci/test_cpp.sh - conda-python-build: - needs: 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@release/26.08 - 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-build-noarch: - needs: [conda-cpp-build, conda-python-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@release/26.08 - with: - build_type: pull-request - 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf - with: - build_type: pull-request - script: "ci/test_python_cudf.sh" - conda-python-other-tests: - # Tests for dask_cudf, cudf_polars, custreamz, cudf_kafka are separated for CI parallelism - needs: [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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda - with: - build_type: pull-request - # https://github.com/rapidsai/cudf/pull/22381/changes#r3196736965 - container-options: "--cap-add CAP_SYS_PTRACE --shm-size=8g --ulimit=nofile=1000000:1000000" - script: "ci/test_python_other.sh" - conda-java-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/custom-job.yaml@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_java - with: - build_type: pull-request - node_type: "gpu-l4-latest-1" - arch: "amd64" - container_image: "rapidsai/ci-conda:26.08-latest" - script: "ci/test_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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_notebooks - with: - build_type: pull-request - node_type: "gpu-l4-latest-1" - arch: "amd64" - container_image: "rapidsai/ci-conda:26.08-latest" - script: "ci/test_notebooks.sh" - docs-build: - 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).build_docs - with: - build_type: pull-request - node_type: "gpu-l4-latest-1" - arch: "amd64" - container_image: "rapidsai/ci-conda:26.08-latest" - script: "ci/build_docs.sh" - wheel-build-libcudf: - needs: 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/wheels-build.yaml@release/26.08 - with: - # build for every combination of arch and CUDA version, but only for the latest Python - matrix_filter: group_by([.ARCH, (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | map(max_by(.PY_VER|split(".")|map(tonumber))) - build_type: pull-request - node_type: cpu16 - script: "ci/build_wheel_libcudf.sh" - package-name: libcudf - package-type: cpp - wheel-build-libcudf-streaming: - needs: [checks, wheel-build-libcudf] - 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-build.yaml@release/26.08 - with: - # build for every combination of arch and CUDA version, but only for the latest Python - matrix_filter: group_by([.ARCH, (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | map(max_by(.PY_VER|split(".")|map(tonumber))) - build_type: pull-request - node_type: cpu16 - script: "ci/build_wheel_libcudf_streaming.sh" - package-name: libcudf_streaming - package-type: cpp - wheel-build-cudf-streaming: - needs: [checks, wheel-build-libcudf-streaming, wheel-build-pylibcudf] - 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-build.yaml@release/26.08 - with: - # 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))) - build_type: pull-request - node_type: cpu16 - script: "ci/build_wheel_cudf_streaming.sh" - package-name: cudf_streaming - package-type: python - wheel-tests-cudf-streaming: - needs: [wheel-build-cudf-streaming, 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels - with: - build_type: pull-request - script: ci/test_wheel_cudf_streaming.sh - wheel-build-pylibcudf: - needs: [checks, wheel-build-libcudf] - 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-build.yaml@release/26.08 - with: - build_type: pull-request - node_type: cpu8 - script: "ci/build_wheel_pylibcudf.sh" - package-name: pylibcudf - package-type: python - # 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-build-cudf: - needs: wheel-build-pylibcudf - 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-build.yaml@release/26.08 - with: - build_type: pull-request - node_type: cpu8 - script: "ci/build_wheel_cudf.sh" - package-name: cudf - package-type: python - # 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-cudf: - needs: [wheel-build-cudf, 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf - with: - build_type: pull-request - script: ci/test_wheel_cudf.sh - wheel-build-cudf-polars: - needs: wheel-build-pylibcudf - 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-build.yaml@release/26.08 - 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 - node_type: cpu8 - script: "ci/build_wheel_cudf_polars.sh" - package-name: cudf_polars - package-type: python - pure-wheel: true - wheel-tests-cudf-polars: - needs: [wheel-build-cudf-polars, wheel-build-cudf-streaming, 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_nor_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 - 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-cudf-polars, wheel-build-cudf-streaming, 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_nor_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_cudf_polars_polars_tests.sh" - wheel-build-dask-cudf: - needs: wheel-build-cudf - 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-build.yaml@release/26.08 - 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 - node_type: cpu8 - script: "ci/build_wheel_dask_cudf.sh" - package-name: dask_cudf - package-type: python - pure-wheel: true - wheel-tests-dask-cudf: - needs: [wheel-build-dask-cudf, 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).not_cudf_polars - 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@release/26.08 - 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-cudf, 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@release/26.08 - if: (fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels || fromJSON(needs.changed-files.outputs.changed_file_groups).test_cudf_pandas) && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf - with: - # This selects the latest supported Python + CUDA minor versions for each ARCH/CUDA major version combo - matrix_filter: group_by([(.ARCH), (.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/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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cpp_nor_cudf_polars_nor_dask_cudf - with: - build_type: pull-request - branch: ${{ inputs.branch }} - date: ${{ inputs.date }} - sha: ${{ inputs.sha }} - node_type: "gpu-l4-latest-1" - continue-on-error: true - container_image: "rapidsai/ci-conda:26.08-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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf - with: - build_type: pull-request - branch: ${{ inputs.branch }} - date: ${{ inputs.date }} - sha: ${{ inputs.sha }} - node_type: "gpu-l4-latest-1" - continue-on-error: true - container_image: "rapidsai/ci-conda:26.08-latest" - script: "ci/test_cuml_compat.sh" - pandas-tests: - # run the Pandas unit tests using PR branch - needs: [wheel-build-cudf, 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cpp_nor_cudf_polars_nor_dask_cudf - with: - build_type: pull-request - branch: ${{ inputs.branch }} - date: ${{ inputs.date }} - sha: ${{ inputs.sha }} - node_type: "gpu-l4-latest-1" - container_image: "rapidsai/citestwheel:26.08-latest" - script: ci/cudf_pandas_scripts/pandas-tests/run.sh pr - 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cpp_nor_cudf_polars_nor_dask_cudf - with: - build_type: pull-request - branch: ${{ inputs.branch }} - date: ${{ inputs.date }} - sha: ${{ inputs.sha }} - node_type: "gpu-l4-latest-1" - container_image: "rapidsai/ci-conda:26.08-latest" - script: ci/test_narwhals.sh - spark-rapids-jni: - needs: changed-files - permissions: - actions: read - contents: read - id-token: write - packages: read - pull-requests: read - uses: ./.github/workflows/spark-rapids-jni.yaml - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_java - 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 }} - # Copy of build.yaml's java-build (lines 475-514). Pins GITHUB_REF to - # rehearse the release-tag path on every PR. Mirror any build.yaml edits here. + # Copy of build.yaml's java-build. Mirror any build.yaml edits here. java-build: needs: [telemetry-setup] - env: - GITHUB_REF: refs/tags/v26.08.0 strategy: fail-fast: false matrix: @@ -920,7 +69,7 @@ jobs: ${{ runner.temp }}/jars !${{ runner.temp }}/jars/.mvn-temp-target if-no-files-found: error - # Copy of build.yaml's java-gather (lines 516-543). Rehearsal companion to java-build. + # Copy of build.yaml's java-gather. Rehearsal companion to java-build. java-gather: needs: [java-build] runs-on: linux-amd64-cpu4 diff --git a/java/ci/build_cudf_java_jar_in_container.sh b/java/ci/build_cudf_java_jar_in_container.sh index 197c85c3bc64..65f037758c78 100755 --- a/java/ci/build_cudf_java_jar_in_container.sh +++ b/java/ci/build_cudf_java_jar_in_container.sh @@ -108,6 +108,13 @@ cd "${REPO_ROOT}/java" CUDF_VERSION="$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout "${BUILD_ARG[@]}")" +# TEMPORARY (revert alongside the pr.yaml java-only rehearsal commit): force +# the release-tag path so this branch produces a release-shaped Maven repo +# artifact for end-to-end pipeline testing without a real tag push. GHA +# silently ignores a job-level `env: GITHUB_REF:` override, so we set it +# here where it sticks (rapids-is-release-build keys off GITHUB_REF). +export GITHUB_REF=refs/tags/v26.08.0 + # Release tag builds strip -SNAPSHOT and rewrite the POM so packaged artifacts # carry the release version. Non-release builds keep -SNAPSHOT. if rapids-is-release-build 2>/dev/null; then From 27b5602bcd4d4048d46cd8e24e6747325d58a7a6 Mon Sep 17 00:00:00 2001 From: Paul Aiyedun <53453937+paul-aiyedun@users.noreply.github.com> Date: Tue, 28 Jul 2026 21:30:01 +0000 Subject: [PATCH 04/29] Revert "TEMPORARY: commit for testing CI (simulate release)" This reverts commit e7d81cd318044f1eef7330c29159a6e6e50c7bbb. --- .github/workflows/pr.yaml | 873 +++++++++++++++++++- java/ci/build_cudf_java_jar_in_container.sh | 7 - 2 files changed, 862 insertions(+), 18 deletions(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 6e4831829685..a4ae7607ca50 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -1,12 +1,3 @@ -# TEMPORARY (revert before merge): this file is stripped down to just the -# java-build / java-gather rehearsal chain so a PR push can produce the -# cudf_java_maven_repo artifact used by the maven-publish end-to-end test -# without spending CI time on the rest of the PR pipeline. Restore the full -# PR workflow before merging. -# -# Paired with the temporary in-container GITHUB_REF override in -# java/ci/build_cudf_java_jar_in_container.sh, which forces the release-tag -# path so the produced artifact is release-shaped (no -SNAPSHOT). name: pr on: push: @@ -17,6 +8,50 @@ concurrency: cancel-in-progress: true permissions: {} jobs: + # Please keep pr-builder as the top job here + pr-builder: + needs: + - 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-other-tests + - conda-java-tests + - conda-notebook-tests + - docs-build + - wheel-build-libcudf + - wheel-build-libcudf-streaming + - wheel-build-cudf-streaming + - wheel-tests-cudf-streaming + - wheel-build-pylibcudf + - wheel-build-cudf + - wheel-tests-cudf + - wheel-build-cudf-polars + - wheel-tests-cudf-polars + - cudf-polars-polars-tests + - wheel-build-dask-cudf + - wheel-tests-dask-cudf + - devcontainer + - unit-tests-cudf-pandas + - pandas-tests + - narwhals-tests + - telemetry-setup + - third-party-integration-tests-cudf-pandas + - java-build + - java-gather + uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@release/26.08 + permissions: + contents: read + if: always() + with: + needs: ${{ toJSON(needs) }} telemetry-setup: permissions: id-token: write @@ -28,9 +63,825 @@ jobs: - name: Telemetry setup if: ${{ vars.TELEMETRY_ENABLED == 'true' }} uses: rapidsai/shared-actions/telemetry-dispatch-stash-base-env-vars@main - # Copy of build.yaml's java-build. Mirror any build.yaml edits here. + 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@release/26.08 + with: + files_yaml: | + build_docs: + - '**' + - '!**/REVIEW_GUIDELINES.md' + - '!.coderabbit.yaml' + - '!.clang-format' + - '!.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/auto-assign.yml' + - '!.github/workflows/issue-release-scheduled.yml' + - '!.github/workflows/labeler.yml' + - '!.github/workflows/pr_issue_status_automation.yml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!ci/build_wheel*.sh' + - '!ci/check_style.sh' + - '!ci/discover_libcudf_tests.sh' + - '!ci/release/update-version.sh' + - '!ci/run_*.sh' + - '!ci/test_*.sh' + - '!ci/validate_wheel.sh' + - '!codecov.yml' + - '!SECURITY.md' + test_cpp: + - '**' + - '!**/REVIEW_GUIDELINES.md' + - '!.coderabbit.yaml' + - '!.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/auto-assign.yml' + - '!.github/workflows/issue-release-scheduled.yml' + - '!.github/workflows/labeler.yml' + - '!.github/workflows/pr_issue_status_automation.yml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!CONTRIBUTING.md' + - '!README.md' + - '!SECURITY.md' + - '!ci/cudf_pandas_scripts/**' + - '!ci/build_docs.sh' + - '!ci/build_python*.sh' + - '!ci/build_wheel*.sh' + - '!ci/check_style.sh' + - '!ci/cudf_pandas_scripts/**' + - '!ci/release/update-version.sh' + - '!ci/test_python*.sh' + - '!ci/test_wheel*.sh' + - '!ci/validate_wheel.sh' + - '!docs/**' + - '!img/**' + - '!java/**' + - '!notebooks/**' + - '!python/**' + test_cudf_pandas: + - '**' + - '!**/REVIEW_GUIDELINES.md' + - '!.coderabbit.yaml' + - '!.clang-format' + - '!.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/auto-assign.yml' + - '!.github/workflows/issue-release-scheduled.yml' + - '!.github/workflows/labeler.yml' + - '!.github/workflows/pr_issue_status_automation.yml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!CONTRIBUTING.md' + - '!README.md' + - '!SECURITY.md' + - '!ci/release/update-version.sh' + - '!ci/test_java.sh' + - '!ci/validate_wheel.sh' + - '!docs/**' + - '!img/**' + - '!java/**' + - '!notebooks/**' + test_java: + - '**' + - '!**/REVIEW_GUIDELINES.md' + - '!.coderabbit.yaml' + - '!.clang-format' + - '!.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/auto-assign.yml' + - '!.github/workflows/issue-release-scheduled.yml' + - '!.github/workflows/labeler.yml' + - '!.github/workflows/pr_issue_status_automation.yml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!CONTRIBUTING.md' + - '!README.md' + - '!SECURITY.md' + - '!ci/build_docs.sh' + - '!ci/build_wheel*.sh' + - '!ci/check_style.sh' + - '!ci/cudf_pandas_scripts/**' + - '!ci/release/update-version.sh' + - '!ci/test_wheel*.sh' + - '!ci/validate_wheel.sh' + - '!ci/release/update-version.sh' + - '!codecov.yml' + - '!docs/**' + - '!img/**' + - '!notebooks/**' + - '!python/**' + test_notebooks: + - '**' + - '!**/REVIEW_GUIDELINES.md' + - '!.coderabbit.yaml' + - '!.clang-format' + - '!.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/auto-assign.yml' + - '!.github/workflows/issue-release-scheduled.yml' + - '!.github/workflows/labeler.yml' + - '!.github/workflows/pr_issue_status_automation.yml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!CONTRIBUTING.md' + - '!README.md' + - '!SECURITY.md' + - '!ci/build_wheel*.sh' + - '!ci/cudf_pandas_scripts/**' + - '!ci/release/update-version.sh' + - '!ci/test_wheel*.sh' + - '!ci/validate_wheel.sh' + - '!codecov.yml' + - '!java/**' + test_python_conda: + - '**' + - '!**/REVIEW_GUIDELINES.md' + - '!.coderabbit.yaml' + - '!.clang-format' + - '!.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/auto-assign.yml' + - '!.github/workflows/issue-release-scheduled.yml' + - '!.github/workflows/labeler.yml' + - '!.github/workflows/pr_issue_status_automation.yml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!CONTRIBUTING.md' + - '!README.md' + - '!SECURITY.md' + - '!ci/build_docs.sh' + - '!ci/build_wheel*.sh' + - '!ci/check_style.sh' + - '!ci/cudf_pandas_scripts/**' + - '!ci/release/update-version.sh' + - '!ci/test_java.sh' + - '!ci/test_wheel*.sh' + - '!ci/validate_wheel.sh' + - '!docs/**' + - '!img/**' + - '!java/**' + - '!notebooks/**' + test_python_wheels: + - '**' + - '!**/REVIEW_GUIDELINES.md' + - '!.coderabbit.yaml' + - '!.clang-format' + - '!.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/auto-assign.yml' + - '!.github/workflows/issue-release-scheduled.yml' + - '!.github/workflows/labeler.yml' + - '!.github/workflows/pr_issue_status_automation.yml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!CONTRIBUTING.md' + - '!README.md' + - '!SECURITY.md' + - '!ci/build_cpp.sh' + - '!ci/build_docs.sh' + - '!ci/build_python_noarch.sh' + - '!ci/build_python.sh' + - '!ci/check-style.sh' + - '!ci/cudf_pandas_scripts/**' + - '!ci/release/update-version.sh' + - '!ci/test_cpp.sh' + - '!ci/test_cpp_common.sh' + - '!ci/test_cpp_memcheck.sh' + - '!ci/test_java.sh' + - '!ci/test_notebooks.sh' + - '!ci/test_python_common.sh' + - '!ci/test_python_cudf.sh' + - '!ci/test_python_other.sh' + - '!codecov.yml' + - '!conda/**' + - '!docs/**' + - '!img/**' + - '!java/**' + - '!notebooks/**' + not_cudf_polars: + - '**' + - '!python/cudf_polars/**' + neither_cudf_polars_nor_dask_cudf: + - '**' + - '!python/cudf_polars/**' + - '!python/dask_cudf/**' + neither_cudf_nor_dask_cudf: + - '**' + - '!python/cudf/**' + - '!python/dask_cudf/**' + neither_cpp_nor_cudf_polars_nor_dask_cudf: + - '**' + - '!cpp/**' + - '!python/cudf_polars/**' + - '!python/dask_cudf/**' + checks: + permissions: + contents: read + needs: telemetry-setup + uses: rapidsai/shared-workflows/.github/workflows/checks.yaml@release/26.08 + with: + enable_check_generated_files: false + ignored_pr_jobs: "telemetry-summarize spark-rapids-jni cuml-compat-tests" + conda-cpp-build: + needs: 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@release/26.08 + with: + build_type: pull-request + node_type: cpu16 + script: ci/build_cpp.sh + cmake-tests: + needs: 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/custom-job.yaml@release/26.08 + with: + build_type: pull-request + node_type: cpu16 + arch: "amd64" + container_image: "rapidsai/ci-conda:26.08-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 + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@release/26.08 + 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@release/26.08 + 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp + with: + build_type: pull-request + script: ci/test_cpp.sh + conda-python-build: + needs: 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@release/26.08 + 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-build-noarch: + needs: [conda-cpp-build, conda-python-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@release/26.08 + with: + build_type: pull-request + 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf + with: + build_type: pull-request + script: "ci/test_python_cudf.sh" + conda-python-other-tests: + # Tests for dask_cudf, cudf_polars, custreamz, cudf_kafka are separated for CI parallelism + needs: [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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda + with: + build_type: pull-request + # https://github.com/rapidsai/cudf/pull/22381/changes#r3196736965 + container-options: "--cap-add CAP_SYS_PTRACE --shm-size=8g --ulimit=nofile=1000000:1000000" + script: "ci/test_python_other.sh" + conda-java-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/custom-job.yaml@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_java + with: + build_type: pull-request + node_type: "gpu-l4-latest-1" + arch: "amd64" + container_image: "rapidsai/ci-conda:26.08-latest" + script: "ci/test_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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_notebooks + with: + build_type: pull-request + node_type: "gpu-l4-latest-1" + arch: "amd64" + container_image: "rapidsai/ci-conda:26.08-latest" + script: "ci/test_notebooks.sh" + docs-build: + 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).build_docs + with: + build_type: pull-request + node_type: "gpu-l4-latest-1" + arch: "amd64" + container_image: "rapidsai/ci-conda:26.08-latest" + script: "ci/build_docs.sh" + wheel-build-libcudf: + needs: 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/wheels-build.yaml@release/26.08 + with: + # build for every combination of arch and CUDA version, but only for the latest Python + matrix_filter: group_by([.ARCH, (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | map(max_by(.PY_VER|split(".")|map(tonumber))) + build_type: pull-request + node_type: cpu16 + script: "ci/build_wheel_libcudf.sh" + package-name: libcudf + package-type: cpp + wheel-build-libcudf-streaming: + needs: [checks, wheel-build-libcudf] + 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-build.yaml@release/26.08 + with: + # build for every combination of arch and CUDA version, but only for the latest Python + matrix_filter: group_by([.ARCH, (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | map(max_by(.PY_VER|split(".")|map(tonumber))) + build_type: pull-request + node_type: cpu16 + script: "ci/build_wheel_libcudf_streaming.sh" + package-name: libcudf_streaming + package-type: cpp + wheel-build-cudf-streaming: + needs: [checks, wheel-build-libcudf-streaming, wheel-build-pylibcudf] + 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-build.yaml@release/26.08 + with: + # 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))) + build_type: pull-request + node_type: cpu16 + script: "ci/build_wheel_cudf_streaming.sh" + package-name: cudf_streaming + package-type: python + wheel-tests-cudf-streaming: + needs: [wheel-build-cudf-streaming, 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels + with: + build_type: pull-request + script: ci/test_wheel_cudf_streaming.sh + wheel-build-pylibcudf: + needs: [checks, wheel-build-libcudf] + 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-build.yaml@release/26.08 + with: + build_type: pull-request + node_type: cpu8 + script: "ci/build_wheel_pylibcudf.sh" + package-name: pylibcudf + package-type: python + # 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-build-cudf: + needs: wheel-build-pylibcudf + 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-build.yaml@release/26.08 + with: + build_type: pull-request + node_type: cpu8 + script: "ci/build_wheel_cudf.sh" + package-name: cudf + package-type: python + # 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-cudf: + needs: [wheel-build-cudf, 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf + with: + build_type: pull-request + script: ci/test_wheel_cudf.sh + wheel-build-cudf-polars: + needs: wheel-build-pylibcudf + 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-build.yaml@release/26.08 + 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 + node_type: cpu8 + script: "ci/build_wheel_cudf_polars.sh" + package-name: cudf_polars + package-type: python + pure-wheel: true + wheel-tests-cudf-polars: + needs: [wheel-build-cudf-polars, wheel-build-cudf-streaming, 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_nor_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 + 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-cudf-polars, wheel-build-cudf-streaming, 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_nor_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_cudf_polars_polars_tests.sh" + wheel-build-dask-cudf: + needs: wheel-build-cudf + 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-build.yaml@release/26.08 + 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 + node_type: cpu8 + script: "ci/build_wheel_dask_cudf.sh" + package-name: dask_cudf + package-type: python + pure-wheel: true + wheel-tests-dask-cudf: + needs: [wheel-build-dask-cudf, 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).not_cudf_polars + 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@release/26.08 + 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-cudf, 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@release/26.08 + if: (fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels || fromJSON(needs.changed-files.outputs.changed_file_groups).test_cudf_pandas) && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf + with: + # This selects the latest supported Python + CUDA minor versions for each ARCH/CUDA major version combo + matrix_filter: group_by([(.ARCH), (.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/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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cpp_nor_cudf_polars_nor_dask_cudf + with: + build_type: pull-request + branch: ${{ inputs.branch }} + date: ${{ inputs.date }} + sha: ${{ inputs.sha }} + node_type: "gpu-l4-latest-1" + continue-on-error: true + container_image: "rapidsai/ci-conda:26.08-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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf + with: + build_type: pull-request + branch: ${{ inputs.branch }} + date: ${{ inputs.date }} + sha: ${{ inputs.sha }} + node_type: "gpu-l4-latest-1" + continue-on-error: true + container_image: "rapidsai/ci-conda:26.08-latest" + script: "ci/test_cuml_compat.sh" + pandas-tests: + # run the Pandas unit tests using PR branch + needs: [wheel-build-cudf, 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cpp_nor_cudf_polars_nor_dask_cudf + with: + build_type: pull-request + branch: ${{ inputs.branch }} + date: ${{ inputs.date }} + sha: ${{ inputs.sha }} + node_type: "gpu-l4-latest-1" + container_image: "rapidsai/citestwheel:26.08-latest" + script: ci/cudf_pandas_scripts/pandas-tests/run.sh pr + 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cpp_nor_cudf_polars_nor_dask_cudf + with: + build_type: pull-request + branch: ${{ inputs.branch }} + date: ${{ inputs.date }} + sha: ${{ inputs.sha }} + node_type: "gpu-l4-latest-1" + container_image: "rapidsai/ci-conda:26.08-latest" + script: ci/test_narwhals.sh + spark-rapids-jni: + needs: changed-files + permissions: + actions: read + contents: read + id-token: write + packages: read + pull-requests: read + uses: ./.github/workflows/spark-rapids-jni.yaml + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_java + 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 }} + # Copy of build.yaml's java-build (lines 475-514). Pins GITHUB_REF to + # rehearse the release-tag path on every PR. Mirror any build.yaml edits here. java-build: needs: [telemetry-setup] + env: + GITHUB_REF: refs/tags/v26.08.0 strategy: fail-fast: false matrix: @@ -69,7 +920,7 @@ jobs: ${{ runner.temp }}/jars !${{ runner.temp }}/jars/.mvn-temp-target if-no-files-found: error - # Copy of build.yaml's java-gather. Rehearsal companion to java-build. + # Copy of build.yaml's java-gather (lines 516-543). Rehearsal companion to java-build. java-gather: needs: [java-build] runs-on: linux-amd64-cpu4 diff --git a/java/ci/build_cudf_java_jar_in_container.sh b/java/ci/build_cudf_java_jar_in_container.sh index 65f037758c78..197c85c3bc64 100755 --- a/java/ci/build_cudf_java_jar_in_container.sh +++ b/java/ci/build_cudf_java_jar_in_container.sh @@ -108,13 +108,6 @@ cd "${REPO_ROOT}/java" CUDF_VERSION="$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout "${BUILD_ARG[@]}")" -# TEMPORARY (revert alongside the pr.yaml java-only rehearsal commit): force -# the release-tag path so this branch produces a release-shaped Maven repo -# artifact for end-to-end pipeline testing without a real tag push. GHA -# silently ignores a job-level `env: GITHUB_REF:` override, so we set it -# here where it sticks (rapids-is-release-build keys off GITHUB_REF). -export GITHUB_REF=refs/tags/v26.08.0 - # Release tag builds strip -SNAPSHOT and rewrite the POM so packaged artifacts # carry the release version. Non-release builds keep -SNAPSHOT. if rapids-is-release-build 2>/dev/null; then From 59a982e2c08f97d3a08fac9c966f0fd19156e168 Mon Sep 17 00:00:00 2001 From: Paul Aiyedun <53453937+paul-aiyedun@users.noreply.github.com> Date: Tue, 28 Jul 2026 21:30:16 +0000 Subject: [PATCH 05/29] Revert "TEMPORARY: commit for testing CI" This reverts commit ecf8bdef804b3c25160611f283b4d62e6af0544d. --- .github/workflows/pr.yaml | 75 --------------------------------------- 1 file changed, 75 deletions(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index a4ae7607ca50..d2a097dbdf43 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -44,8 +44,6 @@ jobs: - narwhals-tests - telemetry-setup - third-party-integration-tests-cudf-pandas - - java-build - - java-gather uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@release/26.08 permissions: contents: read @@ -876,76 +874,3 @@ jobs: uses: rapidsai/shared-actions/telemetry-dispatch-summarize@main env: GH_TOKEN: ${{ github.token }} - # Copy of build.yaml's java-build (lines 475-514). Pins GITHUB_REF to - # rehearse the release-tag path on every PR. Mirror any build.yaml edits here. - java-build: - needs: [telemetry-setup] - env: - GITHUB_REF: refs/tags/v26.08.0 - strategy: - fail-fast: false - matrix: - include: - - { cuda: "12.9", cuda_major: "12", arch: "x86_64", runner: "linux-amd64-cpu16" } - - { cuda: "13.3", cuda_major: "13", arch: "x86_64", runner: "linux-amd64-cpu16" } - - { cuda: "12.9", cuda_major: "12", arch: "aarch64", runner: "linux-arm64-cpu16" } - - { cuda: "13.3", cuda_major: "13", arch: "aarch64", runner: "linux-arm64-cpu16" } - runs-on: ${{ matrix.runner }} - permissions: - contents: read - steps: - - name: Checkout code repo - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 - with: - ref: ${{ inputs.sha }} - fetch-depth: 0 - persist-credentials: false - - name: Build static libcudf - run: | - ./java/ci/build_static_libcudf.sh \ - --output-dir "${RUNNER_TEMP}/libcudf" \ - --cuda-version "${{ matrix.cuda }}" - - name: Build cuDF Java JAR - run: | - ./java/ci/build_cudf_java_jar.sh \ - --libcudf-dir "${RUNNER_TEMP}/libcudf" \ - --output-dir "${RUNNER_TEMP}/jars" \ - --cuda-version "${{ matrix.cuda }}" - - name: Upload per-entry JAR artifact - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 - with: - name: cudf_java_cuda${{ matrix.cuda_major }}_${{ matrix.arch }} - # Ship only the JARs and POMs. Exclude the per-classifier Maven build scratch dir. - path: | - ${{ runner.temp }}/jars - !${{ runner.temp }}/jars/.mvn-temp-target - if-no-files-found: error - # Copy of build.yaml's java-gather (lines 516-543). Rehearsal companion to java-build. - java-gather: - needs: [java-build] - runs-on: linux-amd64-cpu4 - permissions: - contents: read - steps: - - name: Checkout code repo - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 - with: - ref: ${{ inputs.sha }} - persist-credentials: false - - name: Download per-entry JAR artifacts - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 - with: - pattern: cudf_java_cuda* - path: ${{ runner.temp }}/jars - merge-multiple: true - - name: Assemble Maven repository layout - run: | - ./java/ci/assemble_maven_repo.sh \ - --jars-dir "${RUNNER_TEMP}/jars" \ - --output-dir "${RUNNER_TEMP}/maven-repo" - - name: Upload combined Maven repository artifact - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 - with: - name: cudf_java_maven_repo - path: ${{ runner.temp }}/maven-repo - if-no-files-found: error From d8507daab3328d14835f4aaad24a010b3e003400 Mon Sep 17 00:00:00 2001 From: Paul Aiyedun <53453937+paul-aiyedun@users.noreply.github.com> Date: Tue, 28 Jul 2026 18:17:21 +0000 Subject: [PATCH 06/29] Add java-publish job --- .github/workflows/build.yaml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index c1a386577155..d35173767a92 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -541,3 +541,26 @@ jobs: name: cudf_java_maven_repo path: ${{ runner.temp }}/maven-repo if-no-files-found: error + + # Publish tagged release candidates to Maven Central via the Sonatype + # Central Publisher Portal. + java-publish: + needs: [java-gather] + if: ${{ github.ref_type == 'tag' && (inputs.build_type || 'branch') == 'branch' }} + permissions: + actions: read + contents: read + uses: rapidsai/shared-workflows/.github/workflows/maven-publish.yaml@release/26.08 + secrets: + GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} + GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} + ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }} + ARTIFACTORY_TOKEN: ${{ secrets.ARTIFACTORY_TOKEN }} + MAVEN_DEPLOY_USERNAME: ${{ secrets.MAVEN_DEPLOY_USERNAME }} + MAVEN_DEPLOY_TOKEN: ${{ secrets.MAVEN_DEPLOY_TOKEN }} + with: + publication-type: 'rc' + artifact-name: cudf_java_maven_repo + source-git-sha: ${{ inputs.sha || github.sha }} + # false = validate + drop (safe). true = stage PENDING for manual publish. + stage-for-maven-central-publish: false From a57548ec856200ec72a2e9e782c42a356c406fb9 Mon Sep 17 00:00:00 2001 From: Paul Aiyedun <53453937+paul-aiyedun@users.noreply.github.com> Date: Tue, 28 Jul 2026 21:49:43 +0000 Subject: [PATCH 07/29] TEMPORARY: commit for testing CI (simulate maven release staging) --- .github/workflows/pr.yaml | 916 +++----------------------------------- 1 file changed, 56 insertions(+), 860 deletions(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index d2a097dbdf43..873e341e0fea 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -1,3 +1,20 @@ +# TEMPORARY (revert before merge): this file is stripped down to just the +# maven-publish end-to-end rehearsal. +# +# java-fetch-prebuilt: downloads the cudf_java_maven_repo artifact from a +# known-good release-shaped prior run +# (${GITHUB_SERVER_URL}/rapidsai/cudf/actions/runs/30388790977) +# and re-uploads it under the same name in this run so +# the shared maven-publish workflow's +# actions/download-artifact step can consume it as if +# java-gather had run here. +# java-publish: exact copy of build.yaml's java-publish job, but +# pinned to the fork branch +# (paul-aiyedun/rapidsai-shared-workflows@paul/add_maven_publish_workflow) +# and gated only on java-fetch-prebuilt so we skip the +# java-build / java-gather chain entirely. +# +# Restore the full PR workflow before merging. name: pr on: push: @@ -8,869 +25,48 @@ concurrency: cancel-in-progress: true permissions: {} jobs: - # Please keep pr-builder as the top job here - pr-builder: - needs: - - 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-other-tests - - conda-java-tests - - conda-notebook-tests - - docs-build - - wheel-build-libcudf - - wheel-build-libcudf-streaming - - wheel-build-cudf-streaming - - wheel-tests-cudf-streaming - - wheel-build-pylibcudf - - wheel-build-cudf - - wheel-tests-cudf - - wheel-build-cudf-polars - - wheel-tests-cudf-polars - - cudf-polars-polars-tests - - wheel-build-dask-cudf - - wheel-tests-dask-cudf - - devcontainer - - unit-tests-cudf-pandas - - pandas-tests - - narwhals-tests - - telemetry-setup - - third-party-integration-tests-cudf-pandas - uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@release/26.08 - 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 - check-nightly-ci: + java-fetch-prebuilt: runs-on: ubuntu-latest permissions: actions: read - id-token: write + contents: read env: - GH_TOKEN: ${{ github.token }} + # cudf_java_maven_repo from a prior run whose java-build ran with a + # release-shaped GITHUB_REF (v26.08.0 tag). Verified locally in + # release_testing/artifact2 to contain 26.08.0 (no -SNAPSHOT). + PREBUILT_RUN_ID: "30388790977" 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 + - name: Download cudf_java_maven_repo from prior run + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 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@release/26.08 - with: - files_yaml: | - build_docs: - - '**' - - '!**/REVIEW_GUIDELINES.md' - - '!.coderabbit.yaml' - - '!.clang-format' - - '!.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/auto-assign.yml' - - '!.github/workflows/issue-release-scheduled.yml' - - '!.github/workflows/labeler.yml' - - '!.github/workflows/pr_issue_status_automation.yml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!ci/build_wheel*.sh' - - '!ci/check_style.sh' - - '!ci/discover_libcudf_tests.sh' - - '!ci/release/update-version.sh' - - '!ci/run_*.sh' - - '!ci/test_*.sh' - - '!ci/validate_wheel.sh' - - '!codecov.yml' - - '!SECURITY.md' - test_cpp: - - '**' - - '!**/REVIEW_GUIDELINES.md' - - '!.coderabbit.yaml' - - '!.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/auto-assign.yml' - - '!.github/workflows/issue-release-scheduled.yml' - - '!.github/workflows/labeler.yml' - - '!.github/workflows/pr_issue_status_automation.yml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!CONTRIBUTING.md' - - '!README.md' - - '!SECURITY.md' - - '!ci/cudf_pandas_scripts/**' - - '!ci/build_docs.sh' - - '!ci/build_python*.sh' - - '!ci/build_wheel*.sh' - - '!ci/check_style.sh' - - '!ci/cudf_pandas_scripts/**' - - '!ci/release/update-version.sh' - - '!ci/test_python*.sh' - - '!ci/test_wheel*.sh' - - '!ci/validate_wheel.sh' - - '!docs/**' - - '!img/**' - - '!java/**' - - '!notebooks/**' - - '!python/**' - test_cudf_pandas: - - '**' - - '!**/REVIEW_GUIDELINES.md' - - '!.coderabbit.yaml' - - '!.clang-format' - - '!.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/auto-assign.yml' - - '!.github/workflows/issue-release-scheduled.yml' - - '!.github/workflows/labeler.yml' - - '!.github/workflows/pr_issue_status_automation.yml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!CONTRIBUTING.md' - - '!README.md' - - '!SECURITY.md' - - '!ci/release/update-version.sh' - - '!ci/test_java.sh' - - '!ci/validate_wheel.sh' - - '!docs/**' - - '!img/**' - - '!java/**' - - '!notebooks/**' - test_java: - - '**' - - '!**/REVIEW_GUIDELINES.md' - - '!.coderabbit.yaml' - - '!.clang-format' - - '!.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/auto-assign.yml' - - '!.github/workflows/issue-release-scheduled.yml' - - '!.github/workflows/labeler.yml' - - '!.github/workflows/pr_issue_status_automation.yml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!CONTRIBUTING.md' - - '!README.md' - - '!SECURITY.md' - - '!ci/build_docs.sh' - - '!ci/build_wheel*.sh' - - '!ci/check_style.sh' - - '!ci/cudf_pandas_scripts/**' - - '!ci/release/update-version.sh' - - '!ci/test_wheel*.sh' - - '!ci/validate_wheel.sh' - - '!ci/release/update-version.sh' - - '!codecov.yml' - - '!docs/**' - - '!img/**' - - '!notebooks/**' - - '!python/**' - test_notebooks: - - '**' - - '!**/REVIEW_GUIDELINES.md' - - '!.coderabbit.yaml' - - '!.clang-format' - - '!.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/auto-assign.yml' - - '!.github/workflows/issue-release-scheduled.yml' - - '!.github/workflows/labeler.yml' - - '!.github/workflows/pr_issue_status_automation.yml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!CONTRIBUTING.md' - - '!README.md' - - '!SECURITY.md' - - '!ci/build_wheel*.sh' - - '!ci/cudf_pandas_scripts/**' - - '!ci/release/update-version.sh' - - '!ci/test_wheel*.sh' - - '!ci/validate_wheel.sh' - - '!codecov.yml' - - '!java/**' - test_python_conda: - - '**' - - '!**/REVIEW_GUIDELINES.md' - - '!.coderabbit.yaml' - - '!.clang-format' - - '!.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/auto-assign.yml' - - '!.github/workflows/issue-release-scheduled.yml' - - '!.github/workflows/labeler.yml' - - '!.github/workflows/pr_issue_status_automation.yml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!CONTRIBUTING.md' - - '!README.md' - - '!SECURITY.md' - - '!ci/build_docs.sh' - - '!ci/build_wheel*.sh' - - '!ci/check_style.sh' - - '!ci/cudf_pandas_scripts/**' - - '!ci/release/update-version.sh' - - '!ci/test_java.sh' - - '!ci/test_wheel*.sh' - - '!ci/validate_wheel.sh' - - '!docs/**' - - '!img/**' - - '!java/**' - - '!notebooks/**' - test_python_wheels: - - '**' - - '!**/REVIEW_GUIDELINES.md' - - '!.coderabbit.yaml' - - '!.clang-format' - - '!.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/auto-assign.yml' - - '!.github/workflows/issue-release-scheduled.yml' - - '!.github/workflows/labeler.yml' - - '!.github/workflows/pr_issue_status_automation.yml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!CONTRIBUTING.md' - - '!README.md' - - '!SECURITY.md' - - '!ci/build_cpp.sh' - - '!ci/build_docs.sh' - - '!ci/build_python_noarch.sh' - - '!ci/build_python.sh' - - '!ci/check-style.sh' - - '!ci/cudf_pandas_scripts/**' - - '!ci/release/update-version.sh' - - '!ci/test_cpp.sh' - - '!ci/test_cpp_common.sh' - - '!ci/test_cpp_memcheck.sh' - - '!ci/test_java.sh' - - '!ci/test_notebooks.sh' - - '!ci/test_python_common.sh' - - '!ci/test_python_cudf.sh' - - '!ci/test_python_other.sh' - - '!codecov.yml' - - '!conda/**' - - '!docs/**' - - '!img/**' - - '!java/**' - - '!notebooks/**' - not_cudf_polars: - - '**' - - '!python/cudf_polars/**' - neither_cudf_polars_nor_dask_cudf: - - '**' - - '!python/cudf_polars/**' - - '!python/dask_cudf/**' - neither_cudf_nor_dask_cudf: - - '**' - - '!python/cudf/**' - - '!python/dask_cudf/**' - neither_cpp_nor_cudf_polars_nor_dask_cudf: - - '**' - - '!cpp/**' - - '!python/cudf_polars/**' - - '!python/dask_cudf/**' - checks: - permissions: - contents: read - needs: telemetry-setup - uses: rapidsai/shared-workflows/.github/workflows/checks.yaml@release/26.08 - with: - enable_check_generated_files: false - ignored_pr_jobs: "telemetry-summarize spark-rapids-jni cuml-compat-tests" - conda-cpp-build: - needs: 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@release/26.08 - with: - build_type: pull-request - node_type: cpu16 - script: ci/build_cpp.sh - cmake-tests: - needs: 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/custom-job.yaml@release/26.08 - with: - build_type: pull-request - node_type: cpu16 - arch: "amd64" - container_image: "rapidsai/ci-conda:26.08-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 - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@release/26.08 - 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@release/26.08 - 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp - with: - build_type: pull-request - script: ci/test_cpp.sh - conda-python-build: - needs: 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@release/26.08 - 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-build-noarch: - needs: [conda-cpp-build, conda-python-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@release/26.08 - with: - build_type: pull-request - 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf - with: - build_type: pull-request - script: "ci/test_python_cudf.sh" - conda-python-other-tests: - # Tests for dask_cudf, cudf_polars, custreamz, cudf_kafka are separated for CI parallelism - needs: [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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda - with: - build_type: pull-request - # https://github.com/rapidsai/cudf/pull/22381/changes#r3196736965 - container-options: "--cap-add CAP_SYS_PTRACE --shm-size=8g --ulimit=nofile=1000000:1000000" - script: "ci/test_python_other.sh" - conda-java-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/custom-job.yaml@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_java - with: - build_type: pull-request - node_type: "gpu-l4-latest-1" - arch: "amd64" - container_image: "rapidsai/ci-conda:26.08-latest" - script: "ci/test_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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_notebooks - with: - build_type: pull-request - node_type: "gpu-l4-latest-1" - arch: "amd64" - container_image: "rapidsai/ci-conda:26.08-latest" - script: "ci/test_notebooks.sh" - docs-build: - 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).build_docs - with: - build_type: pull-request - node_type: "gpu-l4-latest-1" - arch: "amd64" - container_image: "rapidsai/ci-conda:26.08-latest" - script: "ci/build_docs.sh" - wheel-build-libcudf: - needs: 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/wheels-build.yaml@release/26.08 - with: - # build for every combination of arch and CUDA version, but only for the latest Python - matrix_filter: group_by([.ARCH, (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | map(max_by(.PY_VER|split(".")|map(tonumber))) - build_type: pull-request - node_type: cpu16 - script: "ci/build_wheel_libcudf.sh" - package-name: libcudf - package-type: cpp - wheel-build-libcudf-streaming: - needs: [checks, wheel-build-libcudf] - 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-build.yaml@release/26.08 - with: - # build for every combination of arch and CUDA version, but only for the latest Python - matrix_filter: group_by([.ARCH, (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | map(max_by(.PY_VER|split(".")|map(tonumber))) - build_type: pull-request - node_type: cpu16 - script: "ci/build_wheel_libcudf_streaming.sh" - package-name: libcudf_streaming - package-type: cpp - wheel-build-cudf-streaming: - needs: [checks, wheel-build-libcudf-streaming, wheel-build-pylibcudf] - 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-build.yaml@release/26.08 - with: - # 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))) - build_type: pull-request - node_type: cpu16 - script: "ci/build_wheel_cudf_streaming.sh" - package-name: cudf_streaming - package-type: python - wheel-tests-cudf-streaming: - needs: [wheel-build-cudf-streaming, 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels - with: - build_type: pull-request - script: ci/test_wheel_cudf_streaming.sh - wheel-build-pylibcudf: - needs: [checks, wheel-build-libcudf] - 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-build.yaml@release/26.08 - with: - build_type: pull-request - node_type: cpu8 - script: "ci/build_wheel_pylibcudf.sh" - package-name: pylibcudf - package-type: python - # 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-build-cudf: - needs: wheel-build-pylibcudf - 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-build.yaml@release/26.08 - with: - build_type: pull-request - node_type: cpu8 - script: "ci/build_wheel_cudf.sh" - package-name: cudf - package-type: python - # 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-cudf: - needs: [wheel-build-cudf, 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf - with: - build_type: pull-request - script: ci/test_wheel_cudf.sh - wheel-build-cudf-polars: - needs: wheel-build-pylibcudf - 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-build.yaml@release/26.08 - 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 - node_type: cpu8 - script: "ci/build_wheel_cudf_polars.sh" - package-name: cudf_polars - package-type: python - pure-wheel: true - wheel-tests-cudf-polars: - needs: [wheel-build-cudf-polars, wheel-build-cudf-streaming, 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_nor_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 - 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-cudf-polars, wheel-build-cudf-streaming, 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_nor_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_cudf_polars_polars_tests.sh" - wheel-build-dask-cudf: - needs: wheel-build-cudf - 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-build.yaml@release/26.08 - 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 - node_type: cpu8 - script: "ci/build_wheel_dask_cudf.sh" - package-name: dask_cudf - package-type: python - pure-wheel: true - wheel-tests-dask-cudf: - needs: [wheel-build-dask-cudf, 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).not_cudf_polars - 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@release/26.08 - 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-cudf, 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@release/26.08 - if: (fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels || fromJSON(needs.changed-files.outputs.changed_file_groups).test_cudf_pandas) && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf - with: - # This selects the latest supported Python + CUDA minor versions for each ARCH/CUDA major version combo - matrix_filter: group_by([(.ARCH), (.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/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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cpp_nor_cudf_polars_nor_dask_cudf - with: - build_type: pull-request - branch: ${{ inputs.branch }} - date: ${{ inputs.date }} - sha: ${{ inputs.sha }} - node_type: "gpu-l4-latest-1" - continue-on-error: true - container_image: "rapidsai/ci-conda:26.08-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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf - with: - build_type: pull-request - branch: ${{ inputs.branch }} - date: ${{ inputs.date }} - sha: ${{ inputs.sha }} - node_type: "gpu-l4-latest-1" - continue-on-error: true - container_image: "rapidsai/ci-conda:26.08-latest" - script: "ci/test_cuml_compat.sh" - pandas-tests: - # run the Pandas unit tests using PR branch - needs: [wheel-build-cudf, 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cpp_nor_cudf_polars_nor_dask_cudf - with: - build_type: pull-request - branch: ${{ inputs.branch }} - date: ${{ inputs.date }} - sha: ${{ inputs.sha }} - node_type: "gpu-l4-latest-1" - container_image: "rapidsai/citestwheel:26.08-latest" - script: ci/cudf_pandas_scripts/pandas-tests/run.sh pr - 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cpp_nor_cudf_polars_nor_dask_cudf - with: - build_type: pull-request - branch: ${{ inputs.branch }} - date: ${{ inputs.date }} - sha: ${{ inputs.sha }} - node_type: "gpu-l4-latest-1" - container_image: "rapidsai/ci-conda:26.08-latest" - script: ci/test_narwhals.sh - spark-rapids-jni: - needs: changed-files - permissions: - actions: read - contents: read - id-token: write - packages: read - pull-requests: read - uses: ./.github/workflows/spark-rapids-jni.yaml - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_java - 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 }} + name: cudf_java_maven_repo + path: maven-repo + github-token: ${{ github.token }} + repository: ${{ github.repository }} + run-id: ${{ env.PREBUILT_RUN_ID }} + - name: Re-upload cudf_java_maven_repo for this run + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: cudf_java_maven_repo + path: maven-repo + if-no-files-found: error + + java-publish: + needs: [java-fetch-prebuilt] + permissions: + actions: read + contents: read + uses: paul-aiyedun/rapidsai-shared-workflows/.github/workflows/maven-publish.yaml@paul/add_maven_publish_workflow + secrets: + GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} + GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} + ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }} + ARTIFACTORY_TOKEN: ${{ secrets.ARTIFACTORY_TOKEN }} + MAVEN_DEPLOY_USERNAME: ${{ secrets.MAVEN_DEPLOY_USERNAME }} + MAVEN_DEPLOY_TOKEN: ${{ secrets.MAVEN_DEPLOY_TOKEN }} + with: + publication-type: 'rc' + artifact-name: cudf_java_maven_repo + source-git-sha: ${{ github.sha }} + # false = validate + drop (safe). true = stage PENDING for manual publish. + stage-for-maven-central-publish: false From bdb4da630c7cda3b6d841a8354fffe9bdf8d560f Mon Sep 17 00:00:00 2001 From: Paul Aiyedun <53453937+paul-aiyedun@users.noreply.github.com> Date: Wed, 29 Jul 2026 18:06:03 +0000 Subject: [PATCH 08/29] TEMPORARY: add temporary suppression to enable CI run --- .github/workflows/pr.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 873e341e0fea..e283721e1c5b 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -56,7 +56,7 @@ jobs: permissions: actions: read contents: read - uses: paul-aiyedun/rapidsai-shared-workflows/.github/workflows/maven-publish.yaml@paul/add_maven_publish_workflow + uses: paul-aiyedun/rapidsai-shared-workflows/.github/workflows/maven-publish.yaml@paul/add_maven_publish_workflow # zizmor: ignore[unpinned-uses] temporary rehearsal only secrets: GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} From 4bfd0576f3b8db84631eda5558619100f9885147 Mon Sep 17 00:00:00 2001 From: Paul Aiyedun <53453937+paul-aiyedun@users.noreply.github.com> Date: Wed, 29 Jul 2026 18:47:58 +0000 Subject: [PATCH 09/29] TEMPORARY: use the shared-workflows PR commit sha --- .github/workflows/pr.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index e283721e1c5b..9dd690085845 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -9,9 +9,9 @@ # actions/download-artifact step can consume it as if # java-gather had run here. # java-publish: exact copy of build.yaml's java-publish job, but -# pinned to the fork branch -# (paul-aiyedun/rapidsai-shared-workflows@paul/add_maven_publish_workflow) -# and gated only on java-fetch-prebuilt so we skip the +# pinned to the head commit of the shared-workflows +# PR under review (rapidsai/shared-workflows#606) and +# gated only on java-fetch-prebuilt so we skip the # java-build / java-gather chain entirely. # # Restore the full PR workflow before merging. @@ -56,7 +56,7 @@ jobs: permissions: actions: read contents: read - uses: paul-aiyedun/rapidsai-shared-workflows/.github/workflows/maven-publish.yaml@paul/add_maven_publish_workflow # zizmor: ignore[unpinned-uses] temporary rehearsal only + uses: rapidsai/shared-workflows/.github/workflows/maven-publish.yaml@a4c375f73ce4c71fed2120373039d9a9b895c43c secrets: GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} From 279c4b33804d5debbe66ff6ec40e4c2372af491d Mon Sep 17 00:00:00 2001 From: Paul Aiyedun <53453937+paul-aiyedun@users.noreply.github.com> Date: Wed, 29 Jul 2026 21:10:19 +0000 Subject: [PATCH 10/29] TEMPORARY: empty commit for CI test From b2025635dce23f7379bcd6a67a3ef66d91a8a5a2 Mon Sep 17 00:00:00 2001 From: Paul Aiyedun <53453937+paul-aiyedun@users.noreply.github.com> Date: Wed, 29 Jul 2026 22:28:13 +0000 Subject: [PATCH 11/29] TEMPORARY: Update referenced shared-workflows branch --- .github/workflows/pr.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 9dd690085845..3953590ca54d 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -56,7 +56,7 @@ jobs: permissions: actions: read contents: read - uses: rapidsai/shared-workflows/.github/workflows/maven-publish.yaml@a4c375f73ce4c71fed2120373039d9a9b895c43c + uses: rapidsai/shared-workflows/.github/workflows/maven-publish.yaml@paul-aiyedun/add_maven_publish_workflow # zizmor: ignore[unpinned-uses] temporary rehearsal only secrets: GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} From 91b532ac52d7dd26c349e060a27b08e625200910 Mon Sep 17 00:00:00 2001 From: Paul Aiyedun <53453937+paul-aiyedun@users.noreply.github.com> Date: Thu, 30 Jul 2026 20:35:48 +0000 Subject: [PATCH 12/29] TEMPORARY: empty commit for CI test From 50ddf52a073e24d371c55d3016f36250e2fda6c7 Mon Sep 17 00:00:00 2001 From: Paul Aiyedun <53453937+paul-aiyedun@users.noreply.github.com> Date: Thu, 30 Jul 2026 20:45:34 +0000 Subject: [PATCH 13/29] TEMPORARY: Update referenced shared-workflows commit --- .github/workflows/pr.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 3953590ca54d..027741a124bb 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -56,7 +56,7 @@ jobs: permissions: actions: read contents: read - uses: rapidsai/shared-workflows/.github/workflows/maven-publish.yaml@paul-aiyedun/add_maven_publish_workflow # zizmor: ignore[unpinned-uses] temporary rehearsal only + uses: rapidsai/shared-workflows/.github/workflows/maven-publish.yaml@a50b06e7aecadb6cfc5e948c035a7ffcfa245fbb # paul-aiyedun/add_maven_publish_workflow secrets: GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} From 4fb8a71d190f82b8228652a9ddcacb9b1d00b418 Mon Sep 17 00:00:00 2001 From: Paul Aiyedun <53453937+paul-aiyedun@users.noreply.github.com> Date: Fri, 31 Jul 2026 16:50:03 +0000 Subject: [PATCH 14/29] TEMPORARY: Update referenced shared-workflows commit --- .github/workflows/pr.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 027741a124bb..955fb0f19d83 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -56,7 +56,7 @@ jobs: permissions: actions: read contents: read - uses: rapidsai/shared-workflows/.github/workflows/maven-publish.yaml@a50b06e7aecadb6cfc5e948c035a7ffcfa245fbb # paul-aiyedun/add_maven_publish_workflow + uses: rapidsai/shared-workflows/.github/workflows/maven-publish.yaml@cdd06535f0e283219a630c95f720e94788221962 # paul-aiyedun/add_maven_publish_workflow secrets: GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} From f10ee9500c717180941d980e64ea1e3d8082554d Mon Sep 17 00:00:00 2001 From: Paul Aiyedun <53453937+paul-aiyedun@users.noreply.github.com> Date: Fri, 31 Jul 2026 16:55:35 +0000 Subject: [PATCH 15/29] Remove references to artifactory secrets --- .github/workflows/build.yaml | 2 -- .github/workflows/pr.yaml | 2 -- 2 files changed, 4 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index d35173767a92..9d4b68cd2170 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -554,8 +554,6 @@ jobs: secrets: GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} - ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }} - ARTIFACTORY_TOKEN: ${{ secrets.ARTIFACTORY_TOKEN }} MAVEN_DEPLOY_USERNAME: ${{ secrets.MAVEN_DEPLOY_USERNAME }} MAVEN_DEPLOY_TOKEN: ${{ secrets.MAVEN_DEPLOY_TOKEN }} with: diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 955fb0f19d83..3ef990b60762 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -60,8 +60,6 @@ jobs: secrets: GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} - ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }} - ARTIFACTORY_TOKEN: ${{ secrets.ARTIFACTORY_TOKEN }} MAVEN_DEPLOY_USERNAME: ${{ secrets.MAVEN_DEPLOY_USERNAME }} MAVEN_DEPLOY_TOKEN: ${{ secrets.MAVEN_DEPLOY_TOKEN }} with: From b85c60afc1aaf95a1d50208c14f05f9c236a49d6 Mon Sep 17 00:00:00 2001 From: Paul Aiyedun <53453937+paul-aiyedun@users.noreply.github.com> Date: Fri, 31 Jul 2026 17:41:02 +0000 Subject: [PATCH 16/29] Remove MAVEN_DEPLOY_USERNAME secret --- .github/workflows/build.yaml | 1 - .github/workflows/pr.yaml | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 9d4b68cd2170..e5ca27de7db8 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -554,7 +554,6 @@ jobs: secrets: GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} - MAVEN_DEPLOY_USERNAME: ${{ secrets.MAVEN_DEPLOY_USERNAME }} MAVEN_DEPLOY_TOKEN: ${{ secrets.MAVEN_DEPLOY_TOKEN }} with: publication-type: 'rc' diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 3ef990b60762..2ca961a20958 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -56,11 +56,10 @@ jobs: permissions: actions: read contents: read - uses: rapidsai/shared-workflows/.github/workflows/maven-publish.yaml@cdd06535f0e283219a630c95f720e94788221962 # paul-aiyedun/add_maven_publish_workflow + uses: rapidsai/shared-workflows/.github/workflows/maven-publish.yaml@9812dada8486192799fb32b444e24e8768dbe68d # paul-aiyedun/add_maven_publish_workflow secrets: GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} - MAVEN_DEPLOY_USERNAME: ${{ secrets.MAVEN_DEPLOY_USERNAME }} MAVEN_DEPLOY_TOKEN: ${{ secrets.MAVEN_DEPLOY_TOKEN }} with: publication-type: 'rc' From cd3f51bc77edc0df3498727cc4ecb4c1f9f9496e Mon Sep 17 00:00:00 2001 From: Paul Aiyedun <53453937+paul-aiyedun@users.noreply.github.com> Date: Fri, 31 Jul 2026 21:03:24 +0000 Subject: [PATCH 17/29] TEMPORARY: Update referenced shared-workflows commit --- .github/workflows/pr.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 2ca961a20958..2f81f98308cd 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -56,7 +56,7 @@ jobs: permissions: actions: read contents: read - uses: rapidsai/shared-workflows/.github/workflows/maven-publish.yaml@9812dada8486192799fb32b444e24e8768dbe68d # paul-aiyedun/add_maven_publish_workflow + uses: rapidsai/shared-workflows/.github/workflows/maven-publish.yaml@57adbbe21eb864d9f6511d5caa7286d3ef02f678 # paul-aiyedun/add_maven_publish_workflow secrets: GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} From 14b7677362eb091d96a7a7938fe311ce3904dc1d Mon Sep 17 00:00:00 2001 From: Paul Aiyedun <53453937+paul-aiyedun@users.noreply.github.com> Date: Fri, 31 Jul 2026 22:17:55 +0000 Subject: [PATCH 18/29] TEMPORARY: Update referenced shared-workflows commit --- .github/workflows/pr.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 2f81f98308cd..aa0b0f276528 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -56,7 +56,7 @@ jobs: permissions: actions: read contents: read - uses: rapidsai/shared-workflows/.github/workflows/maven-publish.yaml@57adbbe21eb864d9f6511d5caa7286d3ef02f678 # paul-aiyedun/add_maven_publish_workflow + uses: rapidsai/shared-workflows/.github/workflows/maven-publish.yaml@4e4a45a84cc91d1b196adcbfabd46f98d6a9bc59 # paul-aiyedun/add_maven_publish_workflow secrets: GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} @@ -66,4 +66,4 @@ jobs: artifact-name: cudf_java_maven_repo source-git-sha: ${{ github.sha }} # false = validate + drop (safe). true = stage PENDING for manual publish. - stage-for-maven-central-publish: false + stage-for-maven-central-publish: true From 55e6366ad32391cb2be51a20e7386b5619f80ea9 Mon Sep 17 00:00:00 2001 From: Paul Aiyedun <53453937+paul-aiyedun@users.noreply.github.com> Date: Mon, 3 Aug 2026 17:07:43 -0700 Subject: [PATCH 19/29] Clean up temporary changes --- .github/workflows/build.yaml | 2 +- .github/workflows/pr.yaml | 913 ++++++++++++++++++-- java/ci/README.md | 9 +- java/ci/build_cudf_java_jar_in_container.sh | 4 +- 4 files changed, 870 insertions(+), 58 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index e5ca27de7db8..e647f09885b8 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -560,4 +560,4 @@ jobs: artifact-name: cudf_java_maven_repo source-git-sha: ${{ inputs.sha || github.sha }} # false = validate + drop (safe). true = stage PENDING for manual publish. - stage-for-maven-central-publish: false + stage-for-maven-central-publish: true diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index aa0b0f276528..d2a097dbdf43 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -1,20 +1,3 @@ -# TEMPORARY (revert before merge): this file is stripped down to just the -# maven-publish end-to-end rehearsal. -# -# java-fetch-prebuilt: downloads the cudf_java_maven_repo artifact from a -# known-good release-shaped prior run -# (${GITHUB_SERVER_URL}/rapidsai/cudf/actions/runs/30388790977) -# and re-uploads it under the same name in this run so -# the shared maven-publish workflow's -# actions/download-artifact step can consume it as if -# java-gather had run here. -# java-publish: exact copy of build.yaml's java-publish job, but -# pinned to the head commit of the shared-workflows -# PR under review (rapidsai/shared-workflows#606) and -# gated only on java-fetch-prebuilt so we skip the -# java-build / java-gather chain entirely. -# -# Restore the full PR workflow before merging. name: pr on: push: @@ -25,45 +8,869 @@ concurrency: cancel-in-progress: true permissions: {} jobs: - java-fetch-prebuilt: + # Please keep pr-builder as the top job here + pr-builder: + needs: + - 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-other-tests + - conda-java-tests + - conda-notebook-tests + - docs-build + - wheel-build-libcudf + - wheel-build-libcudf-streaming + - wheel-build-cudf-streaming + - wheel-tests-cudf-streaming + - wheel-build-pylibcudf + - wheel-build-cudf + - wheel-tests-cudf + - wheel-build-cudf-polars + - wheel-tests-cudf-polars + - cudf-polars-polars-tests + - wheel-build-dask-cudf + - wheel-tests-dask-cudf + - devcontainer + - unit-tests-cudf-pandas + - pandas-tests + - narwhals-tests + - telemetry-setup + - third-party-integration-tests-cudf-pandas + uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@release/26.08 + 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 + check-nightly-ci: runs-on: ubuntu-latest permissions: actions: read - contents: read + id-token: write env: - # cudf_java_maven_repo from a prior run whose java-build ran with a - # release-shaped GITHUB_REF (v26.08.0 tag). Verified locally in - # release_testing/artifact2 to contain 26.08.0 (no -SNAPSHOT). - PREBUILT_RUN_ID: "30388790977" + GH_TOKEN: ${{ github.token }} steps: - - name: Download cudf_java_maven_repo from prior run - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 - with: - name: cudf_java_maven_repo - path: maven-repo - github-token: ${{ github.token }} - repository: ${{ github.repository }} - run-id: ${{ env.PREBUILT_RUN_ID }} - - name: Re-upload cudf_java_maven_repo for this run - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + - 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: - name: cudf_java_maven_repo - path: maven-repo - if-no-files-found: error - - java-publish: - needs: [java-fetch-prebuilt] - permissions: - actions: read - contents: read - uses: rapidsai/shared-workflows/.github/workflows/maven-publish.yaml@4e4a45a84cc91d1b196adcbfabd46f98d6a9bc59 # paul-aiyedun/add_maven_publish_workflow - secrets: - GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} - GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} - MAVEN_DEPLOY_TOKEN: ${{ secrets.MAVEN_DEPLOY_TOKEN }} - with: - publication-type: 'rc' - artifact-name: cudf_java_maven_repo - source-git-sha: ${{ github.sha }} - # false = validate + drop (safe). true = stage PENDING for manual publish. - stage-for-maven-central-publish: true + 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@release/26.08 + with: + files_yaml: | + build_docs: + - '**' + - '!**/REVIEW_GUIDELINES.md' + - '!.coderabbit.yaml' + - '!.clang-format' + - '!.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/auto-assign.yml' + - '!.github/workflows/issue-release-scheduled.yml' + - '!.github/workflows/labeler.yml' + - '!.github/workflows/pr_issue_status_automation.yml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!ci/build_wheel*.sh' + - '!ci/check_style.sh' + - '!ci/discover_libcudf_tests.sh' + - '!ci/release/update-version.sh' + - '!ci/run_*.sh' + - '!ci/test_*.sh' + - '!ci/validate_wheel.sh' + - '!codecov.yml' + - '!SECURITY.md' + test_cpp: + - '**' + - '!**/REVIEW_GUIDELINES.md' + - '!.coderabbit.yaml' + - '!.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/auto-assign.yml' + - '!.github/workflows/issue-release-scheduled.yml' + - '!.github/workflows/labeler.yml' + - '!.github/workflows/pr_issue_status_automation.yml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!CONTRIBUTING.md' + - '!README.md' + - '!SECURITY.md' + - '!ci/cudf_pandas_scripts/**' + - '!ci/build_docs.sh' + - '!ci/build_python*.sh' + - '!ci/build_wheel*.sh' + - '!ci/check_style.sh' + - '!ci/cudf_pandas_scripts/**' + - '!ci/release/update-version.sh' + - '!ci/test_python*.sh' + - '!ci/test_wheel*.sh' + - '!ci/validate_wheel.sh' + - '!docs/**' + - '!img/**' + - '!java/**' + - '!notebooks/**' + - '!python/**' + test_cudf_pandas: + - '**' + - '!**/REVIEW_GUIDELINES.md' + - '!.coderabbit.yaml' + - '!.clang-format' + - '!.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/auto-assign.yml' + - '!.github/workflows/issue-release-scheduled.yml' + - '!.github/workflows/labeler.yml' + - '!.github/workflows/pr_issue_status_automation.yml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!CONTRIBUTING.md' + - '!README.md' + - '!SECURITY.md' + - '!ci/release/update-version.sh' + - '!ci/test_java.sh' + - '!ci/validate_wheel.sh' + - '!docs/**' + - '!img/**' + - '!java/**' + - '!notebooks/**' + test_java: + - '**' + - '!**/REVIEW_GUIDELINES.md' + - '!.coderabbit.yaml' + - '!.clang-format' + - '!.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/auto-assign.yml' + - '!.github/workflows/issue-release-scheduled.yml' + - '!.github/workflows/labeler.yml' + - '!.github/workflows/pr_issue_status_automation.yml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!CONTRIBUTING.md' + - '!README.md' + - '!SECURITY.md' + - '!ci/build_docs.sh' + - '!ci/build_wheel*.sh' + - '!ci/check_style.sh' + - '!ci/cudf_pandas_scripts/**' + - '!ci/release/update-version.sh' + - '!ci/test_wheel*.sh' + - '!ci/validate_wheel.sh' + - '!ci/release/update-version.sh' + - '!codecov.yml' + - '!docs/**' + - '!img/**' + - '!notebooks/**' + - '!python/**' + test_notebooks: + - '**' + - '!**/REVIEW_GUIDELINES.md' + - '!.coderabbit.yaml' + - '!.clang-format' + - '!.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/auto-assign.yml' + - '!.github/workflows/issue-release-scheduled.yml' + - '!.github/workflows/labeler.yml' + - '!.github/workflows/pr_issue_status_automation.yml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!CONTRIBUTING.md' + - '!README.md' + - '!SECURITY.md' + - '!ci/build_wheel*.sh' + - '!ci/cudf_pandas_scripts/**' + - '!ci/release/update-version.sh' + - '!ci/test_wheel*.sh' + - '!ci/validate_wheel.sh' + - '!codecov.yml' + - '!java/**' + test_python_conda: + - '**' + - '!**/REVIEW_GUIDELINES.md' + - '!.coderabbit.yaml' + - '!.clang-format' + - '!.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/auto-assign.yml' + - '!.github/workflows/issue-release-scheduled.yml' + - '!.github/workflows/labeler.yml' + - '!.github/workflows/pr_issue_status_automation.yml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!CONTRIBUTING.md' + - '!README.md' + - '!SECURITY.md' + - '!ci/build_docs.sh' + - '!ci/build_wheel*.sh' + - '!ci/check_style.sh' + - '!ci/cudf_pandas_scripts/**' + - '!ci/release/update-version.sh' + - '!ci/test_java.sh' + - '!ci/test_wheel*.sh' + - '!ci/validate_wheel.sh' + - '!docs/**' + - '!img/**' + - '!java/**' + - '!notebooks/**' + test_python_wheels: + - '**' + - '!**/REVIEW_GUIDELINES.md' + - '!.coderabbit.yaml' + - '!.clang-format' + - '!.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/auto-assign.yml' + - '!.github/workflows/issue-release-scheduled.yml' + - '!.github/workflows/labeler.yml' + - '!.github/workflows/pr_issue_status_automation.yml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!CONTRIBUTING.md' + - '!README.md' + - '!SECURITY.md' + - '!ci/build_cpp.sh' + - '!ci/build_docs.sh' + - '!ci/build_python_noarch.sh' + - '!ci/build_python.sh' + - '!ci/check-style.sh' + - '!ci/cudf_pandas_scripts/**' + - '!ci/release/update-version.sh' + - '!ci/test_cpp.sh' + - '!ci/test_cpp_common.sh' + - '!ci/test_cpp_memcheck.sh' + - '!ci/test_java.sh' + - '!ci/test_notebooks.sh' + - '!ci/test_python_common.sh' + - '!ci/test_python_cudf.sh' + - '!ci/test_python_other.sh' + - '!codecov.yml' + - '!conda/**' + - '!docs/**' + - '!img/**' + - '!java/**' + - '!notebooks/**' + not_cudf_polars: + - '**' + - '!python/cudf_polars/**' + neither_cudf_polars_nor_dask_cudf: + - '**' + - '!python/cudf_polars/**' + - '!python/dask_cudf/**' + neither_cudf_nor_dask_cudf: + - '**' + - '!python/cudf/**' + - '!python/dask_cudf/**' + neither_cpp_nor_cudf_polars_nor_dask_cudf: + - '**' + - '!cpp/**' + - '!python/cudf_polars/**' + - '!python/dask_cudf/**' + checks: + permissions: + contents: read + needs: telemetry-setup + uses: rapidsai/shared-workflows/.github/workflows/checks.yaml@release/26.08 + with: + enable_check_generated_files: false + ignored_pr_jobs: "telemetry-summarize spark-rapids-jni cuml-compat-tests" + conda-cpp-build: + needs: 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@release/26.08 + with: + build_type: pull-request + node_type: cpu16 + script: ci/build_cpp.sh + cmake-tests: + needs: 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/custom-job.yaml@release/26.08 + with: + build_type: pull-request + node_type: cpu16 + arch: "amd64" + container_image: "rapidsai/ci-conda:26.08-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 + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@release/26.08 + 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@release/26.08 + 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp + with: + build_type: pull-request + script: ci/test_cpp.sh + conda-python-build: + needs: 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@release/26.08 + 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-build-noarch: + needs: [conda-cpp-build, conda-python-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@release/26.08 + with: + build_type: pull-request + 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf + with: + build_type: pull-request + script: "ci/test_python_cudf.sh" + conda-python-other-tests: + # Tests for dask_cudf, cudf_polars, custreamz, cudf_kafka are separated for CI parallelism + needs: [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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda + with: + build_type: pull-request + # https://github.com/rapidsai/cudf/pull/22381/changes#r3196736965 + container-options: "--cap-add CAP_SYS_PTRACE --shm-size=8g --ulimit=nofile=1000000:1000000" + script: "ci/test_python_other.sh" + conda-java-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/custom-job.yaml@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_java + with: + build_type: pull-request + node_type: "gpu-l4-latest-1" + arch: "amd64" + container_image: "rapidsai/ci-conda:26.08-latest" + script: "ci/test_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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_notebooks + with: + build_type: pull-request + node_type: "gpu-l4-latest-1" + arch: "amd64" + container_image: "rapidsai/ci-conda:26.08-latest" + script: "ci/test_notebooks.sh" + docs-build: + 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).build_docs + with: + build_type: pull-request + node_type: "gpu-l4-latest-1" + arch: "amd64" + container_image: "rapidsai/ci-conda:26.08-latest" + script: "ci/build_docs.sh" + wheel-build-libcudf: + needs: 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/wheels-build.yaml@release/26.08 + with: + # build for every combination of arch and CUDA version, but only for the latest Python + matrix_filter: group_by([.ARCH, (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | map(max_by(.PY_VER|split(".")|map(tonumber))) + build_type: pull-request + node_type: cpu16 + script: "ci/build_wheel_libcudf.sh" + package-name: libcudf + package-type: cpp + wheel-build-libcudf-streaming: + needs: [checks, wheel-build-libcudf] + 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-build.yaml@release/26.08 + with: + # build for every combination of arch and CUDA version, but only for the latest Python + matrix_filter: group_by([.ARCH, (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | map(max_by(.PY_VER|split(".")|map(tonumber))) + build_type: pull-request + node_type: cpu16 + script: "ci/build_wheel_libcudf_streaming.sh" + package-name: libcudf_streaming + package-type: cpp + wheel-build-cudf-streaming: + needs: [checks, wheel-build-libcudf-streaming, wheel-build-pylibcudf] + 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-build.yaml@release/26.08 + with: + # 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))) + build_type: pull-request + node_type: cpu16 + script: "ci/build_wheel_cudf_streaming.sh" + package-name: cudf_streaming + package-type: python + wheel-tests-cudf-streaming: + needs: [wheel-build-cudf-streaming, 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels + with: + build_type: pull-request + script: ci/test_wheel_cudf_streaming.sh + wheel-build-pylibcudf: + needs: [checks, wheel-build-libcudf] + 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-build.yaml@release/26.08 + with: + build_type: pull-request + node_type: cpu8 + script: "ci/build_wheel_pylibcudf.sh" + package-name: pylibcudf + package-type: python + # 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-build-cudf: + needs: wheel-build-pylibcudf + 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-build.yaml@release/26.08 + with: + build_type: pull-request + node_type: cpu8 + script: "ci/build_wheel_cudf.sh" + package-name: cudf + package-type: python + # 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-cudf: + needs: [wheel-build-cudf, 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf + with: + build_type: pull-request + script: ci/test_wheel_cudf.sh + wheel-build-cudf-polars: + needs: wheel-build-pylibcudf + 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-build.yaml@release/26.08 + 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 + node_type: cpu8 + script: "ci/build_wheel_cudf_polars.sh" + package-name: cudf_polars + package-type: python + pure-wheel: true + wheel-tests-cudf-polars: + needs: [wheel-build-cudf-polars, wheel-build-cudf-streaming, 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_nor_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 + 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-cudf-polars, wheel-build-cudf-streaming, 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_nor_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_cudf_polars_polars_tests.sh" + wheel-build-dask-cudf: + needs: wheel-build-cudf + 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-build.yaml@release/26.08 + 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 + node_type: cpu8 + script: "ci/build_wheel_dask_cudf.sh" + package-name: dask_cudf + package-type: python + pure-wheel: true + wheel-tests-dask-cudf: + needs: [wheel-build-dask-cudf, 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).not_cudf_polars + 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@release/26.08 + 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-cudf, 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@release/26.08 + if: (fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels || fromJSON(needs.changed-files.outputs.changed_file_groups).test_cudf_pandas) && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf + with: + # This selects the latest supported Python + CUDA minor versions for each ARCH/CUDA major version combo + matrix_filter: group_by([(.ARCH), (.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/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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cpp_nor_cudf_polars_nor_dask_cudf + with: + build_type: pull-request + branch: ${{ inputs.branch }} + date: ${{ inputs.date }} + sha: ${{ inputs.sha }} + node_type: "gpu-l4-latest-1" + continue-on-error: true + container_image: "rapidsai/ci-conda:26.08-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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf + with: + build_type: pull-request + branch: ${{ inputs.branch }} + date: ${{ inputs.date }} + sha: ${{ inputs.sha }} + node_type: "gpu-l4-latest-1" + continue-on-error: true + container_image: "rapidsai/ci-conda:26.08-latest" + script: "ci/test_cuml_compat.sh" + pandas-tests: + # run the Pandas unit tests using PR branch + needs: [wheel-build-cudf, 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cpp_nor_cudf_polars_nor_dask_cudf + with: + build_type: pull-request + branch: ${{ inputs.branch }} + date: ${{ inputs.date }} + sha: ${{ inputs.sha }} + node_type: "gpu-l4-latest-1" + container_image: "rapidsai/citestwheel:26.08-latest" + script: ci/cudf_pandas_scripts/pandas-tests/run.sh pr + 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cpp_nor_cudf_polars_nor_dask_cudf + with: + build_type: pull-request + branch: ${{ inputs.branch }} + date: ${{ inputs.date }} + sha: ${{ inputs.sha }} + node_type: "gpu-l4-latest-1" + container_image: "rapidsai/ci-conda:26.08-latest" + script: ci/test_narwhals.sh + spark-rapids-jni: + needs: changed-files + permissions: + actions: read + contents: read + id-token: write + packages: read + pull-requests: read + uses: ./.github/workflows/spark-rapids-jni.yaml + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_java + 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 }} diff --git a/java/ci/README.md b/java/ci/README.md index 87a278a5a5b5..b880028b47b8 100644 --- a/java/ci/README.md +++ b/java/ci/README.md @@ -34,12 +34,15 @@ so plain `rm -rf` works. ### Step 2 - Package the cuDF Java JAR for one classifier ```bash -./java/ci/build_cudf_java_jar.sh \ +GITHUB_REF=refs/heads/my-branch ./java/ci/build_cudf_java_jar.sh \ --libcudf-dir /tmp/libcudf-cuda12 \ --output-dir /tmp/jars \ --cuda-version 12.9 ``` +`GITHUB_REF` is required and selects release-tag vs SNAPSHOT versioning. See +the versioning section below. + This compiles the JNI layer against the static libcudf from Step 1 and emits the classifier JAR (e.g. `cudf-26.08.0-SNAPSHOT-cuda12.jar`), a classifier-independent sources jar and javadoc jar, and the POM into a @@ -90,7 +93,9 @@ lays them out as: The set of classifiers is whatever subdirectories are present under `--jars-dir`. For a local `x86_64`-only run, populate `/tmp/jars/cuda12/` and `/tmp/jars/cuda13/`. For the full four-way release build, add -`/tmp/jars/cuda12-arm64/` and `/tmp/jars/cuda13-arm64/`. +`/tmp/jars/cuda12-arm64/` and `/tmp/jars/cuda13-arm64/`. The `cuda12` +subdirectory is required because the unclassified primary JAR is copied from +it, so an `aarch64`-only set of subdirectories is not a valid gather input. ### Release Tag vs SNAPSHOT versioning diff --git a/java/ci/build_cudf_java_jar_in_container.sh b/java/ci/build_cudf_java_jar_in_container.sh index 197c85c3bc64..c9ad7177df41 100755 --- a/java/ci/build_cudf_java_jar_in_container.sh +++ b/java/ci/build_cudf_java_jar_in_container.sh @@ -110,9 +110,9 @@ CUDF_VERSION="$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout # Release tag builds strip -SNAPSHOT and rewrite the POM so packaged artifacts # carry the release version. Non-release builds keep -SNAPSHOT. -if rapids-is-release-build 2>/dev/null; then +if rapids-is-release-build; then CUDF_VERSION="${CUDF_VERSION%-SNAPSHOT}" - mvn -B versions:set -DnewVersion="${CUDF_VERSION}" -DgenerateBackupPoms=false "${BUILD_ARG[@]}" + mvn versions:set -DnewVersion="${CUDF_VERSION}" -DgenerateBackupPoms=false "${BUILD_ARG[@]}" fi rapids-logger "Packaging cuDF Java JAR version ${CUDF_VERSION} (libcudf: ${CUDF_INSTALL_DIR})" From c047a47af3c13616c162751087d00e22b5e85930 Mon Sep 17 00:00:00 2001 From: Paul Aiyedun <53453937+paul-aiyedun@users.noreply.github.com> Date: Mon, 3 Aug 2026 21:33:34 -0700 Subject: [PATCH 20/29] TEMPORARY: end-to-end workflow validation --- .github/workflows/pr.yaml | 956 ++------------------ java/ci/build_cudf_java_jar_in_container.sh | 7 + 2 files changed, 104 insertions(+), 859 deletions(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index d2a097dbdf43..d4e10884d7d5 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -1,3 +1,19 @@ +# TEMPORARY (revert before merge): this file is stripped down to the +# java-build -> java-gather -> java-publish chain copied from build.yaml, so a +# PR push rehearses the full Maven Central path end to end without spending CI +# time on the rest of the PR pipeline. Restore the full PR workflow before +# merging. +# +# Deviations from build.yaml, each required to make the chain runnable here: +# - java-build drops `needs: [telemetry-setup]`, since that job is not copied. +# - java-publish drops the `github.ref_type == 'tag'` gate, which is false on +# a pull-request branch push. +# - stage-for-maven-central-publish is false, so the bundle is validated and +# dropped rather than staged in the Portal. +# +# Paired with the temporary GITHUB_REF override in +# java/ci/build_cudf_java_jar_in_container.sh, which forces the release-tag +# path so the produced artifact is release-shaped (no -SNAPSHOT). name: pr on: push: @@ -8,869 +24,91 @@ concurrency: cancel-in-progress: true permissions: {} jobs: - # Please keep pr-builder as the top job here - pr-builder: - needs: - - 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-other-tests - - conda-java-tests - - conda-notebook-tests - - docs-build - - wheel-build-libcudf - - wheel-build-libcudf-streaming - - wheel-build-cudf-streaming - - wheel-tests-cudf-streaming - - wheel-build-pylibcudf - - wheel-build-cudf - - wheel-tests-cudf - - wheel-build-cudf-polars - - wheel-tests-cudf-polars - - cudf-polars-polars-tests - - wheel-build-dask-cudf - - wheel-tests-dask-cudf - - devcontainer - - unit-tests-cudf-pandas - - pandas-tests - - narwhals-tests - - telemetry-setup - - third-party-integration-tests-cudf-pandas - uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@release/26.08 + # Build the cuDF Java JAR for every Maven classifier. + java-build: + strategy: + fail-fast: false + matrix: + include: + - { cuda: "12.9", cuda_major: "12", arch: "x86_64", runner: "linux-amd64-cpu16" } + - { cuda: "13.3", cuda_major: "13", arch: "x86_64", runner: "linux-amd64-cpu16" } + - { cuda: "12.9", cuda_major: "12", arch: "aarch64", runner: "linux-arm64-cpu16" } + - { cuda: "13.3", cuda_major: "13", arch: "aarch64", runner: "linux-arm64-cpu16" } + runs-on: ${{ matrix.runner }} 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 - 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 + - name: Checkout code repo + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 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@release/26.08 - with: - files_yaml: | - build_docs: - - '**' - - '!**/REVIEW_GUIDELINES.md' - - '!.coderabbit.yaml' - - '!.clang-format' - - '!.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/auto-assign.yml' - - '!.github/workflows/issue-release-scheduled.yml' - - '!.github/workflows/labeler.yml' - - '!.github/workflows/pr_issue_status_automation.yml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!ci/build_wheel*.sh' - - '!ci/check_style.sh' - - '!ci/discover_libcudf_tests.sh' - - '!ci/release/update-version.sh' - - '!ci/run_*.sh' - - '!ci/test_*.sh' - - '!ci/validate_wheel.sh' - - '!codecov.yml' - - '!SECURITY.md' - test_cpp: - - '**' - - '!**/REVIEW_GUIDELINES.md' - - '!.coderabbit.yaml' - - '!.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/auto-assign.yml' - - '!.github/workflows/issue-release-scheduled.yml' - - '!.github/workflows/labeler.yml' - - '!.github/workflows/pr_issue_status_automation.yml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!CONTRIBUTING.md' - - '!README.md' - - '!SECURITY.md' - - '!ci/cudf_pandas_scripts/**' - - '!ci/build_docs.sh' - - '!ci/build_python*.sh' - - '!ci/build_wheel*.sh' - - '!ci/check_style.sh' - - '!ci/cudf_pandas_scripts/**' - - '!ci/release/update-version.sh' - - '!ci/test_python*.sh' - - '!ci/test_wheel*.sh' - - '!ci/validate_wheel.sh' - - '!docs/**' - - '!img/**' - - '!java/**' - - '!notebooks/**' - - '!python/**' - test_cudf_pandas: - - '**' - - '!**/REVIEW_GUIDELINES.md' - - '!.coderabbit.yaml' - - '!.clang-format' - - '!.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/auto-assign.yml' - - '!.github/workflows/issue-release-scheduled.yml' - - '!.github/workflows/labeler.yml' - - '!.github/workflows/pr_issue_status_automation.yml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!CONTRIBUTING.md' - - '!README.md' - - '!SECURITY.md' - - '!ci/release/update-version.sh' - - '!ci/test_java.sh' - - '!ci/validate_wheel.sh' - - '!docs/**' - - '!img/**' - - '!java/**' - - '!notebooks/**' - test_java: - - '**' - - '!**/REVIEW_GUIDELINES.md' - - '!.coderabbit.yaml' - - '!.clang-format' - - '!.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/auto-assign.yml' - - '!.github/workflows/issue-release-scheduled.yml' - - '!.github/workflows/labeler.yml' - - '!.github/workflows/pr_issue_status_automation.yml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!CONTRIBUTING.md' - - '!README.md' - - '!SECURITY.md' - - '!ci/build_docs.sh' - - '!ci/build_wheel*.sh' - - '!ci/check_style.sh' - - '!ci/cudf_pandas_scripts/**' - - '!ci/release/update-version.sh' - - '!ci/test_wheel*.sh' - - '!ci/validate_wheel.sh' - - '!ci/release/update-version.sh' - - '!codecov.yml' - - '!docs/**' - - '!img/**' - - '!notebooks/**' - - '!python/**' - test_notebooks: - - '**' - - '!**/REVIEW_GUIDELINES.md' - - '!.coderabbit.yaml' - - '!.clang-format' - - '!.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/auto-assign.yml' - - '!.github/workflows/issue-release-scheduled.yml' - - '!.github/workflows/labeler.yml' - - '!.github/workflows/pr_issue_status_automation.yml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!CONTRIBUTING.md' - - '!README.md' - - '!SECURITY.md' - - '!ci/build_wheel*.sh' - - '!ci/cudf_pandas_scripts/**' - - '!ci/release/update-version.sh' - - '!ci/test_wheel*.sh' - - '!ci/validate_wheel.sh' - - '!codecov.yml' - - '!java/**' - test_python_conda: - - '**' - - '!**/REVIEW_GUIDELINES.md' - - '!.coderabbit.yaml' - - '!.clang-format' - - '!.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/auto-assign.yml' - - '!.github/workflows/issue-release-scheduled.yml' - - '!.github/workflows/labeler.yml' - - '!.github/workflows/pr_issue_status_automation.yml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!CONTRIBUTING.md' - - '!README.md' - - '!SECURITY.md' - - '!ci/build_docs.sh' - - '!ci/build_wheel*.sh' - - '!ci/check_style.sh' - - '!ci/cudf_pandas_scripts/**' - - '!ci/release/update-version.sh' - - '!ci/test_java.sh' - - '!ci/test_wheel*.sh' - - '!ci/validate_wheel.sh' - - '!docs/**' - - '!img/**' - - '!java/**' - - '!notebooks/**' - test_python_wheels: - - '**' - - '!**/REVIEW_GUIDELINES.md' - - '!.coderabbit.yaml' - - '!.clang-format' - - '!.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/auto-assign.yml' - - '!.github/workflows/issue-release-scheduled.yml' - - '!.github/workflows/labeler.yml' - - '!.github/workflows/pr_issue_status_automation.yml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!CONTRIBUTING.md' - - '!README.md' - - '!SECURITY.md' - - '!ci/build_cpp.sh' - - '!ci/build_docs.sh' - - '!ci/build_python_noarch.sh' - - '!ci/build_python.sh' - - '!ci/check-style.sh' - - '!ci/cudf_pandas_scripts/**' - - '!ci/release/update-version.sh' - - '!ci/test_cpp.sh' - - '!ci/test_cpp_common.sh' - - '!ci/test_cpp_memcheck.sh' - - '!ci/test_java.sh' - - '!ci/test_notebooks.sh' - - '!ci/test_python_common.sh' - - '!ci/test_python_cudf.sh' - - '!ci/test_python_other.sh' - - '!codecov.yml' - - '!conda/**' - - '!docs/**' - - '!img/**' - - '!java/**' - - '!notebooks/**' - not_cudf_polars: - - '**' - - '!python/cudf_polars/**' - neither_cudf_polars_nor_dask_cudf: - - '**' - - '!python/cudf_polars/**' - - '!python/dask_cudf/**' - neither_cudf_nor_dask_cudf: - - '**' - - '!python/cudf/**' - - '!python/dask_cudf/**' - neither_cpp_nor_cudf_polars_nor_dask_cudf: - - '**' - - '!cpp/**' - - '!python/cudf_polars/**' - - '!python/dask_cudf/**' - checks: - permissions: - contents: read - needs: telemetry-setup - uses: rapidsai/shared-workflows/.github/workflows/checks.yaml@release/26.08 - with: - enable_check_generated_files: false - ignored_pr_jobs: "telemetry-summarize spark-rapids-jni cuml-compat-tests" - conda-cpp-build: - needs: 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@release/26.08 - with: - build_type: pull-request - node_type: cpu16 - script: ci/build_cpp.sh - cmake-tests: - needs: 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/custom-job.yaml@release/26.08 - with: - build_type: pull-request - node_type: cpu16 - arch: "amd64" - container_image: "rapidsai/ci-conda:26.08-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 - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@release/26.08 - 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@release/26.08 - 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp - with: - build_type: pull-request - script: ci/test_cpp.sh - conda-python-build: - needs: 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@release/26.08 - 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-build-noarch: - needs: [conda-cpp-build, conda-python-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@release/26.08 - with: - build_type: pull-request - 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf - with: - build_type: pull-request - script: "ci/test_python_cudf.sh" - conda-python-other-tests: - # Tests for dask_cudf, cudf_polars, custreamz, cudf_kafka are separated for CI parallelism - needs: [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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda - with: - build_type: pull-request - # https://github.com/rapidsai/cudf/pull/22381/changes#r3196736965 - container-options: "--cap-add CAP_SYS_PTRACE --shm-size=8g --ulimit=nofile=1000000:1000000" - script: "ci/test_python_other.sh" - conda-java-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/custom-job.yaml@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_java - with: - build_type: pull-request - node_type: "gpu-l4-latest-1" - arch: "amd64" - container_image: "rapidsai/ci-conda:26.08-latest" - script: "ci/test_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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_notebooks - with: - build_type: pull-request - node_type: "gpu-l4-latest-1" - arch: "amd64" - container_image: "rapidsai/ci-conda:26.08-latest" - script: "ci/test_notebooks.sh" - docs-build: - 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).build_docs - with: - build_type: pull-request - node_type: "gpu-l4-latest-1" - arch: "amd64" - container_image: "rapidsai/ci-conda:26.08-latest" - script: "ci/build_docs.sh" - wheel-build-libcudf: - needs: 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/wheels-build.yaml@release/26.08 - with: - # build for every combination of arch and CUDA version, but only for the latest Python - matrix_filter: group_by([.ARCH, (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | map(max_by(.PY_VER|split(".")|map(tonumber))) - build_type: pull-request - node_type: cpu16 - script: "ci/build_wheel_libcudf.sh" - package-name: libcudf - package-type: cpp - wheel-build-libcudf-streaming: - needs: [checks, wheel-build-libcudf] - 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-build.yaml@release/26.08 - with: - # build for every combination of arch and CUDA version, but only for the latest Python - matrix_filter: group_by([.ARCH, (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | map(max_by(.PY_VER|split(".")|map(tonumber))) - build_type: pull-request - node_type: cpu16 - script: "ci/build_wheel_libcudf_streaming.sh" - package-name: libcudf_streaming - package-type: cpp - wheel-build-cudf-streaming: - needs: [checks, wheel-build-libcudf-streaming, wheel-build-pylibcudf] - 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-build.yaml@release/26.08 - with: - # 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))) - build_type: pull-request - node_type: cpu16 - script: "ci/build_wheel_cudf_streaming.sh" - package-name: cudf_streaming - package-type: python - wheel-tests-cudf-streaming: - needs: [wheel-build-cudf-streaming, 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels - with: - build_type: pull-request - script: ci/test_wheel_cudf_streaming.sh - wheel-build-pylibcudf: - needs: [checks, wheel-build-libcudf] - 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-build.yaml@release/26.08 - with: - build_type: pull-request - node_type: cpu8 - script: "ci/build_wheel_pylibcudf.sh" - package-name: pylibcudf - package-type: python - # 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-build-cudf: - needs: wheel-build-pylibcudf - 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-build.yaml@release/26.08 - with: - build_type: pull-request - node_type: cpu8 - script: "ci/build_wheel_cudf.sh" - package-name: cudf - package-type: python - # 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-cudf: - needs: [wheel-build-cudf, 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf - with: - build_type: pull-request - script: ci/test_wheel_cudf.sh - wheel-build-cudf-polars: - needs: wheel-build-pylibcudf - 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-build.yaml@release/26.08 - 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 - node_type: cpu8 - script: "ci/build_wheel_cudf_polars.sh" - package-name: cudf_polars - package-type: python - pure-wheel: true - wheel-tests-cudf-polars: - needs: [wheel-build-cudf-polars, wheel-build-cudf-streaming, 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_nor_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 - 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-cudf-polars, wheel-build-cudf-streaming, 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_nor_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_cudf_polars_polars_tests.sh" - wheel-build-dask-cudf: - needs: wheel-build-cudf - 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-build.yaml@release/26.08 - 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 - node_type: cpu8 - script: "ci/build_wheel_dask_cudf.sh" - package-name: dask_cudf - package-type: python - pure-wheel: true - wheel-tests-dask-cudf: - needs: [wheel-build-dask-cudf, 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).not_cudf_polars - 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@release/26.08 - 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-cudf, 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@release/26.08 - if: (fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels || fromJSON(needs.changed-files.outputs.changed_file_groups).test_cudf_pandas) && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf - with: - # This selects the latest supported Python + CUDA minor versions for each ARCH/CUDA major version combo - matrix_filter: group_by([(.ARCH), (.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/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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cpp_nor_cudf_polars_nor_dask_cudf - with: - build_type: pull-request - branch: ${{ inputs.branch }} - date: ${{ inputs.date }} - sha: ${{ inputs.sha }} - node_type: "gpu-l4-latest-1" - continue-on-error: true - container_image: "rapidsai/ci-conda:26.08-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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf - with: - build_type: pull-request - branch: ${{ inputs.branch }} - date: ${{ inputs.date }} - sha: ${{ inputs.sha }} - node_type: "gpu-l4-latest-1" - continue-on-error: true - container_image: "rapidsai/ci-conda:26.08-latest" - script: "ci/test_cuml_compat.sh" - pandas-tests: - # run the Pandas unit tests using PR branch - needs: [wheel-build-cudf, 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cpp_nor_cudf_polars_nor_dask_cudf - with: - build_type: pull-request - branch: ${{ inputs.branch }} - date: ${{ inputs.date }} - sha: ${{ inputs.sha }} - node_type: "gpu-l4-latest-1" - container_image: "rapidsai/citestwheel:26.08-latest" - script: ci/cudf_pandas_scripts/pandas-tests/run.sh pr - 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cpp_nor_cudf_polars_nor_dask_cudf - with: - build_type: pull-request - branch: ${{ inputs.branch }} - date: ${{ inputs.date }} - sha: ${{ inputs.sha }} - node_type: "gpu-l4-latest-1" - container_image: "rapidsai/ci-conda:26.08-latest" - script: ci/test_narwhals.sh - spark-rapids-jni: - needs: changed-files - permissions: - actions: read - contents: read - id-token: write - packages: read - pull-requests: read - uses: ./.github/workflows/spark-rapids-jni.yaml - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_java - telemetry-summarize: - # This job must use a self-hosted runner to record telemetry traces. + ref: ${{ inputs.sha }} + fetch-depth: 0 + persist-credentials: false + - name: Build static libcudf + run: | + ./java/ci/build_static_libcudf.sh \ + --output-dir "${RUNNER_TEMP}/libcudf" \ + --cuda-version "${{ matrix.cuda }}" + - name: Build cuDF Java JAR + run: | + ./java/ci/build_cudf_java_jar.sh \ + --libcudf-dir "${RUNNER_TEMP}/libcudf" \ + --output-dir "${RUNNER_TEMP}/jars" \ + --cuda-version "${{ matrix.cuda }}" + - name: Upload per-entry JAR artifact + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: cudf_java_cuda${{ matrix.cuda_major }}_${{ matrix.arch }} + # Ship only the JARs and POMs. Exclude the per-classifier Maven build scratch dir. + path: | + ${{ runner.temp }}/jars + !${{ runner.temp }}/jars/.mvn-temp-target + if-no-files-found: error + # Assemble the per-classifier JARs into one Maven-repository layout. + java-gather: + needs: [java-build] runs-on: linux-amd64-cpu4 permissions: - actions: write - needs: pr-builder - if: ${{ vars.TELEMETRY_ENABLED == 'true' && !cancelled() }} - continue-on-error: true + contents: read steps: - - name: Telemetry summarize - uses: rapidsai/shared-actions/telemetry-dispatch-summarize@main - env: - GH_TOKEN: ${{ github.token }} + - name: Checkout code repo + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + with: + ref: ${{ inputs.sha }} + persist-credentials: false + - name: Download per-entry JAR artifacts + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + with: + pattern: cudf_java_cuda* + path: ${{ runner.temp }}/jars + merge-multiple: true + - name: Assemble Maven repository layout + run: | + ./java/ci/assemble_maven_repo.sh \ + --jars-dir "${RUNNER_TEMP}/jars" \ + --output-dir "${RUNNER_TEMP}/maven-repo" + - name: Upload combined Maven repository artifact + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: cudf_java_maven_repo + path: ${{ runner.temp }}/maven-repo + if-no-files-found: error + + # Publish tagged release candidates to Maven Central via the Sonatype + # Central Publisher Portal. + java-publish: + needs: [java-gather] + permissions: + actions: read + contents: read + uses: rapidsai/shared-workflows/.github/workflows/maven-publish.yaml@release/26.08 + secrets: + GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} + GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} + MAVEN_DEPLOY_TOKEN: ${{ secrets.MAVEN_DEPLOY_TOKEN }} + with: + publication-type: 'rc' + artifact-name: cudf_java_maven_repo + source-git-sha: ${{ inputs.sha || github.sha }} + # false = validate + drop (safe). true = stage PENDING for manual publish. + stage-for-maven-central-publish: false diff --git a/java/ci/build_cudf_java_jar_in_container.sh b/java/ci/build_cudf_java_jar_in_container.sh index c9ad7177df41..d59d169d1107 100755 --- a/java/ci/build_cudf_java_jar_in_container.sh +++ b/java/ci/build_cudf_java_jar_in_container.sh @@ -108,6 +108,13 @@ cd "${REPO_ROOT}/java" CUDF_VERSION="$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout "${BUILD_ARG[@]}")" +# TEMPORARY (revert alongside the pr.yaml java-only rehearsal commit): force +# the release-tag path so this branch produces a release-shaped Maven repo +# artifact for end-to-end pipeline testing without a real tag push. GHA +# silently ignores a job-level `env: GITHUB_REF:` override, so we set it +# here where it sticks (rapids-is-release-build keys off GITHUB_REF). +export GITHUB_REF=refs/tags/v26.08.0 + # Release tag builds strip -SNAPSHOT and rewrite the POM so packaged artifacts # carry the release version. Non-release builds keep -SNAPSHOT. if rapids-is-release-build; then From f04d57d33051380c3b4e26835e1a8763ae1eab68 Mon Sep 17 00:00:00 2001 From: Paul Aiyedun <53453937+paul-aiyedun@users.noreply.github.com> Date: Mon, 3 Aug 2026 21:38:27 -0700 Subject: [PATCH 21/29] TEMPORARY: Add suppression for test --- java/ci/build_cudf_java_jar_in_container.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/java/ci/build_cudf_java_jar_in_container.sh b/java/ci/build_cudf_java_jar_in_container.sh index d59d169d1107..f862674c414f 100755 --- a/java/ci/build_cudf_java_jar_in_container.sh +++ b/java/ci/build_cudf_java_jar_in_container.sh @@ -113,6 +113,7 @@ CUDF_VERSION="$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout # artifact for end-to-end pipeline testing without a real tag push. GHA # silently ignores a job-level `env: GITHUB_REF:` override, so we set it # here where it sticks (rapids-is-release-build keys off GITHUB_REF). +# rapids-pre-commit-hooks: disable-next-line[verify-hardcoded-version] export GITHUB_REF=refs/tags/v26.08.0 # Release tag builds strip -SNAPSHOT and rewrite the POM so packaged artifacts From e2dbf8dab2c481225f0bf72f809f36a69deb4290 Mon Sep 17 00:00:00 2001 From: Paul Aiyedun <53453937+paul-aiyedun@users.noreply.github.com> Date: Tue, 4 Aug 2026 07:42:05 -0700 Subject: [PATCH 22/29] Revert "TEMPORARY: Add suppression for test" This reverts commit f04d57d33051380c3b4e26835e1a8763ae1eab68. --- java/ci/build_cudf_java_jar_in_container.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/java/ci/build_cudf_java_jar_in_container.sh b/java/ci/build_cudf_java_jar_in_container.sh index f862674c414f..d59d169d1107 100755 --- a/java/ci/build_cudf_java_jar_in_container.sh +++ b/java/ci/build_cudf_java_jar_in_container.sh @@ -113,7 +113,6 @@ CUDF_VERSION="$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout # artifact for end-to-end pipeline testing without a real tag push. GHA # silently ignores a job-level `env: GITHUB_REF:` override, so we set it # here where it sticks (rapids-is-release-build keys off GITHUB_REF). -# rapids-pre-commit-hooks: disable-next-line[verify-hardcoded-version] export GITHUB_REF=refs/tags/v26.08.0 # Release tag builds strip -SNAPSHOT and rewrite the POM so packaged artifacts From 4b2b800e002da8d2d1d1c5f7d3051e65a5e7eb5a Mon Sep 17 00:00:00 2001 From: Paul Aiyedun <53453937+paul-aiyedun@users.noreply.github.com> Date: Tue, 4 Aug 2026 07:42:40 -0700 Subject: [PATCH 23/29] Revert "TEMPORARY: end-to-end workflow validation" This reverts commit c047a47af3c13616c162751087d00e22b5e85930. --- .github/workflows/pr.yaml | 956 ++++++++++++++++++-- java/ci/build_cudf_java_jar_in_container.sh | 7 - 2 files changed, 859 insertions(+), 104 deletions(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index d4e10884d7d5..d2a097dbdf43 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -1,19 +1,3 @@ -# TEMPORARY (revert before merge): this file is stripped down to the -# java-build -> java-gather -> java-publish chain copied from build.yaml, so a -# PR push rehearses the full Maven Central path end to end without spending CI -# time on the rest of the PR pipeline. Restore the full PR workflow before -# merging. -# -# Deviations from build.yaml, each required to make the chain runnable here: -# - java-build drops `needs: [telemetry-setup]`, since that job is not copied. -# - java-publish drops the `github.ref_type == 'tag'` gate, which is false on -# a pull-request branch push. -# - stage-for-maven-central-publish is false, so the bundle is validated and -# dropped rather than staged in the Portal. -# -# Paired with the temporary GITHUB_REF override in -# java/ci/build_cudf_java_jar_in_container.sh, which forces the release-tag -# path so the produced artifact is release-shaped (no -SNAPSHOT). name: pr on: push: @@ -24,91 +8,869 @@ concurrency: cancel-in-progress: true permissions: {} jobs: - # Build the cuDF Java JAR for every Maven classifier. - java-build: - strategy: - fail-fast: false - matrix: - include: - - { cuda: "12.9", cuda_major: "12", arch: "x86_64", runner: "linux-amd64-cpu16" } - - { cuda: "13.3", cuda_major: "13", arch: "x86_64", runner: "linux-amd64-cpu16" } - - { cuda: "12.9", cuda_major: "12", arch: "aarch64", runner: "linux-arm64-cpu16" } - - { cuda: "13.3", cuda_major: "13", arch: "aarch64", runner: "linux-arm64-cpu16" } - runs-on: ${{ matrix.runner }} + # Please keep pr-builder as the top job here + pr-builder: + needs: + - 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-other-tests + - conda-java-tests + - conda-notebook-tests + - docs-build + - wheel-build-libcudf + - wheel-build-libcudf-streaming + - wheel-build-cudf-streaming + - wheel-tests-cudf-streaming + - wheel-build-pylibcudf + - wheel-build-cudf + - wheel-tests-cudf + - wheel-build-cudf-polars + - wheel-tests-cudf-polars + - cudf-polars-polars-tests + - wheel-build-dask-cudf + - wheel-tests-dask-cudf + - devcontainer + - unit-tests-cudf-pandas + - pandas-tests + - narwhals-tests + - telemetry-setup + - third-party-integration-tests-cudf-pandas + uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@release/26.08 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: Checkout code repo - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 - with: - ref: ${{ inputs.sha }} - fetch-depth: 0 - persist-credentials: false - - name: Build static libcudf - run: | - ./java/ci/build_static_libcudf.sh \ - --output-dir "${RUNNER_TEMP}/libcudf" \ - --cuda-version "${{ matrix.cuda }}" - - name: Build cuDF Java JAR - run: | - ./java/ci/build_cudf_java_jar.sh \ - --libcudf-dir "${RUNNER_TEMP}/libcudf" \ - --output-dir "${RUNNER_TEMP}/jars" \ - --cuda-version "${{ matrix.cuda }}" - - name: Upload per-entry JAR artifact - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + - 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@090577647b8ddc4e06e809e264f7881650ecdccf # main + - name: Check if nightly CI is passing + uses: rapidsai/shared-actions/check_nightly_success/dispatch@main with: - name: cudf_java_cuda${{ matrix.cuda_major }}_${{ matrix.arch }} - # Ship only the JARs and POMs. Exclude the per-classifier Maven build scratch dir. - path: | - ${{ runner.temp }}/jars - !${{ runner.temp }}/jars/.mvn-temp-target - if-no-files-found: error - # Assemble the per-classifier JARs into one Maven-repository layout. - java-gather: - needs: [java-build] - runs-on: linux-amd64-cpu4 + 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@release/26.08 + with: + files_yaml: | + build_docs: + - '**' + - '!**/REVIEW_GUIDELINES.md' + - '!.coderabbit.yaml' + - '!.clang-format' + - '!.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/auto-assign.yml' + - '!.github/workflows/issue-release-scheduled.yml' + - '!.github/workflows/labeler.yml' + - '!.github/workflows/pr_issue_status_automation.yml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!ci/build_wheel*.sh' + - '!ci/check_style.sh' + - '!ci/discover_libcudf_tests.sh' + - '!ci/release/update-version.sh' + - '!ci/run_*.sh' + - '!ci/test_*.sh' + - '!ci/validate_wheel.sh' + - '!codecov.yml' + - '!SECURITY.md' + test_cpp: + - '**' + - '!**/REVIEW_GUIDELINES.md' + - '!.coderabbit.yaml' + - '!.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/auto-assign.yml' + - '!.github/workflows/issue-release-scheduled.yml' + - '!.github/workflows/labeler.yml' + - '!.github/workflows/pr_issue_status_automation.yml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!CONTRIBUTING.md' + - '!README.md' + - '!SECURITY.md' + - '!ci/cudf_pandas_scripts/**' + - '!ci/build_docs.sh' + - '!ci/build_python*.sh' + - '!ci/build_wheel*.sh' + - '!ci/check_style.sh' + - '!ci/cudf_pandas_scripts/**' + - '!ci/release/update-version.sh' + - '!ci/test_python*.sh' + - '!ci/test_wheel*.sh' + - '!ci/validate_wheel.sh' + - '!docs/**' + - '!img/**' + - '!java/**' + - '!notebooks/**' + - '!python/**' + test_cudf_pandas: + - '**' + - '!**/REVIEW_GUIDELINES.md' + - '!.coderabbit.yaml' + - '!.clang-format' + - '!.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/auto-assign.yml' + - '!.github/workflows/issue-release-scheduled.yml' + - '!.github/workflows/labeler.yml' + - '!.github/workflows/pr_issue_status_automation.yml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!CONTRIBUTING.md' + - '!README.md' + - '!SECURITY.md' + - '!ci/release/update-version.sh' + - '!ci/test_java.sh' + - '!ci/validate_wheel.sh' + - '!docs/**' + - '!img/**' + - '!java/**' + - '!notebooks/**' + test_java: + - '**' + - '!**/REVIEW_GUIDELINES.md' + - '!.coderabbit.yaml' + - '!.clang-format' + - '!.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/auto-assign.yml' + - '!.github/workflows/issue-release-scheduled.yml' + - '!.github/workflows/labeler.yml' + - '!.github/workflows/pr_issue_status_automation.yml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!CONTRIBUTING.md' + - '!README.md' + - '!SECURITY.md' + - '!ci/build_docs.sh' + - '!ci/build_wheel*.sh' + - '!ci/check_style.sh' + - '!ci/cudf_pandas_scripts/**' + - '!ci/release/update-version.sh' + - '!ci/test_wheel*.sh' + - '!ci/validate_wheel.sh' + - '!ci/release/update-version.sh' + - '!codecov.yml' + - '!docs/**' + - '!img/**' + - '!notebooks/**' + - '!python/**' + test_notebooks: + - '**' + - '!**/REVIEW_GUIDELINES.md' + - '!.coderabbit.yaml' + - '!.clang-format' + - '!.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/auto-assign.yml' + - '!.github/workflows/issue-release-scheduled.yml' + - '!.github/workflows/labeler.yml' + - '!.github/workflows/pr_issue_status_automation.yml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!CONTRIBUTING.md' + - '!README.md' + - '!SECURITY.md' + - '!ci/build_wheel*.sh' + - '!ci/cudf_pandas_scripts/**' + - '!ci/release/update-version.sh' + - '!ci/test_wheel*.sh' + - '!ci/validate_wheel.sh' + - '!codecov.yml' + - '!java/**' + test_python_conda: + - '**' + - '!**/REVIEW_GUIDELINES.md' + - '!.coderabbit.yaml' + - '!.clang-format' + - '!.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/auto-assign.yml' + - '!.github/workflows/issue-release-scheduled.yml' + - '!.github/workflows/labeler.yml' + - '!.github/workflows/pr_issue_status_automation.yml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!CONTRIBUTING.md' + - '!README.md' + - '!SECURITY.md' + - '!ci/build_docs.sh' + - '!ci/build_wheel*.sh' + - '!ci/check_style.sh' + - '!ci/cudf_pandas_scripts/**' + - '!ci/release/update-version.sh' + - '!ci/test_java.sh' + - '!ci/test_wheel*.sh' + - '!ci/validate_wheel.sh' + - '!docs/**' + - '!img/**' + - '!java/**' + - '!notebooks/**' + test_python_wheels: + - '**' + - '!**/REVIEW_GUIDELINES.md' + - '!.coderabbit.yaml' + - '!.clang-format' + - '!.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/auto-assign.yml' + - '!.github/workflows/issue-release-scheduled.yml' + - '!.github/workflows/labeler.yml' + - '!.github/workflows/pr_issue_status_automation.yml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!CONTRIBUTING.md' + - '!README.md' + - '!SECURITY.md' + - '!ci/build_cpp.sh' + - '!ci/build_docs.sh' + - '!ci/build_python_noarch.sh' + - '!ci/build_python.sh' + - '!ci/check-style.sh' + - '!ci/cudf_pandas_scripts/**' + - '!ci/release/update-version.sh' + - '!ci/test_cpp.sh' + - '!ci/test_cpp_common.sh' + - '!ci/test_cpp_memcheck.sh' + - '!ci/test_java.sh' + - '!ci/test_notebooks.sh' + - '!ci/test_python_common.sh' + - '!ci/test_python_cudf.sh' + - '!ci/test_python_other.sh' + - '!codecov.yml' + - '!conda/**' + - '!docs/**' + - '!img/**' + - '!java/**' + - '!notebooks/**' + not_cudf_polars: + - '**' + - '!python/cudf_polars/**' + neither_cudf_polars_nor_dask_cudf: + - '**' + - '!python/cudf_polars/**' + - '!python/dask_cudf/**' + neither_cudf_nor_dask_cudf: + - '**' + - '!python/cudf/**' + - '!python/dask_cudf/**' + neither_cpp_nor_cudf_polars_nor_dask_cudf: + - '**' + - '!cpp/**' + - '!python/cudf_polars/**' + - '!python/dask_cudf/**' + checks: + permissions: + contents: read + needs: telemetry-setup + uses: rapidsai/shared-workflows/.github/workflows/checks.yaml@release/26.08 + with: + enable_check_generated_files: false + ignored_pr_jobs: "telemetry-summarize spark-rapids-jni cuml-compat-tests" + conda-cpp-build: + needs: 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@release/26.08 + with: + build_type: pull-request + node_type: cpu16 + script: ci/build_cpp.sh + cmake-tests: + needs: 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/custom-job.yaml@release/26.08 + with: + build_type: pull-request + node_type: cpu16 + arch: "amd64" + container_image: "rapidsai/ci-conda:26.08-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 + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@release/26.08 + 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@release/26.08 + 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp + with: + build_type: pull-request + script: ci/test_cpp.sh + conda-python-build: + needs: 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@release/26.08 + 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-build-noarch: + needs: [conda-cpp-build, conda-python-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@release/26.08 + with: + build_type: pull-request + 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf + with: + build_type: pull-request + script: "ci/test_python_cudf.sh" + conda-python-other-tests: + # Tests for dask_cudf, cudf_polars, custreamz, cudf_kafka are separated for CI parallelism + needs: [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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda + with: + build_type: pull-request + # https://github.com/rapidsai/cudf/pull/22381/changes#r3196736965 + container-options: "--cap-add CAP_SYS_PTRACE --shm-size=8g --ulimit=nofile=1000000:1000000" + script: "ci/test_python_other.sh" + conda-java-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/custom-job.yaml@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_java + with: + build_type: pull-request + node_type: "gpu-l4-latest-1" + arch: "amd64" + container_image: "rapidsai/ci-conda:26.08-latest" + script: "ci/test_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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_notebooks + with: + build_type: pull-request + node_type: "gpu-l4-latest-1" + arch: "amd64" + container_image: "rapidsai/ci-conda:26.08-latest" + script: "ci/test_notebooks.sh" + docs-build: + 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).build_docs + with: + build_type: pull-request + node_type: "gpu-l4-latest-1" + arch: "amd64" + container_image: "rapidsai/ci-conda:26.08-latest" + script: "ci/build_docs.sh" + wheel-build-libcudf: + needs: 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/wheels-build.yaml@release/26.08 + with: + # build for every combination of arch and CUDA version, but only for the latest Python + matrix_filter: group_by([.ARCH, (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | map(max_by(.PY_VER|split(".")|map(tonumber))) + build_type: pull-request + node_type: cpu16 + script: "ci/build_wheel_libcudf.sh" + package-name: libcudf + package-type: cpp + wheel-build-libcudf-streaming: + needs: [checks, wheel-build-libcudf] + 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-build.yaml@release/26.08 + with: + # build for every combination of arch and CUDA version, but only for the latest Python + matrix_filter: group_by([.ARCH, (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | map(max_by(.PY_VER|split(".")|map(tonumber))) + build_type: pull-request + node_type: cpu16 + script: "ci/build_wheel_libcudf_streaming.sh" + package-name: libcudf_streaming + package-type: cpp + wheel-build-cudf-streaming: + needs: [checks, wheel-build-libcudf-streaming, wheel-build-pylibcudf] 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-build.yaml@release/26.08 + with: + # 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))) + build_type: pull-request + node_type: cpu16 + script: "ci/build_wheel_cudf_streaming.sh" + package-name: cudf_streaming + package-type: python + wheel-tests-cudf-streaming: + needs: [wheel-build-cudf-streaming, 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels + with: + build_type: pull-request + script: ci/test_wheel_cudf_streaming.sh + wheel-build-pylibcudf: + needs: [checks, wheel-build-libcudf] + 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-build.yaml@release/26.08 + with: + build_type: pull-request + node_type: cpu8 + script: "ci/build_wheel_pylibcudf.sh" + package-name: pylibcudf + package-type: python + # 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-build-cudf: + needs: wheel-build-pylibcudf + 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-build.yaml@release/26.08 + with: + build_type: pull-request + node_type: cpu8 + script: "ci/build_wheel_cudf.sh" + package-name: cudf + package-type: python + # 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-cudf: + needs: [wheel-build-cudf, 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf + with: + build_type: pull-request + script: ci/test_wheel_cudf.sh + wheel-build-cudf-polars: + needs: wheel-build-pylibcudf + 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-build.yaml@release/26.08 + 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 + node_type: cpu8 + script: "ci/build_wheel_cudf_polars.sh" + package-name: cudf_polars + package-type: python + pure-wheel: true + wheel-tests-cudf-polars: + needs: [wheel-build-cudf-polars, wheel-build-cudf-streaming, 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_nor_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 + 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-cudf-polars, wheel-build-cudf-streaming, 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_nor_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_cudf_polars_polars_tests.sh" + wheel-build-dask-cudf: + needs: wheel-build-cudf + 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-build.yaml@release/26.08 + 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 + node_type: cpu8 + script: "ci/build_wheel_dask_cudf.sh" + package-name: dask_cudf + package-type: python + pure-wheel: true + wheel-tests-dask-cudf: + needs: [wheel-build-dask-cudf, 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).not_cudf_polars + 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@release/26.08 + 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-cudf, 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@release/26.08 + if: (fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels || fromJSON(needs.changed-files.outputs.changed_file_groups).test_cudf_pandas) && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf + with: + # This selects the latest supported Python + CUDA minor versions for each ARCH/CUDA major version combo + matrix_filter: group_by([(.ARCH), (.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/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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cpp_nor_cudf_polars_nor_dask_cudf + with: + build_type: pull-request + branch: ${{ inputs.branch }} + date: ${{ inputs.date }} + sha: ${{ inputs.sha }} + node_type: "gpu-l4-latest-1" + continue-on-error: true + container_image: "rapidsai/ci-conda:26.08-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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf + with: + build_type: pull-request + branch: ${{ inputs.branch }} + date: ${{ inputs.date }} + sha: ${{ inputs.sha }} + node_type: "gpu-l4-latest-1" + continue-on-error: true + container_image: "rapidsai/ci-conda:26.08-latest" + script: "ci/test_cuml_compat.sh" + pandas-tests: + # run the Pandas unit tests using PR branch + needs: [wheel-build-cudf, 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cpp_nor_cudf_polars_nor_dask_cudf + with: + build_type: pull-request + branch: ${{ inputs.branch }} + date: ${{ inputs.date }} + sha: ${{ inputs.sha }} + node_type: "gpu-l4-latest-1" + container_image: "rapidsai/citestwheel:26.08-latest" + script: ci/cudf_pandas_scripts/pandas-tests/run.sh pr + 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cpp_nor_cudf_polars_nor_dask_cudf + with: + build_type: pull-request + branch: ${{ inputs.branch }} + date: ${{ inputs.date }} + sha: ${{ inputs.sha }} + node_type: "gpu-l4-latest-1" + container_image: "rapidsai/ci-conda:26.08-latest" + script: ci/test_narwhals.sh + spark-rapids-jni: + needs: changed-files + permissions: + actions: read + contents: read + id-token: write + packages: read + pull-requests: read + uses: ./.github/workflows/spark-rapids-jni.yaml + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_java + 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: Checkout code repo - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 - with: - ref: ${{ inputs.sha }} - persist-credentials: false - - name: Download per-entry JAR artifacts - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 - with: - pattern: cudf_java_cuda* - path: ${{ runner.temp }}/jars - merge-multiple: true - - name: Assemble Maven repository layout - run: | - ./java/ci/assemble_maven_repo.sh \ - --jars-dir "${RUNNER_TEMP}/jars" \ - --output-dir "${RUNNER_TEMP}/maven-repo" - - name: Upload combined Maven repository artifact - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 - with: - name: cudf_java_maven_repo - path: ${{ runner.temp }}/maven-repo - if-no-files-found: error - - # Publish tagged release candidates to Maven Central via the Sonatype - # Central Publisher Portal. - java-publish: - needs: [java-gather] - permissions: - actions: read - contents: read - uses: rapidsai/shared-workflows/.github/workflows/maven-publish.yaml@release/26.08 - secrets: - GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} - GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} - MAVEN_DEPLOY_TOKEN: ${{ secrets.MAVEN_DEPLOY_TOKEN }} - with: - publication-type: 'rc' - artifact-name: cudf_java_maven_repo - source-git-sha: ${{ inputs.sha || github.sha }} - # false = validate + drop (safe). true = stage PENDING for manual publish. - stage-for-maven-central-publish: false + - name: Telemetry summarize + uses: rapidsai/shared-actions/telemetry-dispatch-summarize@main + env: + GH_TOKEN: ${{ github.token }} diff --git a/java/ci/build_cudf_java_jar_in_container.sh b/java/ci/build_cudf_java_jar_in_container.sh index d59d169d1107..c9ad7177df41 100755 --- a/java/ci/build_cudf_java_jar_in_container.sh +++ b/java/ci/build_cudf_java_jar_in_container.sh @@ -108,13 +108,6 @@ cd "${REPO_ROOT}/java" CUDF_VERSION="$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout "${BUILD_ARG[@]}")" -# TEMPORARY (revert alongside the pr.yaml java-only rehearsal commit): force -# the release-tag path so this branch produces a release-shaped Maven repo -# artifact for end-to-end pipeline testing without a real tag push. GHA -# silently ignores a job-level `env: GITHUB_REF:` override, so we set it -# here where it sticks (rapids-is-release-build keys off GITHUB_REF). -export GITHUB_REF=refs/tags/v26.08.0 - # Release tag builds strip -SNAPSHOT and rewrite the POM so packaged artifacts # carry the release version. Non-release builds keep -SNAPSHOT. if rapids-is-release-build; then From a0ce3bd6b8a4c3f70cd4f2114466d30a9f8c6fcb Mon Sep 17 00:00:00 2001 From: Paul Aiyedun <53453937+paul-aiyedun@users.noreply.github.com> Date: Tue, 4 Aug 2026 09:09:25 -0700 Subject: [PATCH 24/29] Address CodeRabbit comments --- java/ci/README.md | 4 +++- java/ci/test_java_build_local.sh | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/java/ci/README.md b/java/ci/README.md index b880028b47b8..c1a66c60f99e 100644 --- a/java/ci/README.md +++ b/java/ci/README.md @@ -107,7 +107,9 @@ branch. To rehearse the release path locally: - GITHUB_REF=refs/tags/vYY.MM.PP ./java/ci/test_java_build_local.sh +```bash +GITHUB_REF=refs/tags/vYY.MM.PP ./java/ci/test_java_build_local.sh +``` Rewrites `java/pom.xml` in place. Restore with `git checkout java/pom.xml`. diff --git a/java/ci/test_java_build_local.sh b/java/ci/test_java_build_local.sh index 672dd72bcef7..56ff7cc136fe 100755 --- a/java/ci/test_java_build_local.sh +++ b/java/ci/test_java_build_local.sh @@ -147,6 +147,10 @@ parse_args "$@" if [[ -z "${GITHUB_REF:-}" ]]; then GITHUB_REF="$(git -C "${SCRIPT_DIR}" symbolic-ref HEAD 2>/dev/null || true)" fi +if [[ -z "${GITHUB_REF:-}" ]]; then + echo "Error: could not derive GITHUB_REF from HEAD (detached?). Set it explicitly, e.g. GITHUB_REF=refs/heads/my-branch." >&2 + exit 1 +fi export GITHUB_REF require_arg --work-dir "${WORK_DIR}" From 69bc5ef6623c8859618fae8a8d685a787310dcc1 Mon Sep 17 00:00:00 2001 From: Paul Aiyedun <53453937+paul-aiyedun@users.noreply.github.com> Date: Wed, 5 Aug 2026 16:06:49 -0700 Subject: [PATCH 25/29] TEMPORARY: manual Maven Central deployment for the 26.08.00 release --- .github/workflows/pr.yaml | 947 ++------------------ java/ci/build_cudf_java_jar_in_container.sh | 6 + 2 files changed, 94 insertions(+), 859 deletions(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index d2a097dbdf43..1b94e86d9b8f 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -1,3 +1,9 @@ +# TEMPORARY: runs the manual Java release for the tagged release commit. This PR +# is not merging, but revert this commit anyway. Stripped to build.yaml's +# java-build -> java-gather -> java-publish chain, dropping the telemetry-setup +# dependency and the `github.ref_type == 'tag'` gate that a branch push fails. +# Paired with the GITHUB_REF override in +# java/ci/build_cudf_java_jar_in_container.sh. name: pr on: push: @@ -8,869 +14,92 @@ concurrency: cancel-in-progress: true permissions: {} jobs: - # Please keep pr-builder as the top job here - pr-builder: - needs: - - 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-other-tests - - conda-java-tests - - conda-notebook-tests - - docs-build - - wheel-build-libcudf - - wheel-build-libcudf-streaming - - wheel-build-cudf-streaming - - wheel-tests-cudf-streaming - - wheel-build-pylibcudf - - wheel-build-cudf - - wheel-tests-cudf - - wheel-build-cudf-polars - - wheel-tests-cudf-polars - - cudf-polars-polars-tests - - wheel-build-dask-cudf - - wheel-tests-dask-cudf - - devcontainer - - unit-tests-cudf-pandas - - pandas-tests - - narwhals-tests - - telemetry-setup - - third-party-integration-tests-cudf-pandas - uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@release/26.08 + # Build the cuDF Java JAR for every Maven classifier. + java-build: + strategy: + fail-fast: false + matrix: + include: + - { cuda: "12.9", cuda_major: "12", arch: "x86_64", runner: "linux-amd64-cpu16" } + - { cuda: "13.3", cuda_major: "13", arch: "x86_64", runner: "linux-amd64-cpu16" } + - { cuda: "12.9", cuda_major: "12", arch: "aarch64", runner: "linux-arm64-cpu16" } + - { cuda: "13.3", cuda_major: "13", arch: "aarch64", runner: "linux-arm64-cpu16" } + runs-on: ${{ matrix.runner }} 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 - 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 + - name: Checkout code repo + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 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@release/26.08 - with: - files_yaml: | - build_docs: - - '**' - - '!**/REVIEW_GUIDELINES.md' - - '!.coderabbit.yaml' - - '!.clang-format' - - '!.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/auto-assign.yml' - - '!.github/workflows/issue-release-scheduled.yml' - - '!.github/workflows/labeler.yml' - - '!.github/workflows/pr_issue_status_automation.yml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!ci/build_wheel*.sh' - - '!ci/check_style.sh' - - '!ci/discover_libcudf_tests.sh' - - '!ci/release/update-version.sh' - - '!ci/run_*.sh' - - '!ci/test_*.sh' - - '!ci/validate_wheel.sh' - - '!codecov.yml' - - '!SECURITY.md' - test_cpp: - - '**' - - '!**/REVIEW_GUIDELINES.md' - - '!.coderabbit.yaml' - - '!.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/auto-assign.yml' - - '!.github/workflows/issue-release-scheduled.yml' - - '!.github/workflows/labeler.yml' - - '!.github/workflows/pr_issue_status_automation.yml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!CONTRIBUTING.md' - - '!README.md' - - '!SECURITY.md' - - '!ci/cudf_pandas_scripts/**' - - '!ci/build_docs.sh' - - '!ci/build_python*.sh' - - '!ci/build_wheel*.sh' - - '!ci/check_style.sh' - - '!ci/cudf_pandas_scripts/**' - - '!ci/release/update-version.sh' - - '!ci/test_python*.sh' - - '!ci/test_wheel*.sh' - - '!ci/validate_wheel.sh' - - '!docs/**' - - '!img/**' - - '!java/**' - - '!notebooks/**' - - '!python/**' - test_cudf_pandas: - - '**' - - '!**/REVIEW_GUIDELINES.md' - - '!.coderabbit.yaml' - - '!.clang-format' - - '!.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/auto-assign.yml' - - '!.github/workflows/issue-release-scheduled.yml' - - '!.github/workflows/labeler.yml' - - '!.github/workflows/pr_issue_status_automation.yml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!CONTRIBUTING.md' - - '!README.md' - - '!SECURITY.md' - - '!ci/release/update-version.sh' - - '!ci/test_java.sh' - - '!ci/validate_wheel.sh' - - '!docs/**' - - '!img/**' - - '!java/**' - - '!notebooks/**' - test_java: - - '**' - - '!**/REVIEW_GUIDELINES.md' - - '!.coderabbit.yaml' - - '!.clang-format' - - '!.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/auto-assign.yml' - - '!.github/workflows/issue-release-scheduled.yml' - - '!.github/workflows/labeler.yml' - - '!.github/workflows/pr_issue_status_automation.yml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!CONTRIBUTING.md' - - '!README.md' - - '!SECURITY.md' - - '!ci/build_docs.sh' - - '!ci/build_wheel*.sh' - - '!ci/check_style.sh' - - '!ci/cudf_pandas_scripts/**' - - '!ci/release/update-version.sh' - - '!ci/test_wheel*.sh' - - '!ci/validate_wheel.sh' - - '!ci/release/update-version.sh' - - '!codecov.yml' - - '!docs/**' - - '!img/**' - - '!notebooks/**' - - '!python/**' - test_notebooks: - - '**' - - '!**/REVIEW_GUIDELINES.md' - - '!.coderabbit.yaml' - - '!.clang-format' - - '!.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/auto-assign.yml' - - '!.github/workflows/issue-release-scheduled.yml' - - '!.github/workflows/labeler.yml' - - '!.github/workflows/pr_issue_status_automation.yml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!CONTRIBUTING.md' - - '!README.md' - - '!SECURITY.md' - - '!ci/build_wheel*.sh' - - '!ci/cudf_pandas_scripts/**' - - '!ci/release/update-version.sh' - - '!ci/test_wheel*.sh' - - '!ci/validate_wheel.sh' - - '!codecov.yml' - - '!java/**' - test_python_conda: - - '**' - - '!**/REVIEW_GUIDELINES.md' - - '!.coderabbit.yaml' - - '!.clang-format' - - '!.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/auto-assign.yml' - - '!.github/workflows/issue-release-scheduled.yml' - - '!.github/workflows/labeler.yml' - - '!.github/workflows/pr_issue_status_automation.yml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!CONTRIBUTING.md' - - '!README.md' - - '!SECURITY.md' - - '!ci/build_docs.sh' - - '!ci/build_wheel*.sh' - - '!ci/check_style.sh' - - '!ci/cudf_pandas_scripts/**' - - '!ci/release/update-version.sh' - - '!ci/test_java.sh' - - '!ci/test_wheel*.sh' - - '!ci/validate_wheel.sh' - - '!docs/**' - - '!img/**' - - '!java/**' - - '!notebooks/**' - test_python_wheels: - - '**' - - '!**/REVIEW_GUIDELINES.md' - - '!.coderabbit.yaml' - - '!.clang-format' - - '!.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/auto-assign.yml' - - '!.github/workflows/issue-release-scheduled.yml' - - '!.github/workflows/labeler.yml' - - '!.github/workflows/pr_issue_status_automation.yml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!CONTRIBUTING.md' - - '!README.md' - - '!SECURITY.md' - - '!ci/build_cpp.sh' - - '!ci/build_docs.sh' - - '!ci/build_python_noarch.sh' - - '!ci/build_python.sh' - - '!ci/check-style.sh' - - '!ci/cudf_pandas_scripts/**' - - '!ci/release/update-version.sh' - - '!ci/test_cpp.sh' - - '!ci/test_cpp_common.sh' - - '!ci/test_cpp_memcheck.sh' - - '!ci/test_java.sh' - - '!ci/test_notebooks.sh' - - '!ci/test_python_common.sh' - - '!ci/test_python_cudf.sh' - - '!ci/test_python_other.sh' - - '!codecov.yml' - - '!conda/**' - - '!docs/**' - - '!img/**' - - '!java/**' - - '!notebooks/**' - not_cudf_polars: - - '**' - - '!python/cudf_polars/**' - neither_cudf_polars_nor_dask_cudf: - - '**' - - '!python/cudf_polars/**' - - '!python/dask_cudf/**' - neither_cudf_nor_dask_cudf: - - '**' - - '!python/cudf/**' - - '!python/dask_cudf/**' - neither_cpp_nor_cudf_polars_nor_dask_cudf: - - '**' - - '!cpp/**' - - '!python/cudf_polars/**' - - '!python/dask_cudf/**' - checks: - permissions: - contents: read - needs: telemetry-setup - uses: rapidsai/shared-workflows/.github/workflows/checks.yaml@release/26.08 - with: - enable_check_generated_files: false - ignored_pr_jobs: "telemetry-summarize spark-rapids-jni cuml-compat-tests" - conda-cpp-build: - needs: 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@release/26.08 - with: - build_type: pull-request - node_type: cpu16 - script: ci/build_cpp.sh - cmake-tests: - needs: 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/custom-job.yaml@release/26.08 - with: - build_type: pull-request - node_type: cpu16 - arch: "amd64" - container_image: "rapidsai/ci-conda:26.08-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 - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@release/26.08 - 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@release/26.08 - 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp - with: - build_type: pull-request - script: ci/test_cpp.sh - conda-python-build: - needs: 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@release/26.08 - 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-build-noarch: - needs: [conda-cpp-build, conda-python-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@release/26.08 - with: - build_type: pull-request - 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf - with: - build_type: pull-request - script: "ci/test_python_cudf.sh" - conda-python-other-tests: - # Tests for dask_cudf, cudf_polars, custreamz, cudf_kafka are separated for CI parallelism - needs: [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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda - with: - build_type: pull-request - # https://github.com/rapidsai/cudf/pull/22381/changes#r3196736965 - container-options: "--cap-add CAP_SYS_PTRACE --shm-size=8g --ulimit=nofile=1000000:1000000" - script: "ci/test_python_other.sh" - conda-java-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/custom-job.yaml@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_java - with: - build_type: pull-request - node_type: "gpu-l4-latest-1" - arch: "amd64" - container_image: "rapidsai/ci-conda:26.08-latest" - script: "ci/test_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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_notebooks - with: - build_type: pull-request - node_type: "gpu-l4-latest-1" - arch: "amd64" - container_image: "rapidsai/ci-conda:26.08-latest" - script: "ci/test_notebooks.sh" - docs-build: - 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).build_docs - with: - build_type: pull-request - node_type: "gpu-l4-latest-1" - arch: "amd64" - container_image: "rapidsai/ci-conda:26.08-latest" - script: "ci/build_docs.sh" - wheel-build-libcudf: - needs: 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/wheels-build.yaml@release/26.08 - with: - # build for every combination of arch and CUDA version, but only for the latest Python - matrix_filter: group_by([.ARCH, (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | map(max_by(.PY_VER|split(".")|map(tonumber))) - build_type: pull-request - node_type: cpu16 - script: "ci/build_wheel_libcudf.sh" - package-name: libcudf - package-type: cpp - wheel-build-libcudf-streaming: - needs: [checks, wheel-build-libcudf] - 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-build.yaml@release/26.08 - with: - # build for every combination of arch and CUDA version, but only for the latest Python - matrix_filter: group_by([.ARCH, (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | map(max_by(.PY_VER|split(".")|map(tonumber))) - build_type: pull-request - node_type: cpu16 - script: "ci/build_wheel_libcudf_streaming.sh" - package-name: libcudf_streaming - package-type: cpp - wheel-build-cudf-streaming: - needs: [checks, wheel-build-libcudf-streaming, wheel-build-pylibcudf] - 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-build.yaml@release/26.08 - with: - # 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))) - build_type: pull-request - node_type: cpu16 - script: "ci/build_wheel_cudf_streaming.sh" - package-name: cudf_streaming - package-type: python - wheel-tests-cudf-streaming: - needs: [wheel-build-cudf-streaming, 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels - with: - build_type: pull-request - script: ci/test_wheel_cudf_streaming.sh - wheel-build-pylibcudf: - needs: [checks, wheel-build-libcudf] - 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-build.yaml@release/26.08 - with: - build_type: pull-request - node_type: cpu8 - script: "ci/build_wheel_pylibcudf.sh" - package-name: pylibcudf - package-type: python - # 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-build-cudf: - needs: wheel-build-pylibcudf - 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-build.yaml@release/26.08 - with: - build_type: pull-request - node_type: cpu8 - script: "ci/build_wheel_cudf.sh" - package-name: cudf - package-type: python - # 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-cudf: - needs: [wheel-build-cudf, 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf - with: - build_type: pull-request - script: ci/test_wheel_cudf.sh - wheel-build-cudf-polars: - needs: wheel-build-pylibcudf - 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-build.yaml@release/26.08 - 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 - node_type: cpu8 - script: "ci/build_wheel_cudf_polars.sh" - package-name: cudf_polars - package-type: python - pure-wheel: true - wheel-tests-cudf-polars: - needs: [wheel-build-cudf-polars, wheel-build-cudf-streaming, 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_nor_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 - 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-cudf-polars, wheel-build-cudf-streaming, 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_nor_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_cudf_polars_polars_tests.sh" - wheel-build-dask-cudf: - needs: wheel-build-cudf - 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-build.yaml@release/26.08 - 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 - node_type: cpu8 - script: "ci/build_wheel_dask_cudf.sh" - package-name: dask_cudf - package-type: python - pure-wheel: true - wheel-tests-dask-cudf: - needs: [wheel-build-dask-cudf, 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).not_cudf_polars - 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@release/26.08 - 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-cudf, 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@release/26.08 - if: (fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels || fromJSON(needs.changed-files.outputs.changed_file_groups).test_cudf_pandas) && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf - with: - # This selects the latest supported Python + CUDA minor versions for each ARCH/CUDA major version combo - matrix_filter: group_by([(.ARCH), (.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/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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cpp_nor_cudf_polars_nor_dask_cudf - with: - build_type: pull-request - branch: ${{ inputs.branch }} - date: ${{ inputs.date }} - sha: ${{ inputs.sha }} - node_type: "gpu-l4-latest-1" - continue-on-error: true - container_image: "rapidsai/ci-conda:26.08-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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf - with: - build_type: pull-request - branch: ${{ inputs.branch }} - date: ${{ inputs.date }} - sha: ${{ inputs.sha }} - node_type: "gpu-l4-latest-1" - continue-on-error: true - container_image: "rapidsai/ci-conda:26.08-latest" - script: "ci/test_cuml_compat.sh" - pandas-tests: - # run the Pandas unit tests using PR branch - needs: [wheel-build-cudf, 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cpp_nor_cudf_polars_nor_dask_cudf - with: - build_type: pull-request - branch: ${{ inputs.branch }} - date: ${{ inputs.date }} - sha: ${{ inputs.sha }} - node_type: "gpu-l4-latest-1" - container_image: "rapidsai/citestwheel:26.08-latest" - script: ci/cudf_pandas_scripts/pandas-tests/run.sh pr - 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@release/26.08 - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cpp_nor_cudf_polars_nor_dask_cudf - with: - build_type: pull-request - branch: ${{ inputs.branch }} - date: ${{ inputs.date }} - sha: ${{ inputs.sha }} - node_type: "gpu-l4-latest-1" - container_image: "rapidsai/ci-conda:26.08-latest" - script: ci/test_narwhals.sh - spark-rapids-jni: - needs: changed-files - permissions: - actions: read - contents: read - id-token: write - packages: read - pull-requests: read - uses: ./.github/workflows/spark-rapids-jni.yaml - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_java - telemetry-summarize: - # This job must use a self-hosted runner to record telemetry traces. + ref: ${{ inputs.sha }} + fetch-depth: 0 + persist-credentials: false + - name: Build static libcudf + run: | + ./java/ci/build_static_libcudf.sh \ + --output-dir "${RUNNER_TEMP}/libcudf" \ + --cuda-version "${{ matrix.cuda }}" + - name: Build cuDF Java JAR + run: | + ./java/ci/build_cudf_java_jar.sh \ + --libcudf-dir "${RUNNER_TEMP}/libcudf" \ + --output-dir "${RUNNER_TEMP}/jars" \ + --cuda-version "${{ matrix.cuda }}" + - name: Upload per-entry JAR artifact + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: cudf_java_cuda${{ matrix.cuda_major }}_${{ matrix.arch }} + # Ship only the JARs and POMs. Exclude the per-classifier Maven build scratch dir. + path: | + ${{ runner.temp }}/jars + !${{ runner.temp }}/jars/.mvn-temp-target + if-no-files-found: error + # Assemble the per-classifier JARs into one Maven-repository layout. + java-gather: + needs: [java-build] runs-on: linux-amd64-cpu4 permissions: - actions: write - needs: pr-builder - if: ${{ vars.TELEMETRY_ENABLED == 'true' && !cancelled() }} - continue-on-error: true + contents: read steps: - - name: Telemetry summarize - uses: rapidsai/shared-actions/telemetry-dispatch-summarize@main - env: - GH_TOKEN: ${{ github.token }} + - name: Checkout code repo + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + with: + ref: ${{ inputs.sha }} + persist-credentials: false + - name: Download per-entry JAR artifacts + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + with: + pattern: cudf_java_cuda* + path: ${{ runner.temp }}/jars + merge-multiple: true + - name: Assemble Maven repository layout + run: | + ./java/ci/assemble_maven_repo.sh \ + --jars-dir "${RUNNER_TEMP}/jars" \ + --output-dir "${RUNNER_TEMP}/maven-repo" + - name: Upload combined Maven repository artifact + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: cudf_java_maven_repo + path: ${{ runner.temp }}/maven-repo + if-no-files-found: error + + # Publish tagged release candidates to Maven Central via the Sonatype + # Central Publisher Portal. + java-publish: + needs: [java-gather] + permissions: + actions: read + contents: read + uses: rapidsai/shared-workflows/.github/workflows/maven-publish.yaml@release/26.08 + secrets: + GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} + GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} + MAVEN_DEPLOY_TOKEN: ${{ secrets.MAVEN_DEPLOY_TOKEN }} + with: + publication-type: 'rc' + artifact-name: cudf_java_maven_repo + # Release commit, so the bundle records the release, not the PR commit. + source-git-sha: ff5b362d7c06ae5837fd7a7337e2ae20895f324d + # false = validate + drop (safe). true = stage PENDING for manual publish. + stage-for-maven-central-publish: true diff --git a/java/ci/build_cudf_java_jar_in_container.sh b/java/ci/build_cudf_java_jar_in_container.sh index c9ad7177df41..1f058e2e083b 100755 --- a/java/ci/build_cudf_java_jar_in_container.sh +++ b/java/ci/build_cudf_java_jar_in_container.sh @@ -108,6 +108,12 @@ cd "${REPO_ROOT}/java" CUDF_VERSION="$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout "${BUILD_ARG[@]}")" +# TEMPORARY (revert with the pr.yaml change): force the release-tag path for the +# manual release. Set here rather than as a job-level `env:` because GHA +# silently ignores that override. +# rapids-pre-commit-hooks: disable-next-line[verify-hardcoded-version] +export GITHUB_REF=refs/tags/v26.08.00 + # Release tag builds strip -SNAPSHOT and rewrite the POM so packaged artifacts # carry the release version. Non-release builds keep -SNAPSHOT. if rapids-is-release-build; then From 79be8de50921e010fac89f9d2b39bae563162e2b Mon Sep 17 00:00:00 2001 From: Paul Aiyedun <53453937+paul-aiyedun@users.noreply.github.com> Date: Thu, 6 Aug 2026 08:36:19 +0000 Subject: [PATCH 26/29] TEMPORARY: Apply same patch as spark-rapids-jni for nvcomp workaround --- java/ci/build_cudf_java_jar_in_container.sh | 12 ++++++++++++ .../0001-use-static-nvcomp-from-libcudf.patch | 14 ++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 java/ci/patches/0001-use-static-nvcomp-from-libcudf.patch diff --git a/java/ci/build_cudf_java_jar_in_container.sh b/java/ci/build_cudf_java_jar_in_container.sh index 1f058e2e083b..a4e65b48a636 100755 --- a/java/ci/build_cudf_java_jar_in_container.sh +++ b/java/ci/build_cudf_java_jar_in_container.sh @@ -38,7 +38,16 @@ if [[ -z ${HOST_UID} || -z ${HOST_GID} ]]; then exit 1 fi +# TEMPORARY: same patch as spark-rapids-jni +# (NVIDIA/cudf-spark-jni patches/0001-use-static-nvcomp-from-libcudf.patch). +# Static CUDF_JNI_LIBCUDF_STATIC=ON JARs embed nvcomp in libcudf and do not +# package libnvcomp.so. NativeDepsLoader still requires it unless this patch +# drops "nvcomp" from loadOrder for packaging only. +NVCOMP_LOADER_PATCH="${REPO_ROOT}/java/ci/patches/0001-use-static-nvcomp-from-libcudf.patch" + _chown_outputs_on_exit() { + # Best-effort: leave /repo clean even if packaging failed mid-build. + git -C "${REPO_ROOT}" apply --reverse "${NVCOMP_LOADER_PATCH}" >/dev/null 2>&1 || true chown -R "${HOST_UID}:${HOST_GID}" "${OUTPUT_DIR}" "${REPO_ROOT}/java/target" 2>/dev/null || true } trap _chown_outputs_on_exit EXIT @@ -123,6 +132,9 @@ fi rapids-logger "Packaging cuDF Java JAR version ${CUDF_VERSION} (libcudf: ${CUDF_INSTALL_DIR})" +rapids-logger "Applying temporary nvcomp NativeDepsLoader patch (same as spark-rapids-jni)" +git -C "${REPO_ROOT}" apply "${NVCOMP_LOADER_PATCH}" + # The `clean` goal is intentionally omitted: /repo/java/target is a # bind-mount point, so when `mvn clean` attempts to remove the directory, # it fails with EBUSY. The host wrapper (build_cudf_java_jar.sh) recreates diff --git a/java/ci/patches/0001-use-static-nvcomp-from-libcudf.patch b/java/ci/patches/0001-use-static-nvcomp-from-libcudf.patch new file mode 100644 index 000000000000..6beeec85a59e --- /dev/null +++ b/java/ci/patches/0001-use-static-nvcomp-from-libcudf.patch @@ -0,0 +1,14 @@ +diff --git a/java/src/main/java/ai/rapids/cudf/NativeDepsLoader.java b/java/src/main/java/ai/rapids/cudf/NativeDepsLoader.java +index 0000000000..0000000000 100644 +--- a/java/src/main/java/ai/rapids/cudf/NativeDepsLoader.java ++++ b/java/src/main/java/ai/rapids/cudf/NativeDepsLoader.java +@@ -69,9 +69,6 @@ public class NativeDepsLoader { + * subsequent stages are loaded. + */ + private static final String[][] loadOrder = new String[][]{ +- new String[]{ +- "nvcomp" +- }, + new String[]{ + "cudf" + }, From 45175e227b64daef9e95b28faf816402dfd94d7b Mon Sep 17 00:00:00 2001 From: Paul Aiyedun <53453937+paul-aiyedun@users.noreply.github.com> Date: Fri, 7 Aug 2026 03:10:40 +0000 Subject: [PATCH 27/29] TEMPORARY: Apply patch to address libspdlog error --- java/ci/build_cudf_java_jar_in_container.sh | 12 ++++ java/ci/build_static_libcudf_in_container.sh | 18 ++++- java/ci/check_jar_libcudf_needed.sh | 56 +++++++++++++++ java/ci/install_static_logging_libs.sh | 71 +++++++++++++++++++ ...2-static-spdlog-fmt-for-java-libcudf.patch | 29 ++++++++ 5 files changed, 184 insertions(+), 2 deletions(-) create mode 100755 java/ci/check_jar_libcudf_needed.sh create mode 100755 java/ci/install_static_logging_libs.sh create mode 100644 java/ci/patches/0002-static-spdlog-fmt-for-java-libcudf.patch diff --git a/java/ci/build_cudf_java_jar_in_container.sh b/java/ci/build_cudf_java_jar_in_container.sh index a4e65b48a636..ca646457d36a 100755 --- a/java/ci/build_cudf_java_jar_in_container.sh +++ b/java/ci/build_cudf_java_jar_in_container.sh @@ -132,6 +132,16 @@ fi rapids-logger "Packaging cuDF Java JAR version ${CUDF_VERSION} (libcudf: ${CUDF_INSTALL_DIR})" +# PIC libspdlog.a / libfmt.a are installed into the static libcudf prefix +# (same tree as rmm) and linked via $ from the packaging +# cmake patch. Fail early if this mount is missing them. +for _logging_lib in libfmt.a libspdlog.a; do + if [[ ! -f ${CUDF_INSTALL_DIR}/lib/${_logging_lib} ]]; then + echo "Error: ${CUDF_INSTALL_DIR}/lib/${_logging_lib} missing; rebuild static libcudf with install_static_logging_libs" >&2 + exit 1 + fi +done + rapids-logger "Applying temporary nvcomp NativeDepsLoader patch (same as spark-rapids-jni)" git -C "${REPO_ROOT}" apply "${NVCOMP_LOADER_PATCH}" @@ -188,4 +198,6 @@ done cp -f "${MAIN_JAR}" "${OUTPUT_DIR}/" cp -f pom.xml "${OUTPUT_DIR}/cudf-${CUDF_VERSION}.pom" +bash "${REPO_ROOT}/java/ci/check_jar_libcudf_needed.sh" "${OUTPUT_DIR}/$(basename "${MAIN_JAR}")" + rapids-logger "Emitted $(basename "${MAIN_JAR}"), cudf-${CUDF_VERSION}-sources.jar, cudf-${CUDF_VERSION}-javadoc.jar, and cudf-${CUDF_VERSION}.pom to ${OUTPUT_DIR}" diff --git a/java/ci/build_static_libcudf_in_container.sh b/java/ci/build_static_libcudf_in_container.sh index e77637e747b2..10c5c94c4a92 100755 --- a/java/ci/build_static_libcudf_in_container.sh +++ b/java/ci/build_static_libcudf_in_container.sh @@ -34,6 +34,14 @@ if [[ -z ${HOST_UID} || -z ${HOST_GID} ]]; then exit 1 fi +SPDLOG_FMT_PATCH="${REPO_ROOT}/java/ci/patches/0002-static-spdlog-fmt-for-java-libcudf.patch" + +_cleanup_on_exit() { + git -C "${REPO_ROOT}" apply --reverse "${SPDLOG_FMT_PATCH}" >/dev/null 2>&1 || true + chown -R "${HOST_UID}:${HOST_GID}" "${INSTALL_PREFIX}" 2>/dev/null || true +} +trap _cleanup_on_exit EXIT + if [[ -z ${PARALLEL_LEVEL} ]]; then PARALLEL_LEVEL=$(nproc) fi @@ -62,6 +70,13 @@ if [[ -z ${LIBCUDF_KERNEL_CACHE_PATH} ]]; then export LIBCUDF_KERNEL_CACHE_PATH=/tmp/rapids-kernel-cache fi +# PIC libfmt.a / libspdlog.a into the same install prefix as rmm / rapids_logger. +# shellcheck disable=SC1091 +. "${REPO_ROOT}/java/ci/install_static_logging_libs.sh" +install_static_logging_libs "${INSTALL_PREFIX}" + +git -C "${REPO_ROOT}" apply "${SPDLOG_FMT_PATCH}" + CMAKE_ARGS=( -S "${REPO_ROOT}/cpp" -B "${BUILD_DIR}" @@ -91,5 +106,4 @@ cmake --build "${BUILD_DIR}" --parallel "${PARALLEL_LEVEL}" rapids-logger "Installing static libcudf to ${INSTALL_PREFIX}" cmake --install "${BUILD_DIR}" -rapids-logger "Chowning ${INSTALL_PREFIX} to ${HOST_UID}:${HOST_GID}" -chown -R "${HOST_UID}:${HOST_GID}" "${INSTALL_PREFIX}" +rapids-logger "Emitted static libcudf install tree to ${INSTALL_PREFIX}" diff --git a/java/ci/check_jar_libcudf_needed.sh b/java/ci/check_jar_libcudf_needed.sh new file mode 100755 index 000000000000..b4bc39995128 --- /dev/null +++ b/java/ci/check_jar_libcudf_needed.sh @@ -0,0 +1,56 @@ +#!/bin/bash +# SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# +# Fail if a cudf classifier JAR's libcudf.so DT_NEEDs libspdlog or libfmt. +# +# Usage: check_jar_libcudf_needed.sh + +set -euo pipefail + +if [[ $# -ne 1 ]]; then + echo "Usage: $0 " >&2 + exit 2 +fi + +JAR="$(realpath "$1")" +if [[ ! -f ${JAR} ]]; then + echo "Error: JAR not found: ${JAR}" >&2 + exit 1 +fi + +if ! command -v readelf >/dev/null 2>&1; then + echo "Error: readelf not found (install binutils)" >&2 + exit 1 +fi + +if ! command -v unzip >/dev/null 2>&1; then + echo "Error: unzip not found" >&2 + exit 1 +fi + +TMP="$(mktemp -d)" +trap 'rm -rf "${TMP}"' EXIT + +MEMBER="$(unzip -Z1 "${JAR}" | grep -E '(^|/)libcudf\.so$' | head -1 || true)" +if [[ -z ${MEMBER} ]]; then + echo "Error: ${JAR} does not contain libcudf.so" >&2 + exit 1 +fi + +# -j flattens the JAR-internal path (e.g. native/.../libcudf.so) into ${TMP}. +unzip -j -o -q "${JAR}" "${MEMBER}" -d "${TMP}" + +SO="${TMP}/libcudf.so" +if [[ ! -f ${SO} ]]; then + echo "Error: failed to extract libcudf.so from ${JAR}" >&2 + exit 1 +fi + +if readelf -d "${SO}" | grep -E 'NEEDED.*\[(libspdlog|libfmt)\.so'; then + echo "Error: ${JAR} libcudf.so still depends on shared spdlog/fmt:" >&2 + readelf -d "${SO}" | grep NEEDED >&2 || true + exit 1 +fi + +echo "OK: no libspdlog/libfmt DT_NEEDED in $(basename "${JAR}")" diff --git a/java/ci/install_static_logging_libs.sh b/java/ci/install_static_logging_libs.sh new file mode 100755 index 000000000000..02a74d3d18b2 --- /dev/null +++ b/java/ci/install_static_logging_libs.sh @@ -0,0 +1,71 @@ +#!/bin/bash +# SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# +# Install PIC static libfmt.a / libspdlog.a into the static libcudf install +# prefix (same tree as rmm / rapids_logger). Versions match the shared libs +# from the ci-conda build_java env (libfmt.so.12.1.0, libspdlog.so.1.17.0). +# +# Usage: +# . install_static_logging_libs.sh +# install_static_logging_libs "${INSTALL_PREFIX}" + +install_static_libfmt() { + local prefix="$1" + local src + src="$(mktemp -d /tmp/cudf-java-fmt.XXXXXX)" + + rapids-logger "Installing static libfmt.a (12.1.0) into ${prefix}" + curl -fsSL "https://github.com/fmtlib/fmt/archive/refs/tags/12.1.0.tar.gz" \ + | tar -xz -C "${src}" + cmake -S "${src}/fmt-12.1.0" -B "${src}/build" -GNinja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX="${prefix}" \ + -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ + -DBUILD_SHARED_LIBS=OFF \ + -DFMT_DOC=OFF \ + -DFMT_TEST=OFF + cmake --build "${src}/build" --parallel "${PARALLEL_LEVEL}" + cmake --install "${src}/build" + rm -rf "${src}" + [[ -f ${prefix}/lib/libfmt.a ]] \ + || { echo "Error: failed to install ${prefix}/lib/libfmt.a" >&2; return 1; } +} + +install_static_libspdlog() { + local prefix="$1" + local src + src="$(mktemp -d /tmp/cudf-java-spdlog.XXXXXX)" + + rapids-logger "Installing static libspdlog.a (v1.17.0) into ${prefix}" + curl -fsSL "https://github.com/gabime/spdlog/archive/refs/tags/v1.17.0.tar.gz" \ + | tar -xz -C "${src}" + cmake -S "${src}/spdlog-1.17.0" -B "${src}/build" -GNinja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX="${prefix}" \ + -DCMAKE_PREFIX_PATH="${prefix}" \ + -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ + -DSPDLOG_BUILD_SHARED=OFF \ + -DSPDLOG_BUILD_PIC=ON \ + -DSPDLOG_FMT_EXTERNAL=ON \ + -DSPDLOG_BUILD_EXAMPLE=OFF \ + -DSPDLOG_BUILD_TESTS=OFF \ + -DSPDLOG_BUILD_BENCH=OFF + cmake --build "${src}/build" --parallel "${PARALLEL_LEVEL}" + cmake --install "${src}/build" + rm -rf "${src}" + [[ -f ${prefix}/lib/libspdlog.a ]] \ + || { echo "Error: failed to install ${prefix}/lib/libspdlog.a" >&2; return 1; } +} + +install_static_logging_libs() { + local prefix="$1" + if [[ -z ${prefix} ]]; then + echo "Error: install_static_logging_libs requires an install prefix" >&2 + return 1 + fi + mkdir -p "${prefix}" + + [[ -f ${prefix}/lib/libfmt.a ]] || install_static_libfmt "${prefix}" + [[ -f ${prefix}/lib/libspdlog.a ]] || install_static_libspdlog "${prefix}" +} diff --git a/java/ci/patches/0002-static-spdlog-fmt-for-java-libcudf.patch b/java/ci/patches/0002-static-spdlog-fmt-for-java-libcudf.patch new file mode 100644 index 000000000000..8a850f933a5b --- /dev/null +++ b/java/ci/patches/0002-static-spdlog-fmt-for-java-libcudf.patch @@ -0,0 +1,29 @@ +diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt +index 0000000000..1111111111 100644 +--- a/cpp/CMakeLists.txt ++++ b/cpp/CMakeLists.txt +@@ -1359,4 +1359,23 @@ if(TARGET spdlog::spdlog) + else() +- target_link_libraries(cudf PRIVATE ${_spdlog_link}) ++ # TEMPORARY (java packaging): absorb PIC static spdlog/fmt from the ++ # libcudf install prefix (same tree as rmm). BUILD_INTERFACE uses the ++ # libs found at configure time; INSTALL_INTERFACE uses $ ++ # so consumers (JAR container at /libcudf) resolve them like other deps. ++ find_library( ++ CUDF_JAVA_SPDLOG_STATIC NAMES libspdlog.a ++ PATHS "${CMAKE_INSTALL_PREFIX}/lib" NO_DEFAULT_PATH REQUIRED ++ ) ++ find_library( ++ CUDF_JAVA_FMT_STATIC NAMES libfmt.a ++ PATHS "${CMAKE_INSTALL_PREFIX}/lib" NO_DEFAULT_PATH REQUIRED ++ ) ++ target_link_libraries( ++ cudf ++ PRIVATE ++ "$>" ++ "$>" ++ "$/lib/libspdlog.a>>" ++ "$/lib/libfmt.a>>" ++ ) + endif() + endif() From 2f41ae569facd5a30d2c86dc2e7b831724d58a93 Mon Sep 17 00:00:00 2001 From: Paul Aiyedun <53453937+paul-aiyedun@users.noreply.github.com> Date: Fri, 7 Aug 2026 04:14:50 +0000 Subject: [PATCH 28/29] TEMPORARY: Drop old deployment --- .github/workflows/pr.yaml | 54 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 1b94e86d9b8f..c4e158b18367 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -14,8 +14,62 @@ concurrency: cancel-in-progress: true permissions: {} jobs: + # TEMPORARY: drop a prior PENDING/VALIDATED Sonatype deployment before rebuilding + # so the new java-publish upload is not blocked by the old one. + drop-old-deployment: + runs-on: linux-amd64-cpu4 + steps: + - name: Drop Sonatype deployment if present + env: + MAVEN_DEPLOY_USERNAME: ${{ vars.MAVEN_DEPLOY_USERNAME }} + MAVEN_DEPLOY_TOKEN: ${{ secrets.MAVEN_DEPLOY_TOKEN }} + DEPLOYMENT_ID: 6bf96242-4756-4ab2-8230-73427e51d564 + CENTRAL_PORTAL_URL: https://central.sonatype.com + run: | + set -euo pipefail + : "${MAVEN_DEPLOY_USERNAME:?must be set}" + : "${MAVEN_DEPLOY_TOKEN:?must be set}" + AUTH="$(printf '%s:%s' "${MAVEN_DEPLOY_USERNAME}" "${MAVEN_DEPLOY_TOKEN}" | base64 | tr -d '\n')" + status_url="${CENTRAL_PORTAL_URL}/api/v1/publisher/status?id=${DEPLOYMENT_ID}" + drop_url="${CENTRAL_PORTAL_URL}/api/v1/publisher/deployment/${DEPLOYMENT_ID}" + + body="$(mktemp)" + http="$(curl -sS --retry 3 --retry-delay 2 \ + -H "Authorization: Bearer ${AUTH}" \ + -X POST -o "${body}" -w '%{http_code}' "${status_url}" || echo transport-error)" + if [[ ${http} == 404 ]]; then + echo "Deployment ${DEPLOYMENT_ID} not found; nothing to drop" + rm -f "${body}" + exit 0 + fi + if [[ ${http} != 2* ]]; then + echo "Status check failed (HTTP ${http}): $(cat "${body}")" >&2 + rm -f "${body}" + exit 1 + fi + state="$(jq -r '.deploymentState // empty' "${body}")" + rm -f "${body}" + if [[ ${state} != VALIDATED ]]; then + echo "Expected VALIDATED or absent, got '${state:-UNKNOWN}'" >&2 + exit 1 + fi + + echo "Dropping VALIDATED deployment ${DEPLOYMENT_ID}" + body="$(mktemp)" + http="$(curl -sS --retry 3 --retry-delay 2 \ + -H "Authorization: Bearer ${AUTH}" \ + -X DELETE -o "${body}" -w '%{http_code}' "${drop_url}" || echo transport-error)" + if [[ ${http} != 2* ]]; then + echo "Drop failed (HTTP ${http}): $(cat "${body}")" >&2 + rm -f "${body}" + exit 1 + fi + rm -f "${body}" + echo "Dropped deployment ${DEPLOYMENT_ID}" + # Build the cuDF Java JAR for every Maven classifier. java-build: + needs: [drop-old-deployment] strategy: fail-fast: false matrix: From 404d68d75af8ee99389ccc844f7e85fd2932b118 Mon Sep 17 00:00:00 2001 From: Paul Aiyedun <53453937+paul-aiyedun@users.noreply.github.com> Date: Mon, 17 Aug 2026 22:50:18 +0000 Subject: [PATCH 29/29] Undo temporary pr.yaml related changes --- .github/workflows/pr.yaml | 1001 ++++++++++++++++--- java/ci/build_cudf_java_jar_in_container.sh | 6 - 2 files changed, 859 insertions(+), 148 deletions(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index c4e158b18367..d2a097dbdf43 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -1,9 +1,3 @@ -# TEMPORARY: runs the manual Java release for the tagged release commit. This PR -# is not merging, but revert this commit anyway. Stripped to build.yaml's -# java-build -> java-gather -> java-publish chain, dropping the telemetry-setup -# dependency and the `github.ref_type == 'tag'` gate that a branch push fails. -# Paired with the GITHUB_REF override in -# java/ci/build_cudf_java_jar_in_container.sh. name: pr on: push: @@ -14,146 +8,869 @@ concurrency: cancel-in-progress: true permissions: {} jobs: - # TEMPORARY: drop a prior PENDING/VALIDATED Sonatype deployment before rebuilding - # so the new java-publish upload is not blocked by the old one. - drop-old-deployment: - runs-on: linux-amd64-cpu4 - steps: - - name: Drop Sonatype deployment if present - env: - MAVEN_DEPLOY_USERNAME: ${{ vars.MAVEN_DEPLOY_USERNAME }} - MAVEN_DEPLOY_TOKEN: ${{ secrets.MAVEN_DEPLOY_TOKEN }} - DEPLOYMENT_ID: 6bf96242-4756-4ab2-8230-73427e51d564 - CENTRAL_PORTAL_URL: https://central.sonatype.com - run: | - set -euo pipefail - : "${MAVEN_DEPLOY_USERNAME:?must be set}" - : "${MAVEN_DEPLOY_TOKEN:?must be set}" - AUTH="$(printf '%s:%s' "${MAVEN_DEPLOY_USERNAME}" "${MAVEN_DEPLOY_TOKEN}" | base64 | tr -d '\n')" - status_url="${CENTRAL_PORTAL_URL}/api/v1/publisher/status?id=${DEPLOYMENT_ID}" - drop_url="${CENTRAL_PORTAL_URL}/api/v1/publisher/deployment/${DEPLOYMENT_ID}" - - body="$(mktemp)" - http="$(curl -sS --retry 3 --retry-delay 2 \ - -H "Authorization: Bearer ${AUTH}" \ - -X POST -o "${body}" -w '%{http_code}' "${status_url}" || echo transport-error)" - if [[ ${http} == 404 ]]; then - echo "Deployment ${DEPLOYMENT_ID} not found; nothing to drop" - rm -f "${body}" - exit 0 - fi - if [[ ${http} != 2* ]]; then - echo "Status check failed (HTTP ${http}): $(cat "${body}")" >&2 - rm -f "${body}" - exit 1 - fi - state="$(jq -r '.deploymentState // empty' "${body}")" - rm -f "${body}" - if [[ ${state} != VALIDATED ]]; then - echo "Expected VALIDATED or absent, got '${state:-UNKNOWN}'" >&2 - exit 1 - fi - - echo "Dropping VALIDATED deployment ${DEPLOYMENT_ID}" - body="$(mktemp)" - http="$(curl -sS --retry 3 --retry-delay 2 \ - -H "Authorization: Bearer ${AUTH}" \ - -X DELETE -o "${body}" -w '%{http_code}' "${drop_url}" || echo transport-error)" - if [[ ${http} != 2* ]]; then - echo "Drop failed (HTTP ${http}): $(cat "${body}")" >&2 - rm -f "${body}" - exit 1 - fi - rm -f "${body}" - echo "Dropped deployment ${DEPLOYMENT_ID}" - - # Build the cuDF Java JAR for every Maven classifier. - java-build: - needs: [drop-old-deployment] - strategy: - fail-fast: false - matrix: - include: - - { cuda: "12.9", cuda_major: "12", arch: "x86_64", runner: "linux-amd64-cpu16" } - - { cuda: "13.3", cuda_major: "13", arch: "x86_64", runner: "linux-amd64-cpu16" } - - { cuda: "12.9", cuda_major: "12", arch: "aarch64", runner: "linux-arm64-cpu16" } - - { cuda: "13.3", cuda_major: "13", arch: "aarch64", runner: "linux-arm64-cpu16" } - runs-on: ${{ matrix.runner }} + # Please keep pr-builder as the top job here + pr-builder: + needs: + - 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-other-tests + - conda-java-tests + - conda-notebook-tests + - docs-build + - wheel-build-libcudf + - wheel-build-libcudf-streaming + - wheel-build-cudf-streaming + - wheel-tests-cudf-streaming + - wheel-build-pylibcudf + - wheel-build-cudf + - wheel-tests-cudf + - wheel-build-cudf-polars + - wheel-tests-cudf-polars + - cudf-polars-polars-tests + - wheel-build-dask-cudf + - wheel-tests-dask-cudf + - devcontainer + - unit-tests-cudf-pandas + - pandas-tests + - narwhals-tests + - telemetry-setup + - third-party-integration-tests-cudf-pandas + uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@release/26.08 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: Checkout code repo - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 - with: - ref: ${{ inputs.sha }} - fetch-depth: 0 - persist-credentials: false - - name: Build static libcudf - run: | - ./java/ci/build_static_libcudf.sh \ - --output-dir "${RUNNER_TEMP}/libcudf" \ - --cuda-version "${{ matrix.cuda }}" - - name: Build cuDF Java JAR - run: | - ./java/ci/build_cudf_java_jar.sh \ - --libcudf-dir "${RUNNER_TEMP}/libcudf" \ - --output-dir "${RUNNER_TEMP}/jars" \ - --cuda-version "${{ matrix.cuda }}" - - name: Upload per-entry JAR artifact - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + - 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@090577647b8ddc4e06e809e264f7881650ecdccf # main + - name: Check if nightly CI is passing + uses: rapidsai/shared-actions/check_nightly_success/dispatch@main with: - name: cudf_java_cuda${{ matrix.cuda_major }}_${{ matrix.arch }} - # Ship only the JARs and POMs. Exclude the per-classifier Maven build scratch dir. - path: | - ${{ runner.temp }}/jars - !${{ runner.temp }}/jars/.mvn-temp-target - if-no-files-found: error - # Assemble the per-classifier JARs into one Maven-repository layout. - java-gather: - needs: [java-build] - runs-on: linux-amd64-cpu4 + 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@release/26.08 + with: + files_yaml: | + build_docs: + - '**' + - '!**/REVIEW_GUIDELINES.md' + - '!.coderabbit.yaml' + - '!.clang-format' + - '!.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/auto-assign.yml' + - '!.github/workflows/issue-release-scheduled.yml' + - '!.github/workflows/labeler.yml' + - '!.github/workflows/pr_issue_status_automation.yml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!ci/build_wheel*.sh' + - '!ci/check_style.sh' + - '!ci/discover_libcudf_tests.sh' + - '!ci/release/update-version.sh' + - '!ci/run_*.sh' + - '!ci/test_*.sh' + - '!ci/validate_wheel.sh' + - '!codecov.yml' + - '!SECURITY.md' + test_cpp: + - '**' + - '!**/REVIEW_GUIDELINES.md' + - '!.coderabbit.yaml' + - '!.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/auto-assign.yml' + - '!.github/workflows/issue-release-scheduled.yml' + - '!.github/workflows/labeler.yml' + - '!.github/workflows/pr_issue_status_automation.yml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!CONTRIBUTING.md' + - '!README.md' + - '!SECURITY.md' + - '!ci/cudf_pandas_scripts/**' + - '!ci/build_docs.sh' + - '!ci/build_python*.sh' + - '!ci/build_wheel*.sh' + - '!ci/check_style.sh' + - '!ci/cudf_pandas_scripts/**' + - '!ci/release/update-version.sh' + - '!ci/test_python*.sh' + - '!ci/test_wheel*.sh' + - '!ci/validate_wheel.sh' + - '!docs/**' + - '!img/**' + - '!java/**' + - '!notebooks/**' + - '!python/**' + test_cudf_pandas: + - '**' + - '!**/REVIEW_GUIDELINES.md' + - '!.coderabbit.yaml' + - '!.clang-format' + - '!.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/auto-assign.yml' + - '!.github/workflows/issue-release-scheduled.yml' + - '!.github/workflows/labeler.yml' + - '!.github/workflows/pr_issue_status_automation.yml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!CONTRIBUTING.md' + - '!README.md' + - '!SECURITY.md' + - '!ci/release/update-version.sh' + - '!ci/test_java.sh' + - '!ci/validate_wheel.sh' + - '!docs/**' + - '!img/**' + - '!java/**' + - '!notebooks/**' + test_java: + - '**' + - '!**/REVIEW_GUIDELINES.md' + - '!.coderabbit.yaml' + - '!.clang-format' + - '!.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/auto-assign.yml' + - '!.github/workflows/issue-release-scheduled.yml' + - '!.github/workflows/labeler.yml' + - '!.github/workflows/pr_issue_status_automation.yml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!CONTRIBUTING.md' + - '!README.md' + - '!SECURITY.md' + - '!ci/build_docs.sh' + - '!ci/build_wheel*.sh' + - '!ci/check_style.sh' + - '!ci/cudf_pandas_scripts/**' + - '!ci/release/update-version.sh' + - '!ci/test_wheel*.sh' + - '!ci/validate_wheel.sh' + - '!ci/release/update-version.sh' + - '!codecov.yml' + - '!docs/**' + - '!img/**' + - '!notebooks/**' + - '!python/**' + test_notebooks: + - '**' + - '!**/REVIEW_GUIDELINES.md' + - '!.coderabbit.yaml' + - '!.clang-format' + - '!.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/auto-assign.yml' + - '!.github/workflows/issue-release-scheduled.yml' + - '!.github/workflows/labeler.yml' + - '!.github/workflows/pr_issue_status_automation.yml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!CONTRIBUTING.md' + - '!README.md' + - '!SECURITY.md' + - '!ci/build_wheel*.sh' + - '!ci/cudf_pandas_scripts/**' + - '!ci/release/update-version.sh' + - '!ci/test_wheel*.sh' + - '!ci/validate_wheel.sh' + - '!codecov.yml' + - '!java/**' + test_python_conda: + - '**' + - '!**/REVIEW_GUIDELINES.md' + - '!.coderabbit.yaml' + - '!.clang-format' + - '!.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/auto-assign.yml' + - '!.github/workflows/issue-release-scheduled.yml' + - '!.github/workflows/labeler.yml' + - '!.github/workflows/pr_issue_status_automation.yml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!CONTRIBUTING.md' + - '!README.md' + - '!SECURITY.md' + - '!ci/build_docs.sh' + - '!ci/build_wheel*.sh' + - '!ci/check_style.sh' + - '!ci/cudf_pandas_scripts/**' + - '!ci/release/update-version.sh' + - '!ci/test_java.sh' + - '!ci/test_wheel*.sh' + - '!ci/validate_wheel.sh' + - '!docs/**' + - '!img/**' + - '!java/**' + - '!notebooks/**' + test_python_wheels: + - '**' + - '!**/REVIEW_GUIDELINES.md' + - '!.coderabbit.yaml' + - '!.clang-format' + - '!.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/auto-assign.yml' + - '!.github/workflows/issue-release-scheduled.yml' + - '!.github/workflows/labeler.yml' + - '!.github/workflows/pr_issue_status_automation.yml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!CONTRIBUTING.md' + - '!README.md' + - '!SECURITY.md' + - '!ci/build_cpp.sh' + - '!ci/build_docs.sh' + - '!ci/build_python_noarch.sh' + - '!ci/build_python.sh' + - '!ci/check-style.sh' + - '!ci/cudf_pandas_scripts/**' + - '!ci/release/update-version.sh' + - '!ci/test_cpp.sh' + - '!ci/test_cpp_common.sh' + - '!ci/test_cpp_memcheck.sh' + - '!ci/test_java.sh' + - '!ci/test_notebooks.sh' + - '!ci/test_python_common.sh' + - '!ci/test_python_cudf.sh' + - '!ci/test_python_other.sh' + - '!codecov.yml' + - '!conda/**' + - '!docs/**' + - '!img/**' + - '!java/**' + - '!notebooks/**' + not_cudf_polars: + - '**' + - '!python/cudf_polars/**' + neither_cudf_polars_nor_dask_cudf: + - '**' + - '!python/cudf_polars/**' + - '!python/dask_cudf/**' + neither_cudf_nor_dask_cudf: + - '**' + - '!python/cudf/**' + - '!python/dask_cudf/**' + neither_cpp_nor_cudf_polars_nor_dask_cudf: + - '**' + - '!cpp/**' + - '!python/cudf_polars/**' + - '!python/dask_cudf/**' + checks: + permissions: + contents: read + needs: telemetry-setup + uses: rapidsai/shared-workflows/.github/workflows/checks.yaml@release/26.08 + with: + enable_check_generated_files: false + ignored_pr_jobs: "telemetry-summarize spark-rapids-jni cuml-compat-tests" + conda-cpp-build: + needs: 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@release/26.08 + with: + build_type: pull-request + node_type: cpu16 + script: ci/build_cpp.sh + cmake-tests: + needs: 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/custom-job.yaml@release/26.08 + with: + build_type: pull-request + node_type: cpu16 + arch: "amd64" + container_image: "rapidsai/ci-conda:26.08-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 + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@release/26.08 + 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@release/26.08 + 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp + with: + build_type: pull-request + script: ci/test_cpp.sh + conda-python-build: + needs: 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@release/26.08 + 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-build-noarch: + needs: [conda-cpp-build, conda-python-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@release/26.08 + with: + build_type: pull-request + 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf + with: + build_type: pull-request + script: "ci/test_python_cudf.sh" + conda-python-other-tests: + # Tests for dask_cudf, cudf_polars, custreamz, cudf_kafka are separated for CI parallelism + needs: [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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda + with: + build_type: pull-request + # https://github.com/rapidsai/cudf/pull/22381/changes#r3196736965 + container-options: "--cap-add CAP_SYS_PTRACE --shm-size=8g --ulimit=nofile=1000000:1000000" + script: "ci/test_python_other.sh" + conda-java-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/custom-job.yaml@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_java + with: + build_type: pull-request + node_type: "gpu-l4-latest-1" + arch: "amd64" + container_image: "rapidsai/ci-conda:26.08-latest" + script: "ci/test_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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_notebooks + with: + build_type: pull-request + node_type: "gpu-l4-latest-1" + arch: "amd64" + container_image: "rapidsai/ci-conda:26.08-latest" + script: "ci/test_notebooks.sh" + docs-build: + 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).build_docs + with: + build_type: pull-request + node_type: "gpu-l4-latest-1" + arch: "amd64" + container_image: "rapidsai/ci-conda:26.08-latest" + script: "ci/build_docs.sh" + wheel-build-libcudf: + needs: 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/wheels-build.yaml@release/26.08 + with: + # build for every combination of arch and CUDA version, but only for the latest Python + matrix_filter: group_by([.ARCH, (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | map(max_by(.PY_VER|split(".")|map(tonumber))) + build_type: pull-request + node_type: cpu16 + script: "ci/build_wheel_libcudf.sh" + package-name: libcudf + package-type: cpp + wheel-build-libcudf-streaming: + needs: [checks, wheel-build-libcudf] + 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-build.yaml@release/26.08 + with: + # build for every combination of arch and CUDA version, but only for the latest Python + matrix_filter: group_by([.ARCH, (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | map(max_by(.PY_VER|split(".")|map(tonumber))) + build_type: pull-request + node_type: cpu16 + script: "ci/build_wheel_libcudf_streaming.sh" + package-name: libcudf_streaming + package-type: cpp + wheel-build-cudf-streaming: + needs: [checks, wheel-build-libcudf-streaming, wheel-build-pylibcudf] + 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-build.yaml@release/26.08 + with: + # 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))) + build_type: pull-request + node_type: cpu16 + script: "ci/build_wheel_cudf_streaming.sh" + package-name: cudf_streaming + package-type: python + wheel-tests-cudf-streaming: + needs: [wheel-build-cudf-streaming, 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels + with: + build_type: pull-request + script: ci/test_wheel_cudf_streaming.sh + wheel-build-pylibcudf: + needs: [checks, wheel-build-libcudf] + 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-build.yaml@release/26.08 + with: + build_type: pull-request + node_type: cpu8 + script: "ci/build_wheel_pylibcudf.sh" + package-name: pylibcudf + package-type: python + # 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-build-cudf: + needs: wheel-build-pylibcudf + 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-build.yaml@release/26.08 + with: + build_type: pull-request + node_type: cpu8 + script: "ci/build_wheel_cudf.sh" + package-name: cudf + package-type: python + # 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-cudf: + needs: [wheel-build-cudf, 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf + with: + build_type: pull-request + script: ci/test_wheel_cudf.sh + wheel-build-cudf-polars: + needs: wheel-build-pylibcudf + 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-build.yaml@release/26.08 + 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 + node_type: cpu8 + script: "ci/build_wheel_cudf_polars.sh" + package-name: cudf_polars + package-type: python + pure-wheel: true + wheel-tests-cudf-polars: + needs: [wheel-build-cudf-polars, wheel-build-cudf-streaming, 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_nor_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 + 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-cudf-polars, wheel-build-cudf-streaming, 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_nor_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_cudf_polars_polars_tests.sh" + wheel-build-dask-cudf: + needs: wheel-build-cudf + 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-build.yaml@release/26.08 + 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 + node_type: cpu8 + script: "ci/build_wheel_dask_cudf.sh" + package-name: dask_cudf + package-type: python + pure-wheel: true + wheel-tests-dask-cudf: + needs: [wheel-build-dask-cudf, 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).not_cudf_polars + 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@release/26.08 + 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-cudf, 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@release/26.08 + if: (fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels || fromJSON(needs.changed-files.outputs.changed_file_groups).test_cudf_pandas) && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf + with: + # This selects the latest supported Python + CUDA minor versions for each ARCH/CUDA major version combo + matrix_filter: group_by([(.ARCH), (.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/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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cpp_nor_cudf_polars_nor_dask_cudf + with: + build_type: pull-request + branch: ${{ inputs.branch }} + date: ${{ inputs.date }} + sha: ${{ inputs.sha }} + node_type: "gpu-l4-latest-1" + continue-on-error: true + container_image: "rapidsai/ci-conda:26.08-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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf + with: + build_type: pull-request + branch: ${{ inputs.branch }} + date: ${{ inputs.date }} + sha: ${{ inputs.sha }} + node_type: "gpu-l4-latest-1" + continue-on-error: true + container_image: "rapidsai/ci-conda:26.08-latest" + script: "ci/test_cuml_compat.sh" + pandas-tests: + # run the Pandas unit tests using PR branch + needs: [wheel-build-cudf, 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cpp_nor_cudf_polars_nor_dask_cudf + with: + build_type: pull-request + branch: ${{ inputs.branch }} + date: ${{ inputs.date }} + sha: ${{ inputs.sha }} + node_type: "gpu-l4-latest-1" + container_image: "rapidsai/citestwheel:26.08-latest" + script: ci/cudf_pandas_scripts/pandas-tests/run.sh pr + 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@release/26.08 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cpp_nor_cudf_polars_nor_dask_cudf + with: + build_type: pull-request + branch: ${{ inputs.branch }} + date: ${{ inputs.date }} + sha: ${{ inputs.sha }} + node_type: "gpu-l4-latest-1" + container_image: "rapidsai/ci-conda:26.08-latest" + script: ci/test_narwhals.sh + spark-rapids-jni: + needs: changed-files + permissions: + actions: read + contents: read + id-token: write + packages: read + pull-requests: read + uses: ./.github/workflows/spark-rapids-jni.yaml + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_java + 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: Checkout code repo - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 - with: - ref: ${{ inputs.sha }} - persist-credentials: false - - name: Download per-entry JAR artifacts - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 - with: - pattern: cudf_java_cuda* - path: ${{ runner.temp }}/jars - merge-multiple: true - - name: Assemble Maven repository layout - run: | - ./java/ci/assemble_maven_repo.sh \ - --jars-dir "${RUNNER_TEMP}/jars" \ - --output-dir "${RUNNER_TEMP}/maven-repo" - - name: Upload combined Maven repository artifact - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 - with: - name: cudf_java_maven_repo - path: ${{ runner.temp }}/maven-repo - if-no-files-found: error - - # Publish tagged release candidates to Maven Central via the Sonatype - # Central Publisher Portal. - java-publish: - needs: [java-gather] - permissions: - actions: read - contents: read - uses: rapidsai/shared-workflows/.github/workflows/maven-publish.yaml@release/26.08 - secrets: - GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} - GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} - MAVEN_DEPLOY_TOKEN: ${{ secrets.MAVEN_DEPLOY_TOKEN }} - with: - publication-type: 'rc' - artifact-name: cudf_java_maven_repo - # Release commit, so the bundle records the release, not the PR commit. - source-git-sha: ff5b362d7c06ae5837fd7a7337e2ae20895f324d - # false = validate + drop (safe). true = stage PENDING for manual publish. - stage-for-maven-central-publish: true + - name: Telemetry summarize + uses: rapidsai/shared-actions/telemetry-dispatch-summarize@main + env: + GH_TOKEN: ${{ github.token }} diff --git a/java/ci/build_cudf_java_jar_in_container.sh b/java/ci/build_cudf_java_jar_in_container.sh index ca646457d36a..9f93cf5edb98 100755 --- a/java/ci/build_cudf_java_jar_in_container.sh +++ b/java/ci/build_cudf_java_jar_in_container.sh @@ -117,12 +117,6 @@ cd "${REPO_ROOT}/java" CUDF_VERSION="$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout "${BUILD_ARG[@]}")" -# TEMPORARY (revert with the pr.yaml change): force the release-tag path for the -# manual release. Set here rather than as a job-level `env:` because GHA -# silently ignores that override. -# rapids-pre-commit-hooks: disable-next-line[verify-hardcoded-version] -export GITHUB_REF=refs/tags/v26.08.00 - # Release tag builds strip -SNAPSHOT and rewrite the POM so packaged artifacts # carry the release version. Non-release builds keep -SNAPSHOT. if rapids-is-release-build; then