Add win-arm64 and linux-arm64 to CLI native archive build matrix#15599
Add win-arm64 and linux-arm64 to CLI native archive build matrix#15599davidfowl wants to merge 3 commits intorelease/13.2from
Conversation
Add native arm64 build targets to the CI pipeline so the dogfood script and release bundles include arm64 CLI binaries: - win-arm64 on windows-11-arm runner - linux-arm64 on ubuntu-24.04-arm runner Updates build-cli-native-archives.yml default matrix and adds per-OS build jobs in tests.yml following the existing pattern. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 15599Or
iex "& { $(irm https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 15599" |
There was a problem hiding this comment.
Pull request overview
Extends the CI workflows to produce native Aspire CLI archive builds for additional ARM64 platforms, so release/dogfood bundles include Windows/Linux ARM64 binaries alongside existing x64/macOS builds.
Changes:
- Add
linux-arm64andwin-arm64targets to the reusable native-archive workflow’s default build matrix. - Add corresponding ARM64 archive jobs to
tests.ymland include them in the final “results” gate.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
.github/workflows/tests.yml |
Adds Linux/Windows ARM64 native CLI archive jobs and wires them into the final results job dependencies. |
.github/workflows/build-cli-native-archives.yml |
Expands the default targets matrix to include linux-arm64 and win-arm64 native archive builds. |
Comments suppressed due to low confidence (1)
.github/workflows/tests.yml:74
- In the
targetsJSON,osis set towindows-latestbut the runner label iswindows-11-arm. Ifosis intended to be a display value, this currently hides that the build is running on Windows ARM64 and can lead to ambiguous/duplicate job names in the called workflow. Consider aligningoswith the runner/actual platform, or relying onrids/runnerfor display in the reusable workflow.
uses: ./.github/workflows/build-cli-native-archives.yml
with:
versionOverrideArg: ${{ inputs.versionOverrideArg }}
targets: '[{"os": "windows-latest", "runner": "windows-11-arm", "rids": "win-arm64"}]'
| {"os": "ubuntu-latest", "runner": "8-core-ubuntu-latest", "rids": "linux-x64"}, | ||
| {"os": "ubuntu-latest", "runner": "ubuntu-24.04-arm", "rids": "linux-arm64"}, | ||
| {"os": "windows-latest", "runner": "windows-latest", "rids": "win-x64"}, | ||
| {"os": "windows-latest", "runner": "windows-11-arm", "rids": "win-arm64"}, | ||
| {"os": "macos-latest", "runner": "macos-latest", "rids": "osx-arm64"} |
There was a problem hiding this comment.
The default targets array now has multiple entries with the same os value (ubuntu-latest for both linux-x64/linux-arm64 and windows-latest for both win-x64/win-arm64). Since the matrix job name is Build CLI (${{ matrix.targets.os }}), this will create duplicate job names in the Actions UI, making it hard to tell which RID/runner failed. Consider changing the job name to include ${{ matrix.targets.rids }} (and/or ${{ matrix.targets.runner }}), or make the os field unique per target (or drop it if it’s only used for display).
There was a problem hiding this comment.
Fixed — changed job name to Build CLI (${{ matrix.targets.rids }}) so each target gets a unique name like "Build CLI (linux-arm64)".
| uses: ./.github/workflows/build-cli-native-archives.yml | ||
| with: | ||
| versionOverrideArg: ${{ inputs.versionOverrideArg }} | ||
| targets: '[{"os": "ubuntu-latest", "runner": "ubuntu-24.04-arm", "rids": "linux-arm64"}]' | ||
|
|
There was a problem hiding this comment.
In the targets JSON, os is set to ubuntu-latest while the actual runner label is ubuntu-24.04-arm. Since the reusable workflow currently uses matrix.targets.os in the job name, this ends up mislabeling the ARM64 build as “ubuntu-latest” (and can contribute to duplicate names). Consider setting os to match the runner/actual platform, or updating the reusable workflow to use rids/runner for display instead of os.
This issue also appears on line 70 of the same file.
There was a problem hiding this comment.
Fixed — the reusable workflow job name now uses matrix.targets.rids instead of matrix.targets.os, so it displays correctly regardless of the os field value.
Address review feedback: with multiple targets sharing the same 'os' value, the job name 'Build CLI (ubuntu-latest)' appeared twice. Switch to matrix.targets.rids for unique names like 'Build CLI (linux-arm64)'. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The RID computation hardcoded x64 for Linux and Windows, which would download wrong-arch NuGet packages if tests ever run on arm64 runners. Use runner.os + runner.arch to correctly map to the target RID. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
🎬 CLI E2E Test Recordings — 51 recordings uploaded (commit View recordings
📹 Recordings uploaded automatically from CI run #23578848784 |
| default: >- | ||
| [ | ||
| {"os": "ubuntu-latest", "runner": "8-core-ubuntu-latest", "rids": "linux-x64"}, | ||
| {"os": "ubuntu-latest", "runner": "ubuntu-24.04-arm", "rids": "linux-arm64"}, |
There was a problem hiding this comment.
Do you have a plan for Grpc.Tools in Linux ARM64?
I believe the issue is this one: grpc/grpc#38538. Changing Grpc.Tools to version 2.68.1 should fix it. I don't believe there should be any negative side effect of using an older version, but some basic smoke testing of the dashboard after making the change would be good.
Alternatively, Grpc.Tools could be moved out of the build pipeline. Have the proto files in their own project, build a NuGet package, publish it, and then have dashboard/apphost projects reference the NuGet package.
There was a problem hiding this comment.
I talked with gRPC person about this and a fix - grpc/grpc#41543 - might be in the latest preview. Try 2.80.0-pre1 and see whether that fixes it.
Description
Adds
win-arm64andlinux-arm64native CLI archive builds to the CI pipeline, and fixes architecture detection for test runners.Currently only
linux-x64,win-x64, andosx-arm64are built, which means the dogfood script and release bundles have no arm64 binaries for Windows or Linux.Changes
build-cli-native-archives.ymllinux-arm64target onubuntu-24.04-armrunnerwin-arm64target onwindows-11-armrunnertests.ymlbuild_cli_archive_linux_arm64andbuild_cli_archive_windows_arm64jobs (following existing per-OS pattern)resultsfinal status checkrun-tests.ymlrunner.archin addition torunner.os, so arm64 runners download the correct architecture-specific NuGet packages instead of always assuming x64The new jobs run in parallel with existing builds, so they don't increase overall CI wall time.
Related to #15529 (cross-compiled CLI bundles missing DCP).
Checklist