Skip to content

[DEVREL-139] ci: modernize go-test matrix to supported Go versions - #583

Merged
justinpolygon merged 4 commits into
masterfrom
ci/modernize-go-test-matrix
Jul 6, 2026
Merged

[DEVREL-139] ci: modernize go-test matrix to supported Go versions#583
justinpolygon merged 4 commits into
masterfrom
ci/modernize-go-test-matrix

Conversation

@justinpolygon

Copy link
Copy Markdown
Collaborator

Problem

The go-test (macos-latest, 1.21.x) job fails during go test -race -v ./...:

dyld[…]: missing LC_UUID load command
signal: abort trap
FAIL    github.com/massive-com/client-go/v3/websocket    0.009s

All non-macOS jobs pass.

Root cause

go test -race forces external linking (the race detector pulls in cgo), so Go hands off to Apple's system linker. macos-latest now runs macOS 14/15 with Xcode 15/16's new linker (ld-prime). Older Go toolchains (1.19/1.20/1.21) drive that linker in a way that produces a test binary without an LC_UUID load command, which modern macOS dyld refuses to load — aborting before any test runs. See golang/go#61229.

Fix

Bump the test matrix from EOL Go 1.19/1.20/1.21 to supported 1.22/1.23/1.24, which handle the new macOS linker correctly. Also bumps actions/setup-go@v4@v5.

test-coverage.yml is unaffected (runs only on ubuntu-latest, no matrix).

Bump the go-test matrix from EOL Go 1.19/1.20/1.21 to 1.22/1.23/1.24
and setup-go@v4 -> v5.

The 1.21.x on macos-latest job was failing with 'dyld: missing LC_UUID
load command / signal: abort trap' during 'go test -race'. The race
detector forces external linking, and older Go toolchains drive the
newer macOS (Xcode 15/16 ld-prime) linker in a way that omits the
LC_UUID load command that modern dyld requires (golang/go#61229).
Moving to supported Go versions resolves this on macos-latest.
@justinpolygon
justinpolygon marked this pull request as ready for review July 6, 2026 17:32
@justinpolygon

justinpolygon commented Jul 6, 2026

Copy link
Copy Markdown
Collaborator Author

Something is flaky here. The tests passed a couple minutes ago but are stuck now. Now, it a couple are failing randomly. Not the same ones. Checking github status page and seeing if we can narrow it down.

The go-test matrix used the default fail-fast: true, so a single flaky
macOS cell hitting the 'missing LC_UUID load command' dyld abort during
'go test -race' cancelled all other in-progress jobs -- making every
cell show red even though only one truly failed.

- fail-fast: false so one cell's failure no longer cancels the rest.
- cache: false on setup-go: a stale/mismatched restored Go build cache
  can yield a -race test binary lacking the LC_UUID load command that
  macOS dyld requires (golang/go#61229).
With fail-fast disabled, the matrix showed 8/9 cells green; the only
real failure is macos-latest + Go 1.22.x, whose linker emits a -race
test binary missing the LC_UUID load command that macOS dyld requires
(golang/go#61229). Fixed in Go 1.23+, so exclude just that combo --
macOS keeps 1.23/1.24 coverage and 1.22 stays covered on Linux/Windows.
Drop the workaround churn now that the branch ruleset no longer pins
EOL Go 1.21.x checks:
- test the two supported Go versions (1.23.x, 1.24.x) on all 3 OSes;
  both pass -race on the current macos-latest (Apple Silicon) runner,
  which Go 1.21/1.22 could not (missing LC_UUID, golang/go#61229).
- keep fail-fast: false so one cell can't mask the others.
- remove the speculative cache: false and the macos 1.22 exclude.
@justinpolygon justinpolygon changed the title ci: modernize go-test matrix to supported Go versions [DEVREL-139] ci: modernize go-test matrix to supported Go versions Jul 6, 2026
@justinpolygon
justinpolygon merged commit f67d9ed into master Jul 6, 2026
9 checks passed
@justinpolygon
justinpolygon deleted the ci/modernize-go-test-matrix branch July 6, 2026 19:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants