Auto-select arm64 Windows helper image on ARM64 hosts
What does this MR do?
Makes GitLab Runner architecture-aware when selecting the Windows helper image. The docker-windows executor now derives the helper image from both the host's Windows version and its CPU architecture (x86_64 or arm64), so a Windows Server 2025 (24H2) ARM64 host automatically receives the arm64 helper image with no manual helper_image override required.
This is MR 5 of 5 in the Windows ARM64 support plan and closes the parent issue #39182 (closed).
Key changes in helpers/container/helperimage/windows_info.go:
- Replace the static
helperImages/prebuiltImagesmaps (which hard-codedx86_64and reused theservercore21H2base image forV24H2) with anltscmap (V1809 → ltsc2019,V21H2 → ltsc2022,V24H2 → ltsc2025). The image tag and prebuilt bundle name are now derived by pattern from the version and architecture. - Normalise the architecture reported by the Docker daemon / config (
amd64,aarch64, etc.) to the canonicalx86_64/arm64tokens. Any unrecognized or unspecified architecture resolves tox86_64, preserving the pre-existing behaviour. - Stop reusing the 21H2 base image for 24H2 hosts —
V24H2now maps toltsc2025. - For
arm64on Windows Server 2019 / 2022 — where Microsoft publishes no arm64 base image — fall back to thex86_64helper image, matching the behaviour before this change rather than introducing a new error path. Only Windows Server 2025 (24H2) resolves to anarm64image.
Shared architecture constants are moved from linux_info.go to info.go so both OS builders can use them.
Why was this MR needed?
Previously the runner always served the x86_64 helper image on Windows and mapped Windows Server 2025 (24H2) back to the 21H2 base image. ARM64 customers had to set helper_image manually as a workaround during the #39182 (closed) rollout. With the native arm64 gitlab-runner.exe now available (!6495 (merged)), the runner can detect the host architecture and pick the correct image automatically.
Dependency
Assumes !6717 (merged) will be merged in (the docs reflect these changes too)
What are the relevant issue numbers?
Closes #39419 (closed), closes #39182 (closed).