Skip to content

Split x64/arm64 builds into parallel pipeline stages#14497

Merged
benhillis merged 5 commits into
masterfrom
user/benhill/split_pipeline
Apr 9, 2026
Merged

Split x64/arm64 builds into parallel pipeline stages#14497
benhillis merged 5 commits into
masterfrom
user/benhill/split_pipeline

Conversation

@benhillis

@benhillis benhillis commented Mar 21, 2026

Copy link
Copy Markdown
Member

Restructure the CI/CD pipeline to build x64 and arm64 in parallel instead of sequentially, reducing end-to-end build time.

Pipeline shapes

PR: build_x64 ∥ build_arm64 → test (tests use installer.msix directly)
Nightly: build_x64 ∥ build_arm64 → package → test (dev-cert signed bundle)
Release: build_x64 ∥ build_arm64 → package → test (ESRP-signed bundle)

Key changes

  • Extract shared build-job.yml template parameterized by platform
  • Add package-stage.yml that creates msixbundle from both platform artifacts, ESRP-signs for release, dev-cert signs for nightly
  • PR tests run immediately after x64 build using installer.msix (no package stage, no bundle needed)
  • Release/nightly tests wait for the package stage and test the real signed bundle that gets published
  • CloudTest configs are parameterized: release tests pull the bundle from the [package] artifact, PR tests use installer.msix from [drop]
  • arm64 + formatting checks always run in parallel with x64 but don't block the PR test gate
  • CodeQL runs in the arm64 stage (off the critical path)
  • flight-stage and nuget-stage updated for new stage names

Copilot AI left a comment

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.

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.

Comment thread .pipelines/build-stage.yml Outdated
Comment thread .pipelines/package-stage.yml
Comment thread .pipelines/package-stage.yml Outdated
Comment thread .pipelines/flight-stage.yml Outdated
Copilot AI review requested due to automatic review settings March 21, 2026 19:49

Copilot AI left a comment

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.

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

Comment thread .pipelines/build-stage.yml Outdated
Comment thread .pipelines/build-stage.yml Outdated
@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

Copilot AI left a comment

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.

Pull request overview

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

Comment thread tools/test/test-setup.ps1 Outdated

Copilot AI left a comment

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.

Pull request overview

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

Comment thread cloudtest/TestGroup.xml.in Outdated
Comment thread .pipelines/build-stage.yml
Comment thread .pipelines/flight-stage.yml Outdated
Comment thread tools/test/test-setup.ps1 Outdated
Comment thread cloudtest/TestGroup.xml.in Outdated
Copilot AI review requested due to automatic review settings March 23, 2026 17:18

Copilot AI left a comment

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.

Pull request overview

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

Comment thread .pipelines/build-stage.yml Outdated
Comment thread .pipelines/build-stage.yml
Comment thread .pipelines/build-stage.yml Outdated
Comment thread cloudtest/TestGroup.xml.in Outdated
Comment thread .pipelines/build-stage.yml Outdated
@benhillis benhillis marked this pull request as draft March 23, 2026 18:06
@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

Copilot AI left a comment

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.

Pull request overview

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

Comment thread .pipelines/build-stage.yml Outdated

Copilot AI left a comment

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.

Pull request overview

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

Comment thread .pipelines/test-stage.yml
Comment thread cloudtest/TestGroup.xml.in
@benhillis benhillis force-pushed the user/benhill/split_pipeline branch from 081385e to 45e246b Compare March 31, 2026 17:05
Copilot AI review requested due to automatic review settings March 31, 2026 17:10

Copilot AI left a comment

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.

Pull request overview

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

Comment thread cloudtest/CMakeLists.txt
Comment thread cloudtest/CMakeLists.txt Outdated
@benhillis benhillis marked this pull request as ready for review March 31, 2026 19:35
@benhillis benhillis force-pushed the user/benhill/split_pipeline branch from 44e026c to bc7c330 Compare March 31, 2026 19:37
Copilot AI review requested due to automatic review settings April 3, 2026 13:59

Copilot AI left a comment

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.

Pull request overview

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

Comment thread cloudtest/CMakeLists.txt Outdated
OneBlue
OneBlue previously approved these changes Apr 6, 2026

@OneBlue OneBlue left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

LGTM, minor comments

Comment thread .pipelines/package-stage.yml
Comment thread .pipelines/build-job.yml Outdated
Comment thread cloudtest/TestMap.xml.in Outdated
Copilot AI review requested due to automatic review settings April 6, 2026 23:49
@benhillis benhillis force-pushed the user/benhill/split_pipeline branch from 75d5df1 to bde15b3 Compare April 6, 2026 23:49

Copilot AI left a comment

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.

Pull request overview

Copilot reviewed 13 out of 13 changed files in this pull request and generated 3 comments.

Comment thread CMakeLists.txt Outdated
Comment thread .pipelines/build-job.yml
Comment thread cloudtest/CMakeLists.txt
@benhillis

Copy link
Copy Markdown
Member Author

@OneBlue This is ready for another look when you get a chance — I've addressed your earlier feedback. Thanks!

OneBlue
OneBlue previously approved these changes Apr 8, 2026

@OneBlue OneBlue left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

LGTM. Minor comments

Comment thread .pipelines/package-stage.yml Outdated
Comment thread CMakeLists.txt Outdated
Comment thread cloudtest/CMakeLists.txt
Copilot AI review requested due to automatic review settings April 8, 2026 22:02
@benhillis benhillis force-pushed the user/benhill/split_pipeline branch from 46713f4 to 200ee70 Compare April 8, 2026 22:02

Copilot AI left a comment

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.

Pull request overview

Copilot reviewed 13 out of 13 changed files in this pull request and generated 3 comments.

Comment thread CMakeLists.txt
Comment thread .pipelines/package-stage.yml
Comment thread .pipelines/build-job.yml
Ben Hillis and others added 5 commits April 9, 2026 10:08
Restructure the CI/CD pipeline to build x64 and arm64 in parallel
instead of sequentially, reducing end-to-end build time.

Pipeline shapes:
- PR: build_x64 ∥ build_arm64 → test (uses installer.msix directly)
- Nightly: build_x64 ∥ build_arm64 → package → test (dev-cert bundle)
- Release: build_x64 ∥ build_arm64 → package → test (ESRP-signed bundle)

Key changes:
- Extract shared build-job.yml template parameterized by platform
- Add package-stage.yml that creates msixbundle from both platform
  artifacts, ESRP-signs for release, dev-cert signs for nightly
- PR tests run immediately after x64 build using installer.msix
  (no package stage, no bundle needed)
- Release/nightly tests wait for the package stage and test the real
  signed bundle that gets published
- CloudTest configs are parameterized: release tests pull the bundle
  from the [package] artifact, PR tests use installer.msix from [drop]
- arm64 + formatting checks always run in parallel with x64 but don't
  block the PR test gate
- CodeQL runs in the arm64 stage (off the critical path)
- flight-stage and nuget-stage updated for new stage names
These tasks are already wrapped in compile-time conditionals which
prevent them from being added to the pipeline definition for
non-release builds. The runtime condition checks can never evaluate
to false at that point, so they are pure noise.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Remove wslcsdk NuGet staging (wslc is not in master)
- Always include [package] provider in TestMap.xml.in instead of
  conditionally injecting via PACKAGE_PROVIDER_BLOCK cmake variable.
  PR builds simply use [drop] as TEST_PACKAGE_PROVIDER; the [package]
  provider exists but is unused.
- Add BUNDLE_ONLY cmake option so the package pipeline stage reuses
  cmake's existing bundle target instead of forking makeappx logic.
  This locks the SDK version via cmake (CMAKE_SYSTEM_VERSION) and
  keeps bundle creation logic in one place (msixinstaller/CMakeLists.txt).
  The pipeline now copies msix files to expected paths, runs a fast
  cmake configure with -DBUNDLE_ONLY=TRUE, and builds the bundle target.
- Remove dead NuGet binary restore step in package stage.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Fix PACKAGE_VERSION regex: escape dots so only A.B.C.D is accepted
- Consolidate CMake defaults (build type, config types, output dir)
  before BUNDLE_ONLY block to avoid duplication
- Nightly tests now use the full bundle from the package stage instead
  of installer.msix (new INCLUDE_PACKAGE_STAGE cmake variable)
- Package stage reuses version output from build stage instead of
  recomputing it

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@benhillis benhillis force-pushed the user/benhill/split_pipeline branch from 200ee70 to e08332f Compare April 9, 2026 17:08

@OneBlue OneBlue left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

LGTM, one minor comment

Comment thread .pipelines/package-stage.yml
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.

3 participants