CI/CD for Windows on Arm: GitHub Actions windows-11-arm and Alternatives
Updated Jun 5, 2026
As of 2026 you can build and test Windows on Arm in CI without owning Arm hardware. GitHub ships a hosted Arm64 Windows runner, and for the cases it doesn’t cover there are clean fallbacks.
The state of Arm CI in 2026
GitHub’s windows-11-arm hosted runner — a Windows 11 desktop Arm64 image with preinstalled tooling, 4 vCPU standard — went generally available for public repositories on August 7, 2025, free for public repos. That makes native Arm64 build-and-test a first-class CI target, not a self-hosted side project.
The gotcha that will bite you
windows-11-arm only works in public repositories. In a private repo the job fails outright. For private projects you need larger/paid Arm runners or a self-hosted Arm agent. Check this before you wire it into a private pipeline.
A minimal working workflow
name: build-arm64
on: [push, pull_request]
jobs:
arm64:
runs-on: windows-11-arm # public repos only
steps:
- uses: actions/checkout@v4
- uses: microsoft/setup-msbuild@v2
- name: Build ARM64
run: msbuild MyApp.sln /p:Platform=ARM64 /p:Configuration=Release
- name: Test on-target
run: ctest --output-on-failure
The win here is that build and test run on real Arm64 — your test suite exercises native code paths, not emulated ones.
Cross-compile vs native: pick per stage
- Cross-compile on x64 (
windows-latest+/p:Platform=ARM64) is faster and cheaper, but you can’t run the resulting Arm64 binaries on the x64 runner — no native test execution. - Native on
windows-11-armbuilds and runs tests on-target.
The pragmatic matrix: cross-compile the build on x64 for speed, then a separate windows-11-arm job that builds and runs the test suite. For driver or anti-cheat code, on-target testing isn’t optional — emulation can’t exercise kernel components (why).
Private repos and other platforms
For private repositories: GitHub’s larger Arm runners (paid), or a self-hosted Arm agent on a retail Snapdragon X laptop or a cloud Arm Windows VM. Azure DevOps can use Arm-based VMs (Ampere/Cobalt) as self-hosted agents.
Close the loop
Once your pipeline publishes the Arm64 build to winget, the Microsoft Store, or GitHub Releases, compatibility trackers detect it — ours re-scans winget and GitHub release metadata and flips your entry to native automatically. Pair this guide with the porting roadmap (what to build) and watch the native-share trend you’re contributing to.