Skip to content

Split x64/arm64 builds into parallel stages#14497

Draft
benhillis wants to merge 5 commits intomasterfrom
user/benhill/split_pipeline
Draft

Split x64/arm64 builds into parallel stages#14497
benhillis wants to merge 5 commits intomasterfrom
user/benhill/split_pipeline

Conversation

@benhillis
Copy link
Member

@benhillis benhillis commented Mar 21, 2026

Restructure the CI pipeline to run x64 and arm64 builds in parallel, allowing tests to start as soon as the x64 build finishes without waiting for arm64. This will speed up the PR pipeline by about 10 minutes.

Pipeline flow:
checks -> build_x64 -> test
-> build_arm64
Both builds -> package -> flight/nuget (release/nightly only)

Key changes:

  • build-stage.yml: Split into checks, build_x64, and build_arm64 stages. Checks gate both builds. Builds run in parallel after checks pass. PR and release use identical build steps (only signing differs).
  • package-stage.yml: New stage that downloads both platform artifacts, creates msixbundle/appxupload, packs NuGet packages. Only used in release/nightly pipelines.
  • test-stage.yml: Depends on build_x64 only.
  • TestGroup.xml.in: Tests install via x64 MSI instead of msixbundle, removing the cross-platform dependency.
  • test-setup.ps1: Support MSI install alongside existing MSIX.
  • flight-stage.yml: Depends on test + package, downloads from package stage artifact.
  • nuget-stage.yml: Depends on package + test, downloads from package stage artifact.
  • PR pipelines don't include package stage (not needed).
  • All consuming pipelines updated for new stage topology.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR restructures the Azure Pipelines build flow to run x64 and arm64 builds in parallel so test execution can start as soon as the x64 build finishes, while packaging waits for both architectures.

Changes:

  • Split the monolithic build stage into parallel build_x64 and build_arm64 stages, and update test dependencies to only wait for build_x64.
  • Introduce a new package stage to produce the msixbundle/appxupload and NuGet artifacts after both builds complete.
  • Update CloudTest setup to install and test using the x64 MSI instead of the combined msixbundle.

Reviewed changes

Copilot reviewed 11 out of 11 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
tools/test/test-setup.ps1 Adds MSI install/uninstall support alongside existing MSIX setup logic for tests.
cloudtest/TestGroup.xml.in Switches CloudTest inputs from msixbundle to x64 MSI.
.pipelines/build-stage.yml Splits build into parallel x64/arm64 stages and updates artifact outputs.
.pipelines/package-stage.yml New packaging stage to bundle outputs from both builds and create NuGet/appxupload artifacts.
.pipelines/test-stage.yml Makes tests depend only on build_x64.
.pipelines/flight-stage.yml Updates flight stage dependencies and artifact source to the new package stage.
.pipelines/nuget-stage.yml Updates NuGet publish stage to depend on/package artifacts from the new package stage.
.pipelines/wsl-build-pr.yml Wires the new package stage into the PR pipeline.
.pipelines/wsl-build-pr-onebranch.yml Wires the new package stage into the OneBranch PR pipeline.
.pipelines/wsl-build-nightly-onebranch.yml Wires the new package stage into the nightly OneBranch pipeline.
.pipelines/wsl-build-release-onebranch.yml Wires the new package stage into the release OneBranch pipeline.

Copilot AI review requested due to automatic review settings March 21, 2026 19:49
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated 2 comments.

Comments suppressed due to low confidence (1)

.pipelines/build-stage.yml:60

  • In the new checks stage, the first job is declared as - job: without an identifier. Azure Pipelines requires each job to have a name (e.g., job: checks) and this will fail YAML compilation as-is.
    jobs:
      - job:

        displayName: "Formatting & localization checks"
        timeoutInMinutes: 30

@benhillis benhillis force-pushed the user/benhill/split_pipeline branch 2 times, most recently from 3f8148b to ee56eac Compare March 21, 2026 20:25
Copilot AI review requested due to automatic review settings March 21, 2026 20:25
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated 1 comment.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated 5 comments.

Copilot AI review requested due to automatic review settings March 23, 2026 17:18
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 5 comments.

@benhillis benhillis marked this pull request as draft March 23, 2026 18:06
Ben Hillis added 4 commits March 23, 2026 13:16
Restructure the CI pipeline to run x64 and arm64 builds in parallel,
allowing tests to start as soon as the x64 build finishes without
waiting for arm64.

Pipeline flow:
  checks -> build_x64  -> test
         -> build_arm64
  Both builds -> package -> flight/nuget (release/nightly only)

Key changes:
- build-stage.yml: Split into checks, build_x64, and build_arm64
  stages. Checks gate both builds. Builds run in parallel after
  checks pass. PR and release use identical build steps (only
  signing differs).
- package-stage.yml: New stage that downloads both platform
  artifacts, creates msixbundle/appxupload, packs NuGet packages.
  Only used in release/nightly pipelines.
- test-stage.yml: Depends on build_x64 only.
- TestGroup.xml.in: Tests install via x64 MSI instead of
  msixbundle, removing the cross-platform dependency.
- test-setup.ps1: Support MSI install alongside existing MSIX.
- flight-stage.yml: Depends on test + package, downloads from
  package stage artifact.
- nuget-stage.yml: Depends on package + test, downloads from
  package stage artifact.
- PR pipelines don't include package stage (not needed).
- All consuming pipelines updated for new stage topology.
@benhillis benhillis force-pushed the user/benhill/split_pipeline branch from 168b58b to 83741bf Compare March 23, 2026 20:17
@benhillis benhillis requested a review from Copilot March 23, 2026 20:21
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated 2 comments.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants