Reduce PR validation time by decoupling CLI archive dependencies#15023
Merged
radical merged 11 commits intorelease/13.2from Mar 7, 2026
Merged
Reduce PR validation time by decoupling CLI archive dependencies#15023radical merged 11 commits intorelease/13.2from
radical merged 11 commits intorelease/13.2from
Conversation
Contributor
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 15023Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 15023" |
Contributor
There was a problem hiding this comment.
Pull request overview
This PR refactors the GitHub Actions CI pipeline to let CLI native archive builds run in parallel with package builds, with the goal of unblocking Linux-dependent test jobs earlier by splitting Linux vs Windows/macOS CLI archive builds.
Changes:
- Adds
SkipBundleDeps/BuildBundleDepsOnlybuild switches to decouple bundle-dependency packaging from the mainbuild_packagesjob. - Splits CLI native archive building into separate Linux and Windows/macOS jobs via a new
targetsJSON input. - Simplifies
build-packages.ymlby removing RID-specific NuGet staging/upload logic and skipping bundle deps during package builds.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 4 comments.
| File | Description |
|---|---|
eng/Build.props |
Adds build switches to build only bundle deps or skip them during normal packaging. |
.github/workflows/tests.yml |
Splits CLI archive builds into Linux vs non-Linux and rewires test job dependencies. |
.github/workflows/build-packages.yml |
Skips bundle deps and uploads the full artifacts/packages tree as built-nugets. |
.github/workflows/build-cli-native-archives.yml |
Adds targets input and builds DCP/Dashboard packages locally (instead of downloading). |
Contributor
🎬 CLI E2E Test RecordingsThe following terminal recordings are available for commit
📹 Recordings uploaded automatically from CI run #22791404611 |
Let the CLI archive workflow produce its own Dashboard and DCP bundle dependencies so it can run in parallel with build_packages without waiting on that job. Co-authored-by: Copilot <[email protected]>
Skip redundant extension, Dashboard, DCP, and Aspire.Cli work from build_packages when the CLI archive workflow is already producing those artifacts in parallel. Co-authored-by: Copilot <[email protected]>
Break the CLI archive build into linux and non-linux targets so linux-only consumers can start sooner, and remove the unnecessary dependency on the non-linux archive job from tests_requires_nugets. Co-authored-by: Copilot <[email protected]>
Switch the CLI archive workflow conditionals over to runner.os so they still evaluate correctly after the matrix was reshaped around per-target objects. Co-authored-by: Copilot <[email protected]>
Route requires-nugets tests to the platform-specific CLI archive jobs and teach the matrix splitting script about the per-OS archive keys they now depend on. Co-authored-by: Copilot <[email protected]>
Update the infrastructure tests so they validate the new per-OS requires-nugets keys and compile cleanly against the split archive matrix. Co-authored-by: Copilot <[email protected]>
Drop the unused infra timing and dependency map code from tests.yml now that it no longer reflects the current CI pipeline behavior. Co-authored-by: Copilot <[email protected]>
Upload the RID-specific DCP and Dashboard packages from the CLI archive workflow itself, and remove the dead staging and fan-out logic from build_packages now that those artifacts are no longer produced there. Co-authored-by: Copilot <[email protected]>
Explain why the CLI archive build was decoupled and split by platform, how the workflow now behaves, and what latency benefits the pipeline gets from the change. Co-authored-by: Copilot <[email protected]>
Run the CLI archive workflow alongside build_packages in the specialized test runner so requiresNugets lanes still receive the arch-specific bundle artifacts that run-tests.yml downloads. Co-authored-by: Copilot <[email protected]>
Restrict BuildBundleDepsOnly to the DCP and Dashboard pack projects for the requested TargetRids, and update the Build.props property descriptions to match the actual build behavior. Co-authored-by: Copilot <[email protected]>
davidfowl
approved these changes
Mar 7, 2026
Copilot AI
pushed a commit
that referenced
this pull request
Mar 10, 2026
) * Build CLI archive bundle dependencies independently Let the CLI archive workflow produce its own Dashboard and DCP bundle dependencies so it can run in parallel with build_packages without waiting on that job. Co-authored-by: Copilot <[email protected]> * Trim build_packages work during CLI archive builds Skip redundant extension, Dashboard, DCP, and Aspire.Cli work from build_packages when the CLI archive workflow is already producing those artifacts in parallel. Co-authored-by: Copilot <[email protected]> * Split CLI archive builds by platform Break the CLI archive build into linux and non-linux targets so linux-only consumers can start sooner, and remove the unnecessary dependency on the non-linux archive job from tests_requires_nugets. Co-authored-by: Copilot <[email protected]> * Use runner.os for CLI archive build conditionals Switch the CLI archive workflow conditionals over to runner.os so they still evaluate correctly after the matrix was reshaped around per-target objects. Co-authored-by: Copilot <[email protected]> * Split requires-nugets tests by archive platform Route requires-nugets tests to the platform-specific CLI archive jobs and teach the matrix splitting script about the per-OS archive keys they now depend on. Co-authored-by: Copilot <[email protected]> * Fix infrastructure tests for per-platform archive keys Update the infrastructure tests so they validate the new per-OS requires-nugets keys and compile cleanly against the split archive matrix. Co-authored-by: Copilot <[email protected]> * Remove stale test summary timing scaffolding Drop the unused infra timing and dependency map code from tests.yml now that it no longer reflects the current CI pipeline behavior. Co-authored-by: Copilot <[email protected]> * Route RID-specific NuGets through CLI archive jobs Upload the RID-specific DCP and Dashboard packages from the CLI archive workflow itself, and remove the dead staging and fan-out logic from build_packages now that those artifacts are no longer produced there. Co-authored-by: Copilot <[email protected]> * Document the CI pipeline optimizations Explain why the CLI archive build was decoupled and split by platform, how the workflow now behaves, and what latency benefits the pipeline gets from the change. Co-authored-by: Copilot <[email protected]> * Ensure specialized tests get RID-specific NuGets Run the CLI archive workflow alongside build_packages in the specialized test runner so requiresNugets lanes still receive the arch-specific bundle artifacts that run-tests.yml downloads. Co-authored-by: Copilot <[email protected]> * Scope bundle dependency builds to requested RIDs Restrict BuildBundleDepsOnly to the DCP and Dashboard pack projects for the requested TargetRids, and update the Build.props property descriptions to match the actual build behavior. Co-authored-by: Copilot <[email protected]> --------- Co-authored-by: Copilot <[email protected]>
radical
added a commit
that referenced
this pull request
Mar 10, 2026
) * Build CLI archive bundle dependencies independently Let the CLI archive workflow produce its own Dashboard and DCP bundle dependencies so it can run in parallel with build_packages without waiting on that job. Co-authored-by: Copilot <[email protected]> * Trim build_packages work during CLI archive builds Skip redundant extension, Dashboard, DCP, and Aspire.Cli work from build_packages when the CLI archive workflow is already producing those artifacts in parallel. Co-authored-by: Copilot <[email protected]> * Split CLI archive builds by platform Break the CLI archive build into linux and non-linux targets so linux-only consumers can start sooner, and remove the unnecessary dependency on the non-linux archive job from tests_requires_nugets. Co-authored-by: Copilot <[email protected]> * Use runner.os for CLI archive build conditionals Switch the CLI archive workflow conditionals over to runner.os so they still evaluate correctly after the matrix was reshaped around per-target objects. Co-authored-by: Copilot <[email protected]> * Split requires-nugets tests by archive platform Route requires-nugets tests to the platform-specific CLI archive jobs and teach the matrix splitting script about the per-OS archive keys they now depend on. Co-authored-by: Copilot <[email protected]> * Fix infrastructure tests for per-platform archive keys Update the infrastructure tests so they validate the new per-OS requires-nugets keys and compile cleanly against the split archive matrix. Co-authored-by: Copilot <[email protected]> * Remove stale test summary timing scaffolding Drop the unused infra timing and dependency map code from tests.yml now that it no longer reflects the current CI pipeline behavior. Co-authored-by: Copilot <[email protected]> * Route RID-specific NuGets through CLI archive jobs Upload the RID-specific DCP and Dashboard packages from the CLI archive workflow itself, and remove the dead staging and fan-out logic from build_packages now that those artifacts are no longer produced there. Co-authored-by: Copilot <[email protected]> * Document the CI pipeline optimizations Explain why the CLI archive build was decoupled and split by platform, how the workflow now behaves, and what latency benefits the pipeline gets from the change. Co-authored-by: Copilot <[email protected]> * Ensure specialized tests get RID-specific NuGets Run the CLI archive workflow alongside build_packages in the specialized test runner so requiresNugets lanes still receive the arch-specific bundle artifacts that run-tests.yml downloads. Co-authored-by: Copilot <[email protected]> * Scope bundle dependency builds to requested RIDs Restrict BuildBundleDepsOnly to the DCP and Dashboard pack projects for the requested TargetRids, and update the Build.props property descriptions to match the actual build behavior. Co-authored-by: Copilot <[email protected]> --------- Co-authored-by: Copilot <[email protected]>
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
The main goal of this change is to reduce total PR validation time. Today the workflow serializes more CI work than necessary, which delays when test lanes can begin and stretches the full end-to-end validation path for a pull request.
How
build_packagesby letting the archive workflow build the bundle dependencies it needs itselfbuild_packagesso shared package production and CLI archive production can proceed in parallelrequires_nugetstest lanes by OS so each lane waits only for the artifacts it consumestests.ymldocs/ci/TestingOnCI.mdanddocs/ci/ci-pipeline-optimizations.mdBenefit
Notes
This is workflow and infrastructure work only; it does not change product behavior.
Before
After
Must check before merging