Add native windows/arm64 helper binary build target
What does this MR do?
Adds a native windows/arm64 build target for gitlab-runner-helper.exe and publishes the resulting binary to the release directory alongside the existing windows/amd64 helper.
Changes
Makefile.runner_helper.mk— Addgitlab-runner-helper.windows-arm64.exeto theBINARIESlist so the helper is compiled natively for Windows arm64 alongside the existingwindows-amd64target.ci/release_dir— Mapout/binaries/gitlab-runner-helper/gitlab-runner-helper.windows-arm64.exe→out/release/binaries/gitlab-runner-helper/gitlab-runner-helper.arm64-windows.exeso the new binary is included in S3 releases following the same<arch>-windows.exenaming convention as the amd64 helper.
The native arm64 main binary (gitlab-runner.exe) is already covered by !6495 (merged) (merged 2026-03-11), so this MR scopes down to just the helper executable as the issue allows.
Why was this MR needed?
The parent issue #39182 (closed) reported that running CI/CD jobs on Windows ARM64 with the docker-windows executor fails because amd64-based Windows container images cannot load on ARM64 hosts (hcs::System::Start ... 0xc0370106). The first slice, !6033 (merged), shipped LTSC2025 and LTSC2025-arm64 helper images as a stop-gap, but the arm64 helper image still bundles the amd64 gitlab-runner-helper.exe and relies on Windows amd64-on-arm64 emulation to run it.
That stop-gap has known limits:
- Emulation has a runtime cost and adds a moving part that can break with future Windows base-image updates.
nanoserverdoes not support amd64 emulation at all, so we cannot ship ananoserver:ltsc2025-arm64helper image until a native binary exists.- The runner currently misreports its host arch as amd64 on arm64 hosts; fixing detection requires a native arm64 main binary to compare against.
This MR produces the native arm64 helper binary that unblocks the proper fix. It is MR 2 of the 5-MR plan agreed in #39182, and is a prerequisite for MR 3 (swap the bundled binary), MR 4 (nanoserver arm64), and MR 5 (host-arch detection).
Closes #39416 (closed).
Out of scope (per parent plan)
- Swapping the bundled binary in the arm64 helper image — MR 3.
nanoserver:ltsc2025-arm64/ltsc2025-amd64helper images — MR 4.- Runtime architecture detection in
gitlab-runner.exe— MR 5. baseImage25H2constant inhelpers/container/helperimage/windows_info.go— deferred to MR 5 (review note)..instance-windows-2025-arm64runner tags,windows25H2job templates, andci/.test-failures.servercore25H2.txt— deferred pending an arm64 Windows runner manager.
What's the best way to test this MR?
make helper-binproducesout/binaries/gitlab-runner-helper/gitlab-runner-helper.windows-arm64.exe.- The
ci/release_dirmapping places the binary atout/release/binaries/gitlab-runner-helper/gitlab-runner-helper.arm64-windows.exefor S3 upload.
What are the relevant issue numbers?
- Closes #39416 (closed)
- Parent issue: #39182 (closed)
- Stop-gap helper images: !6033 (merged)
- Native arm64 main binary: !6495 (merged)
- Base-images dependency: base-images!88, base-images!111