Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
1928e80
Adding reuse based on artifact availability and unaffected stages
Jun 30, 2026
1097ec2
Adding reuse based on artifact availability and unaffected stages
Jun 30, 2026
b0d8f67
Adding test cases and fixing bugs
Jun 30, 2026
7bd631c
Moving tests to right location
Jun 30, 2026
58b0a1d
removing redundant import
Jun 30, 2026
9b7a0e1
Fixing copilot detected bug
Jun 30, 2026
fc21126
Fixing formatting
Jun 30, 2026
0648dcc
Adding unit tests
Jun 30, 2026
78fef0c
Merge branch 'main' into users/ammallya/reuse-artifacts
erman-gurses Jul 6, 2026
886eafc
Format
erman-gurses Jul 6, 2026
ce75e62
ci(stage-reuse): verify baseline artifacts per-platform before reusin…
Jul 6, 2026
76397f3
Adding missing debug outputs
Jul 6, 2026
c6fb127
Removing reduandant import
Jul 6, 2026
fe28af9
stage-reuse: disable automatic reuse when no platforms are selected
erman-gurses Jul 7, 2026
4259e85
stage-reuse: simplify build platform selection
erman-gurses Jul 7, 2026
da6adb4
Update docstring
erman-gurses Jul 7, 2026
6851c06
stage-reuse: propagate baseline run id for auto reuse
erman-gurses Jul 7, 2026
397e824
stage-reuse: disable reuse when platforms select different baselines
erman-gurses Jul 7, 2026
e7086a2
Black
erman-gurses Jul 7, 2026
d7c3c09
Merge branch 'main' into users/ammallya/reuse-artifacts
erman-gurses Jul 7, 2026
cb85bc7
Adding documentation
Jul 8, 2026
07f7f7f
fixing ordering regression
Jul 8, 2026
b1f3c37
Refactor and clean up based on Scott's review
Jul 16, 2026
0673a91
Merge branch 'main' into users/ammallya/reuse-artifacts
ammallya Jul 16, 2026
5dc07b4
Fix after new JAX functionality merge
Jul 16, 2026
1c19f0b
Fix for tests
Jul 17, 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
22 changes: 22 additions & 0 deletions .github/workflows/multi_arch_ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,25 @@ on:
type: string
default: ""
description: "Workflow run ID to copy prebuilt stage artifacts from; required when prebuilt_stages is set"
stage_reuse_mode:
type: choice
default: "dry-run"
options:
- "dry-run"
- "reuse-stage"
# This drives the AUTOMATIC stage-reuse detection layer, which is
# separate from the manual `prebuilt_stages` input above. dry-run only
# reports which unaffected stages could be reused; reuse-stage actually
# reuses them (skips the build and copies artifacts from a baseline run).
description: "dry-run (report only) | reuse-stage (auto-reuse unaffected stages)"
Comment thread
ammallya marked this conversation as resolved.
Resolved
stage_reuse_max_age_hours:
type: string
default: "72"
description: "Automatic stage reuse: reject baseline runs older than this many hours"
stage_reuse_commit_history:
type: string
default: "50"
description: "Automatic stage reuse: number of recent branch commits to fetch for ancestry"
changed_projects:
type: string
default: ""
Expand Down Expand Up @@ -86,6 +105,9 @@ jobs:
windows_test_labels: ${{ inputs.windows_test_labels || '' }}
prebuilt_stages: ${{ inputs.prebuilt_stages || '' }}
baseline_run_id: ${{ inputs.baseline_run_id || '' }}
stage_reuse_mode: ${{ inputs.stage_reuse_mode || 'dry-run' }}
stage_reuse_max_age_hours: ${{ inputs.stage_reuse_max_age_hours || '72' }}
stage_reuse_commit_history: ${{ inputs.stage_reuse_commit_history || '50' }}
build_pytorch: ${{ github.event_name != 'workflow_dispatch' || inputs.build_pytorch }}
build_jax: ${{ github.event_name != 'workflow_dispatch' || inputs.build_jax }}

Expand Down
21 changes: 21 additions & 0 deletions .github/workflows/setup_multi_arch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,23 @@ on:
description: "Workflow run ID to copy prebuilt stage artifacts from."
type: string
default: ""
stage_reuse_mode:
description: >-
Automatic stage-reuse mode (separate from the manual prebuilt_stages
input): "dry-run" (default) only reports which unaffected stages could
be reused; "reuse-stage" actually reuses them.
type: string
default: "dry-run"
stage_reuse_max_age_hours:
description: >-
Automatic stage reuse: reject baseline runs older than this many hours. default: "72"
type: string
default: "72"
stage_reuse_commit_history:
description: >-
Automatic stage reuse: number of recent branch commits to fetch for ancestry. default: "50"
type: string
default: "50"
build_pytorch:
description: "Build PyTorch wheels."
type: boolean
Expand Down Expand Up @@ -159,6 +176,10 @@ jobs:
WINDOWS_TEST_LABELS: ${{ inputs.windows_test_labels }}
PREBUILT_STAGES: ${{ inputs.prebuilt_stages }}
BASELINE_RUN_ID: ${{ inputs.baseline_run_id }}
STAGE_REUSE_MODE: ${{ inputs.stage_reuse_mode }}
STAGE_REUSE_CURRENT_SHA: ${{ steps.checkout.outputs.commit }}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you can actaully get this from ${{ github.sha }} (current sha)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It depends on what commit ref you want.

steps.checkout.outputs.commit gets the TheRock commit even when running in rockrel (and maybe rocm-libraries / rocm-systems?), see the workflow output:

For runs in rocm-libraries and rocm-systems, we may want to use baseline runs from those repositories instead of TheRock though.

Ultimately I think the best artifact reuse we'll be able to get will be some query against a database where we say "here are the artifact fingerprints that my current source code produces, fetch me artifacts for any with matching fingerprints from the database", which we'd want to abstract away from the github actions runs API entirely. We wouldn't need to scan commit history or workflow runs with that architecture.

STAGE_REUSE_MAX_AGE_HOURS: ${{ inputs.stage_reuse_max_age_hours }}
STAGE_REUSE_COMMIT_HISTORY: ${{ inputs.stage_reuse_commit_history }}
# Skip path filtering for external repos (git sha won't exist in TheRock)
SKIP_PATH_FILTERS: ${{ inputs.external_repo != '' && 'true' || '' }}
CI_CONFIG_PATH: ci-config
Expand Down
Loading
Loading