Files
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

293 lines
13 KiB
YAML

name: hipFile
run-name: Kicks off several hipFile CI workflows for various platforms
on:
pull_request:
types: [opened, synchronize, reopened] # Defaults
paths:
- 'projects/hipfile/**'
- '.github/workflows/hipfile-*.yml'
- '!**/*.md'
- '!**/*.rst'
# ais-check is a self-contained Python tool with no dependency on the C++
# library, so its changes shouldn't trigger the full C++ build/test.
- '!projects/hipfile/tools/ais-check/**'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
packages: write
jobs:
Precheck:
runs-on: [ubuntu-24.04]
outputs:
changed_dockerfile: ${{ steps.ci-flags.outputs.changed_dockerfile }}
ci_matrix: ${{ steps.matrices.outputs.ci_matrix }}
build_CI_images_matrix: ${{ steps.build-ci-images-matrix.outputs.build_CI_images_matrix }}
ci_images: ${{ steps.ci-images.outputs.ci_images }}
nightly_build: ${{ steps.nightly.outputs.nightly_build }}
nightly_rocm_version: ${{ steps.nightly.outputs.nightly_rocm_version }}
env:
# Matrix variables go here in JSON notation.
# '>-' strips newlines
CXX_COMPILER: >-
[
"amdclang++",
"clang++",
"g++"
]
# C++20 is the production standard. C++23 is a forward-compat smoke test
# run once via MATRIX_INCLUDE (ubuntu + amdclang++ + 7.2.2), not fanned out.
CXX_STANDARD: >-
[
20
]
# Note: If adding distros or ROCm versions, ensure they have been properly excluded.
SUPPORTED_PLATFORMS: >-
[
"rocky",
"rocky8",
"suse",
"ubuntu"
]
ROCM_VERSIONS: >-
[
"7.2.2",
"7.13.0",
"nightly"
]
# MATRIX_INCLUDE / MATRIX_EXCLUDE: extra/removed matrix entries, passed
# through to GHA's strategy.matrix include/exclude keys so non-rectangular
# combinations can be expressed without abandoning the base cross-product.
MATRIX_INCLUDE: >-
[
{"supported_platforms": "ubuntu", "rocm_versions": "7.2.2", "cxx_compiler": "amdclang++", "cxx_standard": 23}
]
# 7.13.0 and nightly are ubuntu-only targets. They live in the base
# ROCM_VERSIONS axis and are removed from every other distro via
# MATRIX_EXCLUDE below. This is cleaner than specifying the full
# combination of CI parameters in include as the matrix axes grow.
MATRIX_EXCLUDE: >-
[
{"supported_platforms": "rocky", "rocm_versions": "7.13.0"},
{"supported_platforms": "rocky", "rocm_versions": "nightly"},
{"supported_platforms": "rocky8", "rocm_versions": "7.13.0"},
{"supported_platforms": "rocky8", "rocm_versions": "nightly"},
{"supported_platforms": "suse", "rocm_versions": "7.13.0"},
{"supported_platforms": "suse", "rocm_versions": "nightly"}
]
steps:
- name: Fetching code repository...
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
fetch-depth: 0
path: rocm-systems
sparse-checkout: |
projects/hipfile
.github/workflows
- name: Authenticating to GitHub Container Registry
uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4.2.0
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Git fetch base ref
working-directory: rocm-systems
run: git fetch origin "${GITHUB_BASE_REF}"
- name: Set CI Flags
working-directory: rocm-systems/projects/hipfile
id: ci-flags
run: |
echo "changed_dockerfile=$(./util/files-changed.sh "origin/${GITHUB_BASE_REF}" HEAD 'projects/hipfile/util/docker/DOCKERFILE.*')" >> "${GITHUB_OUTPUT}"
- name: Sanity-check util script test suites
# Ensure the util scripts work as expected before using them.
working-directory: rocm-systems/projects/hipfile
run: |
util/ci-matrices.sh --test
util/ci-images.sh --test
util/resolve-rocm-nightly.sh --test
util/build-ci-images-matrix.sh --test
- name: Compute matrix configurations
id: matrices
working-directory: rocm-systems/projects/hipfile
# ci_matrix (the full strategy.matrix handed to the Linux test job) and
# full_CI_images_matrix (the deduped catalog of every CI image this run
# references) are both computed by util/ci-matrices.sh. Sourcing it sets
# both shell vars from the job-level matrix env vars. The
# build-ci-images-matrix step below derives what to actually build.
run: |
source ./util/ci-matrices.sh
echo "hipFile CI Matrix: "
echo "${ci_matrix}" | jq .
echo "hipFile Full CI Image Matrix: "
echo "${full_CI_images_matrix}" | jq .
echo "ci_matrix=${ci_matrix}" >> "${GITHUB_OUTPUT}"
echo "full_CI_images_matrix=${full_CI_images_matrix}" >> "${GITHUB_OUTPUT}"
- name: Resolve ROCm nightly metadata
id: nightly
working-directory: rocm-systems/projects/hipfile
env:
FULL_CI_IMAGES_MATRIX: ${{ steps.matrices.outputs.full_CI_images_matrix }}
# Only resolves when a nightly row is present; otherwise emit empty values
# so the downstream image-name step stays wired up unconditionally.
run: |
if printf '%s' "${FULL_CI_IMAGES_MATRIX}" \
| jq -e '.include[]? | select(.rocm_versions == "nightly")' >/dev/null; then
./util/resolve-rocm-nightly.sh | tee -a "${GITHUB_OUTPUT}"
else
echo "nightly_build=" >> "${GITHUB_OUTPUT}"
echo "nightly_rocm_version=" >> "${GITHUB_OUTPUT}"
fi
- name: Compute CI image names
id: ci-images
working-directory: rocm-systems/projects/hipfile
env:
REGISTRY_URL: ghcr.io/${{ github.repository_owner }}
CHANGED_DOCKERFILE: ${{ steps.ci-flags.outputs.changed_dockerfile }}
FULL_CI_IMAGES_MATRIX: ${{ steps.matrices.outputs.full_CI_images_matrix }}
NIGHTLY_BUILD: ${{ steps.nightly.outputs.nightly_build }}
# ci_images is computed by util/ci-images.sh. Sourcing it sets ci_images
# from REGISTRY_URL, tag, FULL_CI_IMAGES_MATRIX, and NIGHTLY_BUILD in
# the environment.
run: |
if [ "${CHANGED_DOCKERFILE}" = "1" ]; then
# sanitize ref for tag
tag="$(echo "${GITHUB_REF}" | sed 's|[^a-zA-Z0-9]|-|g')-rocm"
else
tag="latest-rocm"
fi
export tag
source ./util/ci-images.sh
echo "List of CI Images: "
echo "${ci_images}" | jq .
echo "ci_images=${ci_images}" >> "${GITHUB_OUTPUT}"
- name: Compute images to build
id: build-ci-images-matrix
working-directory: rocm-systems/projects/hipfile
env:
CHANGED_DOCKERFILE: ${{ steps.ci-flags.outputs.changed_dockerfile }}
FULL_CI_IMAGES_MATRIX: ${{ steps.matrices.outputs.full_CI_images_matrix }}
CI_IMAGES: ${{ steps.ci-images.outputs.ci_images }}
# build_CI_images_matrix is computed by util/build-ci-images-matrix.sh.
# Sourcing it sets the shell var from CHANGED_DOCKERFILE,
# FULL_CI_IMAGES_MATRIX and CI_IMAGES: a Dockerfile change rebuilds the
# whole catalog, otherwise only nightly rows whose base/nvidia images
# aren't already published in GHCR (querying the registry) are kept -- so
# in the common case the set is empty and build_CI_image is skipped.
run: |
source ./util/build-ci-images-matrix.sh
echo "hipFile Build CI Images Matrix: "
echo "${build_CI_images_matrix}" | jq .
echo "build_CI_images_matrix=${build_CI_images_matrix}" >> "${GITHUB_OUTPUT}"
build_CI_image:
# build_CI_images_matrix is empty when there's nothing to (re)build (no
# Dockerfile change and every nightly image already published). An empty
# include yields zero matrix jobs, so this job is skipped.
if: ${{ fromJSON(needs.Precheck.outputs.build_CI_images_matrix).include[0] != null }}
needs: Precheck
permissions:
contents: read
packages: write
strategy:
fail-fast: false
matrix: ${{ fromJSON(needs.Precheck.outputs.build_CI_images_matrix) }}
uses: ./.github/workflows/hipfile-image-build.yml
with:
ci_image_name: ${{ fromJSON(needs.Precheck.outputs.ci_images)[format('{0}-{1}', matrix.supported_platforms, matrix.rocm_versions)].ci_image }}
ci_image_cache: ${{ fromJSON(needs.Precheck.outputs.ci_images)[format('{0}-{1}', matrix.supported_platforms, matrix.rocm_versions)].ci_image_cache }}
ci_image_name_nvidia: ${{ fromJSON(needs.Precheck.outputs.ci_images)[format('{0}-{1}', matrix.supported_platforms, matrix.rocm_versions)].ci_image_nvidia }}
ci_image_cache_nvidia: ${{ fromJSON(needs.Precheck.outputs.ci_images)[format('{0}-{1}', matrix.supported_platforms, matrix.rocm_versions)].ci_image_nvidia_cache }}
platform: ${{ matrix.supported_platforms }}
# Nightly passes the resolved clean version (e.g. 7.14.0) as ROCM_VERSION
# and the build id separately; other versions pass the matrix value.
rocm_version: ${{ matrix.rocm_versions == 'nightly' && needs.Precheck.outputs.nightly_rocm_version || matrix.rocm_versions }}
rocm_nightly_build: ${{ matrix.rocm_versions == 'nightly' && needs.Precheck.outputs.nightly_build || '' }}
# Only a steady-state nightly fallback build refreshes the shared floating
# cache; a Dockerfile-change PR builds a PR-namespaced image and must not.
publish_cache: ${{ matrix.rocm_versions == 'nightly' && needs.Precheck.outputs.changed_dockerfile != '1' }}
# Due to GHA matrix limitations, we cannot inspect the result of individual jobs
# in the matrix. To avoid confusing errors, our only option is that if a single
# build fails, the entire workflow must stop. Which is rather unfortunate.
Linux:
if: >-
${{
!cancelled() && (
needs.build_CI_image.result == 'success' ||
needs.build_CI_image.result == 'skipped'
)
}}
needs: [Precheck, build_CI_image]
strategy:
fail-fast: false
matrix: ${{ fromJSON(needs.Precheck.outputs.ci_matrix) }}
uses: ./.github/workflows/hipfile-ci.yml
with:
ci_image: ${{ fromJSON(needs.Precheck.outputs.ci_images)[format('{0}-{1}', matrix.supported_platforms, matrix.rocm_versions)].ci_image }}
ci_image_nvidia: ${{ fromJSON(needs.Precheck.outputs.ci_images)[format('{0}-{1}', matrix.supported_platforms, matrix.rocm_versions)].ci_image_nvidia }}
cxx_compiler: ${{ matrix.cxx_compiler }}
cxx_standard: ${{ matrix.cxx_standard }}
platform: ${{ matrix.supported_platforms }}
rocm_version: ${{ matrix.rocm_versions }}
# CodeQL C/C++ findings are compiler- and standard-independent, so run the
# analysis exactly once against a single fixed image rather than fanning out
# across the build matrix. Change the image key below to retarget the ROCm
# version (the combo must exist in Precheck's matrix). Python and Actions are
# covered repo-wide by codeql.yml; this closes the C/C++ gap.
codeql:
if: >-
${{
!cancelled() && (
needs.build_CI_image.result == 'success' ||
needs.build_CI_image.result == 'skipped'
)
}}
needs: [Precheck, build_CI_image]
permissions:
contents: read
packages: read
security-events: write
uses: ./.github/workflows/hipfile-codeql.yml
with:
ci_image: ${{ fromJSON(needs.Precheck.outputs.ci_images)['ubuntu-7.2.2'].ci_image }}
# Sanitizer-instrumented unit tests are clang-only and platform/standard
# independent, so run them exactly once against a single fixed image rather
# than fanning out across the build matrix. Change the image key below to
# retarget the ROCm version (the combo must exist in Precheck's matrix).
sanitizers:
if: >-
${{
!cancelled() && (
needs.build_CI_image.result == 'success' ||
needs.build_CI_image.result == 'skipped'
)
}}
needs: [Precheck, build_CI_image]
uses: ./.github/workflows/hipfile-sanitizers.yml
with:
ci_image: ${{ fromJSON(needs.Precheck.outputs.ci_images)['ubuntu-7.2.2'].ci_image }}
# clang-tidy findings are compiler- and standard-independent, so run the
# analysis exactly once against a single fixed image rather than fanning out
# across the build matrix. Change the image key below to retarget the ROCm
# version (the combo must exist in Precheck's matrix).
clang_tidy:
if: >-
${{
!cancelled() && (
needs.build_CI_image.result == 'success' ||
needs.build_CI_image.result == 'skipped'
)
}}
needs: [Precheck, build_CI_image]
uses: ./.github/workflows/hipfile-clang-tidy.yml
with:
ci_image: ${{ fromJSON(needs.Precheck.outputs.ci_images)['ubuntu-7.2.2'].ci_image }}