Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
42151cf
Add flaky test retry support for gtests and pytests
rgsl888prabhu Apr 13, 2026
1fc5cef
Add nightly report generator and shared helpers
rgsl888prabhu Apr 13, 2026
1392691
Instrument all test scripts with nightly reporting
rgsl888prabhu Apr 13, 2026
f6b0f75
Add aggregation, Slack notifications, and test dashboard
rgsl888prabhu Apr 13, 2026
043180f
Add nightly-summary job and secrets to test workflow
rgsl888prabhu Apr 13, 2026
a226607
Update developer skill with CI best practices
rgsl888prabhu Apr 13, 2026
b6d1303
Fix pre-commit: ruff format, copyright years, dependency files
rgsl888prabhu Apr 13, 2026
6b7605b
Fix nightly-summary job: remove unsupported container-options secrets
rgsl888prabhu Apr 13, 2026
84069f8
Remove unsupported script-env-secret-4 from test workflow
rgsl888prabhu Apr 13, 2026
9ae0852
Add bounce detection and cross-run flaky classification
rgsl888prabhu Apr 13, 2026
d34bf28
Make bounce window and threshold configurable via env vars
rgsl888prabhu Apr 13, 2026
2eae30b
Convert nightly-summary to inline job for secret access
rgsl888prabhu Apr 13, 2026
e977784
Fix S3 auth: prefer role-based credentials over CUOPT_AWS overrides
rgsl888prabhu Apr 13, 2026
124aeb2
Fix S3 auth: use CUOPT_AWS static keys and unset session token
rgsl888prabhu Apr 14, 2026
338b7bb
Extract nightly-summary into reusable workflow
rgsl888prabhu Apr 14, 2026
15641c5
Add curl to nightly-summary container for Slack notifications
rgsl888prabhu Apr 14, 2026
477b273
Improve nightly Slack reporting and thirdparty test visibility
rgsl888prabhu Apr 14, 2026
a85e8a0
Add presigned URLs, workflow-level status, and show only failures in …
rgsl888prabhu Apr 14, 2026
3ee8c1f
Use Slack threading for nightly summary details
rgsl888prabhu Apr 14, 2026
4e8f561
Fix CI job filtering and Slack block size limits
rgsl888prabhu Apr 14, 2026
ac91a74
Show all CI workflow statuses and group test issues by workflow
rgsl888prabhu Apr 14, 2026
777a58d
Remove @channel ping from Slack notifications
rgsl888prabhu Apr 14, 2026
9c34a9e
Fix presigned URLs and reorder Slack thread replies
rgsl888prabhu Apr 14, 2026
8712ec7
Name failing workflows in Slack and add build summary
rgsl888prabhu Apr 14, 2026
4419b92
Add summary-only flag to test.yaml for quick nightly-summary testing
rgsl888prabhu Apr 14, 2026
1e711b3
Make dashboard self-contained and add summary-only test flag
rgsl888prabhu Apr 14, 2026
cc9246e
Show Failures tab first in dashboard instead of Matrix Grid
rgsl888prabhu Apr 15, 2026
1b45e24
Trim verbose Slack output: compact stats, failures-only CI status
rgsl888prabhu Apr 15, 2026
78c1e38
Fix build summary argument list too long error
rgsl888prabhu Apr 15, 2026
dd75886
Add summary-only flag to build.yaml for quick build-summary testing
rgsl888prabhu Apr 15, 2026
bd1ec6f
Show CI job pass/fail counts in main Slack message
rgsl888prabhu Apr 15, 2026
609db51
Show failures before matrix overview in consolidated HTML report
rgsl888prabhu Apr 15, 2026
bcde49c
Handle date switching gracefully in embedded dashboard
rgsl888prabhu Apr 15, 2026
2499eb3
Show branch and date as info labels in embedded dashboard
rgsl888prabhu Apr 15, 2026
b9e6b98
Add branch separation to S3 paths for multi-branch nightly support
rgsl888prabhu Apr 15, 2026
9f7cef5
Fall back to legacy S3 path when branch-separated path is empty
rgsl888prabhu Apr 15, 2026
889cc60
Pass date through to nightly-summary for correct S3 path lookup
rgsl888prabhu Apr 15, 2026
f30a4e2
Move AWS credential mapping before S3 fallback check
rgsl888prabhu Apr 15, 2026
404263c
Exclude consolidated.json from fallback path check
rgsl888prabhu Apr 15, 2026
c90e73c
Remove legacy S3 path fallback
rgsl888prabhu Apr 15, 2026
54d01fd
Add tests and build-images to build-summary needs
rgsl888prabhu Apr 15, 2026
b7efe3b
Simplify build-summary needs to leaf jobs only
rgsl888prabhu Apr 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 47 additions & 1 deletion .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,18 @@ on:
If 'true', trigger the test workflow after all builds complete.
type: boolean
default: false
summary-only:
description: "If true, skip all build jobs and run only build-summary"
type: boolean
default: false

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
cpp-build:
if: ${{ !inputs.summary-only }}
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@main
with:
Expand All @@ -53,6 +58,7 @@ jobs:
sha: ${{ inputs.sha }}
script: ci/build_cpp.sh
python-build:
if: ${{ !inputs.summary-only }}
needs: [cpp-build]
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@main
Expand All @@ -63,6 +69,7 @@ jobs:
sha: ${{ inputs.sha }}
script: ci/build_python.sh
upload-conda:
if: ${{ !inputs.summary-only }}
needs: [cpp-build, python-build]
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/conda-upload-packages.yaml@main
Expand All @@ -72,6 +79,7 @@ jobs:
date: ${{ inputs.date }}
sha: ${{ inputs.sha }}
wheel-build-cuopt-mps-parser:
if: ${{ !inputs.summary-only }}
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main
with:
Expand All @@ -86,6 +94,7 @@ jobs:
# need 1 build per Python version and arch (but CUDA version doesn't matter so choose the latest)
matrix_filter: 'group_by([.ARCH, (.PY_VER |split(".") | map(tonumber))])|map(max_by([(.CUDA_VER|split(".")|map(tonumber))]))'
wheel-publish-cuopt-mps-parser:
if: ${{ !inputs.summary-only }}
needs: wheel-build-cuopt-mps-parser
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@main
Expand All @@ -97,6 +106,7 @@ jobs:
package-name: cuopt_mps_parser
package-type: python
wheel-build-libcuopt:
if: ${{ !inputs.summary-only }}
needs: wheel-build-cuopt-mps-parser
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main
Expand All @@ -110,6 +120,7 @@ jobs:
package-type: cpp
matrix_filter: group_by([.ARCH, (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | map(max_by(.PY_VER|split(".")|map(tonumber)))
wheel-publish-libcuopt:
if: ${{ !inputs.summary-only }}
needs: wheel-build-libcuopt
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@main
Expand All @@ -121,6 +132,7 @@ jobs:
package-name: libcuopt
package-type: cpp
wheel-build-cuopt:
if: ${{ !inputs.summary-only }}
needs: [wheel-build-cuopt-mps-parser, wheel-build-libcuopt]
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main
Expand All @@ -133,6 +145,7 @@ jobs:
package-name: cuopt
package-type: python
wheel-publish-cuopt:
if: ${{ !inputs.summary-only }}
needs: wheel-build-cuopt
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@main
Expand All @@ -144,6 +157,7 @@ jobs:
package-name: cuopt
package-type: python
wheel-build-cuopt-server:
if: ${{ !inputs.summary-only }}
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main
with:
Expand All @@ -158,6 +172,7 @@ jobs:
# Only need 1 package per CUDA major version. This selects "ARCH=amd64 + the latest supported Python, 1 job per major CUDA 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))]))
wheel-publish-cuopt-server:
if: ${{ !inputs.summary-only }}
needs: wheel-build-cuopt-server
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@main
Expand All @@ -169,6 +184,7 @@ jobs:
package-name: cuopt_server
package-type: python
docs-build:
if: ${{ !inputs.summary-only }}
needs: [python-build]
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main
Expand All @@ -184,6 +200,7 @@ jobs:
container_image: "rapidsai/ci-conda:26.06-latest"
script: "ci/build_docs.sh"
wheel-build-cuopt-sh-client:
if: ${{ !inputs.summary-only }}
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main
with:
Expand All @@ -199,6 +216,7 @@ jobs:
# only need 1 build (noarch package): this selects amd64, oldest-supported Python, latest-supported CUDA
matrix_filter: '[map(select(.ARCH == "amd64")) | min_by((.PY_VER | split(".") | map(tonumber)), (.CUDA_VER | split(".") | map(-tonumber)))]'
wheel-publish-cuopt-sh-client:
if: ${{ !inputs.summary-only }}
needs: wheel-build-cuopt-sh-client
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@main
Expand All @@ -219,7 +237,7 @@ jobs:
- wheel-publish-cuopt-server
- wheel-publish-cuopt-sh-client
- wheel-publish-libcuopt
if: inputs.trigger-tests
if: ${{ inputs.trigger-tests && !inputs.summary-only }}
runs-on: ubuntu-latest
# ref: https://docs.github.com/en/actions/reference/security/secure-use#use-an-intermediate-environment-variable
env:
Expand All @@ -242,7 +260,35 @@ jobs:
-f date="${INPUT_DATE}" \
-f sha="${INPUT_SHA}"

build-summary:
if: ${{ always() && (inputs.build_type == 'nightly') }}
needs:
- tests
- build-images
- docs-build
runs-on: linux-amd64-cpu4
container:
image: python:3.12-slim
steps:
- uses: actions/checkout@v6
with:
ref: ${{ inputs.sha }}
- name: Install dependencies
run: apt-get update && apt-get install -y --no-install-recommends curl
- name: Send build summary
env:
GITHUB_TOKEN: ${{ github.token }}
GITHUB_RUN_ID: ${{ github.run_id }}
GITHUB_REPOSITORY: ${{ github.repository }}
GITHUB_SERVER_URL: ${{ github.server_url }}
CUOPT_SLACK_WEBHOOK_URL: ${{ secrets.CUOPT_SLACK_WEBHOOK_URL }}
SLACK_BOT_TOKEN: ${{ secrets.CUOPT_SLACK_BOT_TOKEN }}
SLACK_CHANNEL_ID: ${{ secrets.CUOPT_SLACK_CHANNEL_ID }}
RAPIDS_BRANCH: ${{ inputs.branch }}
run: bash ci/build_summary.sh

build-images:
if: ${{ !inputs.summary-only }}
needs:
- wheel-publish-cuopt
- wheel-publish-cuopt-server
Expand Down
83 changes: 83 additions & 0 deletions .github/workflows/nightly-summary.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

name: nightly-summary

on:
workflow_dispatch:
inputs:
branch:
description: "Branch name the run targets"
required: true
type: string
default: main
sha:
description: "Full git commit SHA to check out"
required: true
type: string
build_type:
description: "Build type (nightly, pull-request, branch)"
required: true
type: string
default: nightly
date:
description: "Date (YYYY-MM-DD) for this run. Defaults to today."
required: false
type: string
workflow_call:
inputs:
branch:
required: true
type: string
sha:
required: true
type: string
build_type:
required: true
type: string
date:
required: false
type: string
secrets:
CUOPT_DATASET_S3_URI:
required: true
CUOPT_AWS_ACCESS_KEY_ID:
required: true
CUOPT_AWS_SECRET_ACCESS_KEY:
required: true
CUOPT_SLACK_WEBHOOK_URL:
required: false
CUOPT_SLACK_BOT_TOKEN:
required: false
CUOPT_SLACK_CHANNEL_ID:
required: false

jobs:
nightly-summary:
runs-on: linux-amd64-cpu4
container:
image: python:3.12-slim
steps:
- uses: actions/checkout@v6
with:
ref: ${{ inputs.sha }}
- name: Install dependencies
run: |
apt-get update && apt-get install -y --no-install-recommends curl
pip install awscli
- name: Run nightly summary
env:
CUOPT_DATASET_S3_URI: ${{ secrets.CUOPT_DATASET_S3_URI }}
CUOPT_AWS_ACCESS_KEY_ID: ${{ secrets.CUOPT_AWS_ACCESS_KEY_ID }}
CUOPT_AWS_SECRET_ACCESS_KEY: ${{ secrets.CUOPT_AWS_SECRET_ACCESS_KEY }}
CUOPT_SLACK_WEBHOOK_URL: ${{ secrets.CUOPT_SLACK_WEBHOOK_URL }}
CUOPT_SLACK_BOT_TOKEN: ${{ secrets.CUOPT_SLACK_BOT_TOKEN }}
CUOPT_SLACK_CHANNEL_ID: ${{ secrets.CUOPT_SLACK_CHANNEL_ID }}
RAPIDS_BUILD_TYPE: ${{ inputs.build_type }}
RAPIDS_BRANCH: ${{ inputs.branch }}
RUN_DATE: ${{ inputs.date }}
GITHUB_TOKEN: ${{ github.token }}
GITHUB_RUN_ID: ${{ github.run_id }}
GITHUB_REPOSITORY: ${{ github.repository }}
GITHUB_SERVER_URL: ${{ github.server_url }}
run: bash ci/nightly_summary.sh
30 changes: 30 additions & 0 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,14 @@ on:
description: "build_type: one of [branch, nightly, pull-request]"
type: string
default: nightly
summary-only:
description: "If true, skip all test jobs and run only nightly-summary"
type: boolean
default: false

jobs:
conda-cpp-tests:
if: ${{ !inputs.summary-only }}
uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-tests.yaml@main
with:
build_type: ${{ inputs.build_type }}
Expand All @@ -42,6 +47,7 @@ jobs:
script-env-secret-3-key: CUOPT_AWS_SECRET_ACCESS_KEY
script-env-secret-3-value: ${{ secrets.CUOPT_AWS_SECRET_ACCESS_KEY }}
conda-python-tests:
if: ${{ !inputs.summary-only }}
uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@main
with:
run_codecov: false
Expand All @@ -58,6 +64,7 @@ jobs:
script-env-secret-3-key: CUOPT_AWS_SECRET_ACCESS_KEY
script-env-secret-3-value: ${{ secrets.CUOPT_AWS_SECRET_ACCESS_KEY }}
wheel-tests-cuopt:
if: ${{ !inputs.summary-only }}
uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main
with:
build_type: ${{ inputs.build_type }}
Expand All @@ -73,6 +80,7 @@ jobs:
script-env-secret-3-key: CUOPT_AWS_SECRET_ACCESS_KEY
script-env-secret-3-value: ${{ secrets.CUOPT_AWS_SECRET_ACCESS_KEY }}
wheel-tests-cuopt-server:
if: ${{ !inputs.summary-only }}
uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main
with:
build_type: ${{ inputs.build_type }}
Expand All @@ -88,6 +96,7 @@ jobs:
script-env-secret-3-key: CUOPT_AWS_SECRET_ACCESS_KEY
script-env-secret-3-value: ${{ secrets.CUOPT_AWS_SECRET_ACCESS_KEY }}
conda-notebook-tests:
if: ${{ !inputs.summary-only }}
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main
with:
Expand All @@ -99,3 +108,24 @@ jobs:
arch: "amd64"
container_image: "rapidsai/ci-conda:26.06-latest"
script: ci/test_notebooks.sh
nightly-summary:
if: ${{ always() && inputs.build_type == 'nightly' }}
needs:
- conda-cpp-tests
- conda-python-tests
- wheel-tests-cuopt
- wheel-tests-cuopt-server
- conda-notebook-tests
uses: ./.github/workflows/nightly-summary.yaml
with:
branch: ${{ inputs.branch }}
sha: ${{ inputs.sha }}
build_type: ${{ inputs.build_type }}
date: ${{ inputs.date }}
secrets:
CUOPT_DATASET_S3_URI: ${{ secrets.CUOPT_DATASET_S3_URI }}
CUOPT_AWS_ACCESS_KEY_ID: ${{ secrets.CUOPT_AWS_ACCESS_KEY_ID }}
CUOPT_AWS_SECRET_ACCESS_KEY: ${{ secrets.CUOPT_AWS_SECRET_ACCESS_KEY }}
CUOPT_SLACK_WEBHOOK_URL: ${{ secrets.CUOPT_SLACK_WEBHOOK_URL }}
CUOPT_SLACK_BOT_TOKEN: ${{ secrets.CUOPT_SLACK_BOT_TOKEN }}
CUOPT_SLACK_CHANNEL_ID: ${{ secrets.CUOPT_SLACK_CHANNEL_ID }}
Loading