Skip to content
Merged
Show file tree
Hide file tree
Changes from 46 commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
a797e71
Add configure_multi_arch_ci.py scaffold with pipeline architecture
ScottTodd Mar 11, 2026
ffbed61
Replace StageDecisions with job graph model
ScottTodd Mar 13, 2026
da179a9
Style guide compliance and rename enable_build_jobs to is_ci_enabled
ScottTodd Mar 13, 2026
bd7f1a3
Simplify test structure and reduce boilerplate
ScottTodd Mar 13, 2026
4987152
Implement select_targets with trigger-type dispatch and PR label parsing
ScottTodd Mar 13, 2026
4a556ca
Document select_targets trigger-type intent and progression
ScottTodd Mar 16, 2026
274fe08
Implement expand_matrix with parity test against generate_multi_arch_…
ScottTodd Mar 16, 2026
5e8cc2d
Simplify expand_matrix: single-variant, both-platform interface
ScottTodd Mar 16, 2026
90b9d9e
Move data invariant checks to amdgpu_family_matrix_test.py
ScottTodd Mar 16, 2026
4e76b0f
Replace matrix array outputs with per-platform BuildConfig objects
ScottTodd Mar 16, 2026
c6f160e
Rewrite expand_build_configs tests as structural, not change-detector
ScottTodd Mar 16, 2026
d8cab49
Implement check_skip_ci with skip-ci label and path filtering
ScottTodd Mar 16, 2026
eefe93c
Implement decide_jobs test_type logic and extract GitContext
ScottTodd Mar 16, 2026
37d23de
Restructure _determine_test_type with early returns and fail-fast
ScottTodd Mar 16, 2026
4aa7805
Add structured logging via log() methods on dataclasses
ScottTodd Mar 16, 2026
2fe8c53
Wire configure_multi_arch_ci.py into multi_arch_ci.yml
ScottTodd Mar 16, 2026
69928a4
Pre-PR cleanup: fix docstring, sys.exit, and variable naming
ScottTodd Mar 17, 2026
be23fa5
Sanitize some inputs with `.lower()`.
ScottTodd Mar 17, 2026
2cb9bfb
Normalize inputs to lowercase at parse boundary
ScottTodd Mar 17, 2026
d1a1854
Improve format_summary with platform table and job group decisions
ScottTodd Mar 17, 2026
a1bc352
Extract format_summary into configure_multi_arch_ci_summary.py
ScottTodd Mar 17, 2026
994155b
Polish step summary: alert syntax, mechanical trigger line, remove py…
ScottTodd Mar 17, 2026
4d314b1
Formatting cleanup
ScottTodd Mar 17, 2026
027ed0c
Fix summary output with default/empty workflow_dispatch inputs
ScottTodd Mar 17, 2026
05cdf84
Improve logging: phase headers, always print all fields, skip context
ScottTodd Mar 17, 2026
cabdc8e
Adapt to ci label changes
ScottTodd Mar 18, 2026
e82104a
Consolidate build config into single JSON input, flatten per_family_info
ScottTodd Mar 18, 2026
44a20c2
Add BuildConfig contract tests for workflow YAML field references
ScottTodd Mar 18, 2026
75846bd
Fold prebuilt_stages and baseline_run_id into BuildConfig
ScottTodd Mar 18, 2026
ec266fa
Remove multi-arch code from configure_ci.py, add label gate to new sc…
ScottTodd Mar 18, 2026
53e1d97
Comment cleanup 1.
ScottTodd Mar 23, 2026
9b6eeb8
Simplify skip CI gate: remove SkipDecision, return bool
ScottTodd Mar 23, 2026
be196ef
Comment/logging cleanup 2
ScottTodd Mar 23, 2026
ea5761a
Replace action strings with JobAction enum, remove reason fields
ScottTodd Mar 23, 2026
fff9e8f
Keep prebuilt_stages as list[str] internally, serialize only at output
ScottTodd Mar 23, 2026
843b188
Trim summary formatting
ScottTodd Mar 23, 2026
73afa66
Improve step summary: ci: labels, per-platform test labels, split com…
ScottTodd Mar 23, 2026
1a1855e
Fix various issues spotted during self-review
ScottTodd Mar 23, 2026
2edeb1d
Add TODO for run_functional_tests
ScottTodd Mar 23, 2026
808e559
Remove redundant plumbing
ScottTodd Mar 23, 2026
e3df858
Simplify skip summary, remove unused git_context from summary path
ScottTodd Mar 23, 2026
ecf1eb1
Trim duplicated DAG comment
ScottTodd Mar 23, 2026
5c9fa55
Update ci_behavior_manipulation.md for multi-arch CI
ScottTodd Mar 24, 2026
d99128b
Delete amdgpu_family_matrix_test.py (move to another branch)
ScottTodd Mar 24, 2026
9a50df3
Revert "Update ci_behavior_manipulation.md for multi-arch CI" (move t…
ScottTodd Mar 24, 2026
373c8c8
Address review feedback: hardcode repo slug, rename test, add assertions
ScottTodd Mar 24, 2026
19c7709
Merge remote-tracking branch 'upstream/main' into multi-arch-configure
ScottTodd Mar 30, 2026
efb6c33
Fix tests after merging
ScottTodd Mar 30, 2026
d481320
Add build variant label to job names
ScottTodd Mar 30, 2026
5cc463e
Address comments in configure_multi_arch_ci_summary.py
ScottTodd Mar 30, 2026
26d721a
Simplifying and documenting configure_multi_arch_ci.py fields
ScottTodd Mar 30, 2026
f1a7488
Test fixes
ScottTodd Mar 30, 2026
0856078
Address more review comments in configure_multi_arch_ci.py
ScottTodd Mar 30, 2026
6e38a1d
Merge remote-tracking branch 'upstream/main' into multi-arch-configure
ScottTodd Mar 30, 2026
84ab305
Add executable bit to configure scripts (??? why did it get dropped?)
ScottTodd Mar 30, 2026
1262471
Add links to docs for test filtering and CI behavior manipulation
ScottTodd Mar 30, 2026
5b61a90
Add test_runner:<kernel> label support to multi-arch CI configure
ScottTodd Mar 30, 2026
0855f95
Add comment about label suffix trimming.
ScottTodd Mar 31, 2026
f4acbfc
Merge remote-tracking branch 'upstream/main' into multi-arch-configure
ScottTodd Mar 31, 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
42 changes: 7 additions & 35 deletions .github/workflows/multi_arch_ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,72 +60,44 @@ concurrency:

jobs:
setup:
uses: ./.github/workflows/setup.yml
uses: ./.github/workflows/setup_multi_arch.yml
with:
build_variant: "release"
multi_arch: true
prebuilt_stages: ${{ inputs.prebuilt_stages }}

linux_build_and_test:
name: Linux::${{ matrix.variant.build_variant_label }}
name: Linux
Comment thread
ScottTodd marked this conversation as resolved.
Outdated
needs: setup
if: >-
${{
needs.setup.outputs.linux_variants != '[]' &&
needs.setup.outputs.linux_build_config != '' &&
needs.setup.outputs.enable_build_jobs == 'true'
}}
strategy:
fail-fast: false
matrix:
variant: ${{ fromJSON(needs.setup.outputs.linux_variants) }}
uses: ./.github/workflows/multi_arch_ci_linux.yml
secrets: inherit
with:
matrix_per_family_json: ${{ matrix.variant.matrix_per_family_json }}
dist_amdgpu_families: ${{ matrix.variant.dist_amdgpu_families }}
artifact_group: ${{ matrix.variant.artifact_group }}
build_variant_label: ${{ matrix.variant.build_variant_label }}
build_variant_cmake_preset: ${{ matrix.variant.build_variant_cmake_preset }}
build_variant_suffix: ${{ matrix.variant.build_variant_suffix }}
build_config: ${{ needs.setup.outputs.linux_build_config }}
test_labels: ${{ needs.setup.outputs.linux_test_labels }}
expect_failure: ${{ matrix.variant.expect_failure == true }}
prebuilt_stages: ${{ inputs.prebuilt_stages }}
baseline_run_id: ${{ inputs.baseline_run_id }}
rocm_package_version: ${{ needs.setup.outputs.rocm_package_version }}
test_type: ${{ needs.setup.outputs.test_type }}
build_pytorch: ${{ matrix.variant.build_pytorch == true }}
permissions:
contents: read
id-token: write

windows_build_and_test:
name: Windows::${{ matrix.variant.build_variant_label }}
name: Windows
needs: setup
if: >-
${{
needs.setup.outputs.windows_variants != '[]' &&
needs.setup.outputs.windows_build_config != '' &&
needs.setup.outputs.enable_build_jobs == 'true'
}}
strategy:
fail-fast: false
matrix:
variant: ${{ fromJSON(needs.setup.outputs.windows_variants) }}
uses: ./.github/workflows/multi_arch_ci_windows.yml
secrets: inherit
with:
matrix_per_family_json: ${{ matrix.variant.matrix_per_family_json }}
dist_amdgpu_families: ${{ matrix.variant.dist_amdgpu_families }}
artifact_group: ${{ matrix.variant.artifact_group }}
build_variant_label: ${{ matrix.variant.build_variant_label }}
build_variant_cmake_preset: ${{ matrix.variant.build_variant_cmake_preset }}
build_variant_suffix: ${{ matrix.variant.build_variant_suffix }}
build_config: ${{ needs.setup.outputs.windows_build_config }}
test_labels: ${{ needs.setup.outputs.windows_test_labels }}
expect_failure: ${{ matrix.variant.expect_failure == true }}
prebuilt_stages: ${{ inputs.prebuilt_stages }}
baseline_run_id: ${{ inputs.baseline_run_id }}
rocm_package_version: ${{ needs.setup.outputs.rocm_package_version }}
test_type: ${{ needs.setup.outputs.test_type }}
build_pytorch: ${{ matrix.variant.build_pytorch == true }}
permissions:
contents: read
id-token: write
Expand Down
79 changes: 30 additions & 49 deletions .github/workflows/multi_arch_ci_linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,47 +6,28 @@ name: Multi-Arch CI - Linux
on:
workflow_call:
inputs:
artifact_group:
type: string
matrix_per_family_json:
type: string
description: "JSON array of {amdgpu_family, test-runs-on} objects for per-arch stages"
dist_amdgpu_families:
type: string
description: "Semicolon-separated list of all GPU families for dist targets"
build_variant_label:
type: string
build_variant_cmake_preset:
type: string
build_variant_suffix:
build_config:
type: string
description: >-
JSON object with build configuration for this platform. Fields:
artifact_group, per_family_info, dist_amdgpu_families,
build_variant_label, build_variant_cmake_preset,
build_variant_suffix, expect_failure, build_pytorch,
prebuilt_stages, baseline_run_id.
test_labels:
type: string
expect_failure:
type: boolean
prebuilt_stages:
type: string
default: ""
description: "Comma-separated build stages to skip; artifacts are copied from baseline_run_id instead"
baseline_run_id:
type: string
default: ""
description: "Workflow run ID to copy prebuilt stage artifacts from"
rocm_package_version:
type: string
test_type:
type: string
build_pytorch:
type: boolean
default: false

permissions:
contents: read

jobs:
copy_prebuilt_stages:
name: Copy Prebuilt Stages
if: ${{ inputs.prebuilt_stages != '' && inputs.baseline_run_id != '' }}
if: ${{ fromJSON(inputs.build_config).prebuilt_stages != '' && fromJSON(inputs.build_config).baseline_run_id != '' }}
runs-on: azure-linux-scale-rocm
permissions:
contents: read
Expand Down Expand Up @@ -80,9 +61,9 @@ jobs:
GITHUB_TOKEN: ${{ github.token }}
run: |
python build_tools/artifact_manager.py copy \
--source-run-id=${{ inputs.baseline_run_id }} \
--stage="${{ inputs.prebuilt_stages }}" \
--amdgpu-families="${{ inputs.dist_amdgpu_families }}"
--source-run-id=${{ fromJSON(inputs.build_config).baseline_run_id }} \
--stage="${{ fromJSON(inputs.build_config).prebuilt_stages }}" \
--amdgpu-families="${{ fromJSON(inputs.build_config).dist_amdgpu_families }}"

build_multi_arch_stages:
name: Build Multi-Arch Stages
Expand All @@ -91,14 +72,14 @@ jobs:
uses: ./.github/workflows/multi_arch_build_portable_linux.yml
secrets: inherit
with:
matrix_per_family_json: ${{ inputs.matrix_per_family_json }}
dist_amdgpu_families: ${{ inputs.dist_amdgpu_families }}
artifact_group: ${{ inputs.artifact_group }}
build_variant_label: ${{ inputs.build_variant_label }}
build_variant_cmake_preset: ${{ inputs.build_variant_cmake_preset }}
build_variant_suffix: ${{ inputs.build_variant_suffix }}
expect_failure: ${{ inputs.expect_failure }}
prebuilt_stages: ${{ inputs.prebuilt_stages }}
matrix_per_family_json: ${{ toJSON(fromJSON(inputs.build_config).per_family_info) }}
dist_amdgpu_families: ${{ fromJSON(inputs.build_config).dist_amdgpu_families }}
artifact_group: ${{ fromJSON(inputs.build_config).artifact_group }}
build_variant_label: ${{ fromJSON(inputs.build_config).build_variant_label }}
build_variant_cmake_preset: ${{ fromJSON(inputs.build_config).build_variant_cmake_preset }}
build_variant_suffix: ${{ fromJSON(inputs.build_config).build_variant_suffix }}
expect_failure: ${{ fromJSON(inputs.build_config).expect_failure }}
prebuilt_stages: ${{ fromJSON(inputs.build_config).prebuilt_stages }}
rocm_package_version: ${{ inputs.rocm_package_version }}
test_type: ${{ inputs.test_type }}
permissions:
Expand All @@ -109,21 +90,21 @@ jobs:
needs: [build_multi_arch_stages]
name: Validate Artifact Structure
# If we are expecting a build failure, do not run tests to save machine capacity.
if: ${{ !failure() && !cancelled() && inputs.expect_failure == false }}
if: ${{ !failure() && !cancelled() && fromJSON(inputs.build_config).expect_failure == false }}
uses: ./.github/workflows/test_artifacts_structure.yml
with:
artifact_group: ${{ inputs.artifact_group }}
artifact_group: ${{ fromJSON(inputs.build_config).artifact_group }}
platform: linux

test_artifacts_per_family:
needs: [copy_prebuilt_stages, build_multi_arch_stages]
name: Test ${{ matrix.family_info.amdgpu_family }}
# If we are expecting a build failure, do not run tests to save machine capacity.
if: ${{ !failure() && !cancelled() && inputs.expect_failure == false }}
if: ${{ !failure() && !cancelled() && fromJSON(inputs.build_config).expect_failure == false }}
strategy:
fail-fast: false
matrix:
family_info: ${{ fromJSON(inputs.matrix_per_family_json) }}
family_info: ${{ fromJSON(inputs.build_config).per_family_info }}
# TODO(TheRock#3288): Re-enable gfx950-dcgpu runners once we get more capacity
exclude:
- family_info:
Expand All @@ -142,11 +123,11 @@ jobs:
build_python_packages:
needs: [build_multi_arch_stages]
name: Build Python Packages
if: ${{ !failure() && !cancelled() && inputs.expect_failure == false }}
if: ${{ !failure() && !cancelled() && fromJSON(inputs.build_config).expect_failure == false }}
uses: ./.github/workflows/build_portable_linux_python_packages.yml
with:
artifact_group: ${{ inputs.artifact_group }}
amdgpu_families: ${{ inputs.dist_amdgpu_families }}
artifact_group: ${{ fromJSON(inputs.build_config).artifact_group }}
amdgpu_families: ${{ fromJSON(inputs.build_config).dist_amdgpu_families }}
multiarch_index: true
package_version: ${{ inputs.rocm_package_version }}
permissions:
Expand All @@ -156,11 +137,11 @@ jobs:
test_python_packages_per_family:
needs: [build_python_packages]
name: Test Python ${{ matrix.family_info.amdgpu_family }}
if: ${{ !failure() && !cancelled() && inputs.expect_failure == false }}
if: ${{ !failure() && !cancelled() && fromJSON(inputs.build_config).expect_failure == false }}
strategy:
fail-fast: false
matrix:
family_info: ${{ fromJSON(inputs.matrix_per_family_json) }}
family_info: ${{ fromJSON(inputs.build_config).per_family_info }}
# TODO(TheRock#3288): Re-enable gfx950-dcgpu runners once we get more capacity
exclude:
- family_info:
Expand All @@ -180,11 +161,11 @@ jobs:
build_pytorch_wheels_per_family:
needs: [build_python_packages]
name: Build PyTorch | ${{ matrix.family_info.amdgpu_family }}
if: ${{ !failure() && !cancelled() && inputs.build_pytorch == true }}
if: ${{ !failure() && !cancelled() && fromJSON(inputs.build_config).build_pytorch == true }}
strategy:
fail-fast: false
matrix:
family_info: ${{ fromJSON(inputs.matrix_per_family_json) }}
family_info: ${{ fromJSON(inputs.build_config).per_family_info }}
# TODO(TheRock#3288): Re-enable gfx950-dcgpu runners once we get more capacity
exclude:
- family_info:
Expand Down
75 changes: 28 additions & 47 deletions .github/workflows/multi_arch_ci_windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,47 +6,28 @@ name: Multi-Arch CI - Windows
on:
workflow_call:
inputs:
artifact_group:
type: string
matrix_per_family_json:
type: string
description: "JSON array of {amdgpu_family, test-runs-on} objects for per-arch stages"
dist_amdgpu_families:
type: string
description: "Semicolon-separated list of all GPU families for dist targets"
build_variant_label:
type: string
build_variant_cmake_preset:
type: string
build_variant_suffix:
build_config:
type: string
description: >-
JSON object with build configuration for this platform. Fields:
artifact_group, per_family_info, dist_amdgpu_families,
build_variant_label, build_variant_cmake_preset,
build_variant_suffix, expect_failure, build_pytorch,
prebuilt_stages, baseline_run_id.
test_labels:
type: string
expect_failure:
type: boolean
prebuilt_stages:
type: string
default: ""
description: "Comma-separated build stages to skip; artifacts are copied from baseline_run_id instead"
baseline_run_id:
type: string
default: ""
description: "Workflow run ID to copy prebuilt stage artifacts from"
rocm_package_version:
type: string
test_type:
type: string
build_pytorch:
type: boolean
default: false

permissions:
contents: read

jobs:
copy_prebuilt_stages:
name: Copy Prebuilt Stages
if: ${{ inputs.prebuilt_stages != '' && inputs.baseline_run_id != '' }}
if: ${{ fromJSON(inputs.build_config).prebuilt_stages != '' && fromJSON(inputs.build_config).baseline_run_id != '' }}
# TODO: Consider running on a Linux runner with --platform=windows to
# avoid Windows runner setup overhead (setup-python ~51s).
runs-on: azure-windows-scale-rocm
Expand Down Expand Up @@ -85,9 +66,9 @@ jobs:
GITHUB_TOKEN: ${{ github.token }}
run: |
python build_tools/artifact_manager.py copy \
--source-run-id=${{ inputs.baseline_run_id }} \
--stage="${{ inputs.prebuilt_stages }}" \
--amdgpu-families="${{ inputs.dist_amdgpu_families }}"
--source-run-id=${{ fromJSON(inputs.build_config).baseline_run_id }} \
--stage="${{ fromJSON(inputs.build_config).prebuilt_stages }}" \
--amdgpu-families="${{ fromJSON(inputs.build_config).dist_amdgpu_families }}"

build_multi_arch_stages:
name: Build Multi-Arch Stages
Expand All @@ -96,14 +77,14 @@ jobs:
uses: ./.github/workflows/multi_arch_build_windows.yml
secrets: inherit
with:
matrix_per_family_json: ${{ inputs.matrix_per_family_json }}
dist_amdgpu_families: ${{ inputs.dist_amdgpu_families }}
artifact_group: ${{ inputs.artifact_group }}
build_variant_label: ${{ inputs.build_variant_label }}
build_variant_cmake_preset: ${{ inputs.build_variant_cmake_preset }}
build_variant_suffix: ${{ inputs.build_variant_suffix }}
expect_failure: ${{ inputs.expect_failure }}
prebuilt_stages: ${{ inputs.prebuilt_stages }}
matrix_per_family_json: ${{ toJSON(fromJSON(inputs.build_config).per_family_info) }}
dist_amdgpu_families: ${{ fromJSON(inputs.build_config).dist_amdgpu_families }}
artifact_group: ${{ fromJSON(inputs.build_config).artifact_group }}
build_variant_label: ${{ fromJSON(inputs.build_config).build_variant_label }}
build_variant_cmake_preset: ${{ fromJSON(inputs.build_config).build_variant_cmake_preset }}
build_variant_suffix: ${{ fromJSON(inputs.build_config).build_variant_suffix }}
expect_failure: ${{ fromJSON(inputs.build_config).expect_failure }}
prebuilt_stages: ${{ fromJSON(inputs.build_config).prebuilt_stages }}
rocm_package_version: ${{ inputs.rocm_package_version }}
test_type: ${{ inputs.test_type }}
permissions:
Expand All @@ -114,21 +95,21 @@ jobs:
needs: [build_multi_arch_stages]
name: Validate Artifact Structure
# If we are expecting a build failure, do not run tests to save machine capacity.
if: ${{ !failure() && !cancelled() && inputs.expect_failure == false }}
if: ${{ !failure() && !cancelled() && fromJSON(inputs.build_config).expect_failure == false }}
uses: ./.github/workflows/test_artifacts_structure.yml
with:
artifact_group: ${{ inputs.artifact_group }}
artifact_group: ${{ fromJSON(inputs.build_config).artifact_group }}
platform: windows

test_artifacts_per_family:
needs: [copy_prebuilt_stages, build_multi_arch_stages]
name: Test ${{ matrix.family_info.amdgpu_family }}
# If we are expecting a build failure, do not run tests to save machine capacity.
if: ${{ !failure() && !cancelled() && inputs.expect_failure == false }}
if: ${{ !failure() && !cancelled() && fromJSON(inputs.build_config).expect_failure == false }}
strategy:
fail-fast: false
matrix:
family_info: ${{ fromJSON(inputs.matrix_per_family_json) }}
family_info: ${{ fromJSON(inputs.build_config).per_family_info }}
uses: ./.github/workflows/test_artifacts.yml
with:
# Use architecture-specific artifact group for fetching per-arch artifacts
Expand All @@ -143,11 +124,11 @@ jobs:
build_python_packages:
needs: [build_multi_arch_stages]
name: Build Python Packages
if: ${{ !failure() && !cancelled() && inputs.expect_failure == false }}
if: ${{ !failure() && !cancelled() && fromJSON(inputs.build_config).expect_failure == false }}
uses: ./.github/workflows/build_windows_python_packages.yml
with:
artifact_group: ${{ inputs.artifact_group }}
amdgpu_families: ${{ inputs.dist_amdgpu_families }}
artifact_group: ${{ fromJSON(inputs.build_config).artifact_group }}
amdgpu_families: ${{ fromJSON(inputs.build_config).dist_amdgpu_families }}
multiarch_index: true
package_version: ${{ inputs.rocm_package_version }}
permissions:
Expand All @@ -161,11 +142,11 @@ jobs:
build_pytorch_wheels_per_family:
needs: [build_python_packages]
name: Build PyTorch | ${{ matrix.family_info.amdgpu_family }}
if: ${{ !failure() && !cancelled() && inputs.build_pytorch == true }}
if: ${{ !failure() && !cancelled() && fromJSON(inputs.build_config).build_pytorch == true }}
strategy:
fail-fast: false
matrix:
family_info: ${{ fromJSON(inputs.matrix_per_family_json) }}
family_info: ${{ fromJSON(inputs.build_config).per_family_info }}
uses: ./.github/workflows/build_windows_pytorch_wheels_ci.yml
with:
artifact_group: ${{ matrix.family_info.amdgpu_family }}
Expand Down
Loading
Loading