Skip to content

Build and test the arm64 targets: nothing on the push path compiles for arm64, and no arm64 Linux/Windows leg runs #681

Closed

Description

@David-Noble-at-work

Tracking issue for docs/plans/arm64-build-and-test-matrix.md, which lands with the PR that
closes this. Two build/CI chores.

1. Nothing on the push path compiles for arm64

quality-gate runs make build (host only — linux/amd64 on ubuntu-latest) and
make build-all, which is:

for os in linux darwin windows; do GOOS=$$os go build ./...; done

That sweeps GOOS at fixed GOARCH. Meanwhile goreleaser ships
[linux, darwin, windows] × [amd64, arm64] — all six. So an arm64-only break (a _arm64.go
file, an arch-specific assumption) surfaces at release rather than at review.

ALL_PLATFORMS already names all six and make build PLATFORM=all already produces them. CI
simply never asked. The Makefile documents why it is cheap: the codebase is pure Go, zero
import "C", so one host links the whole matrix with GOOS/GOARCH alone — ~41s against ~13s
host-only.

2. Linux and Windows arm64 are never executed

test and scenario both run [ubuntu-latest, macos-latest, windows-latest] — three of the
five runnable pairs. darwin/arm64 has been covered all along, since macos-latest is Apple
Silicon; linux/arm64 and windows/arm64 are not covered at all.

arm64 standard runners reached GA for private repositories on 2026-01-29 and are free-tier
eligible, so the blocker that existed when platform-test-matrix.md was written is gone.

Cross-compiling proves the code builds for a target. A native runner proves it runs there.
Neither substitutes for the other.

Constraints that shape the work

  • No -latest alias exists for arm64. GitHub publishes arm64 runners as version-pinned
    labels only. ubuntu-24.04-arm is chosen because ubuntu-latest is still Ubuntu 24.04 and
    ubuntu-26.04-arm is a preview image — matching versions means the new leg varies
    architecture alone.
  • Go's race detector does not support windows/arm64. That leg runs make test instead of
    make test-race; the full suite still runs, only race detection is absent. linux/arm64 is
    supported and runs -race unchanged.
  • The Windows pair cannot be version-matched. windows-latest is Windows Server 2025,
    windows-11-arm is a client OS, and no Windows Server arm64 runner exists.

Follow-on

Phase 4 of platform-test-matrix.md — the ruleset change adding test (…) contexts to
12426847 — must now name five contexts per job, not three. Requiring three of five would
leave both arm64 legs advisory while the rest gate: a gate that looks complete and is not. That
plan is updated in this PR, but the ruleset change itself remains its phase 4, unclaimed here.

Note

This PR is the first exercise of the legs it adds. Its own test (ubuntu-24.04-arm) and
test (windows-11-arm) runs are the phase-2 triage data — failures there are findings to file,
not necessarily blockers on the PR.

Activity

  1. David-Noble-at-work commented on Aug 25, 2026

    @David-Noble-at-work
    ContributorAuthor

    Finding from this work: #684 — git on windows-11-arm rejects NUL as a config path.

    The first CI run including the new arm64 legs failed both of them. Four tests, one cause: two
    test helpers set GIT_CONFIG_GLOBAL/GIT_CONFIG_SYSTEM to os.DevNull, which is "NUL" on
    Windows, and that image's git refuses to open it as a config file. The identical command succeeds
    on windows-latest — a property of the image's git, not of the architecture, which is exactly why
    it was invisible until windows/arm64 joined the matrix.

    Fixed in #682 (9ad98fa1) by pointing both at an empty regular file. Filed separately as #684
    because the guidance outlives the fix: os.DevNull is correct as a write target on Windows and
    wrong as a git config path, and the two look identical at the call site.

    This is the matrix earning its keep on its first run — the leg found a real defect that three
    platforms had been hiding.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Area:TestingTest coverage and verificationtaskImplementation work item

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions