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