Go 1.24 leaves the GitHub Actions runner images on November 18, 2026: the default go becomes 1.26, and golangci-lint v1.64.8 runs out of memory
The runner images team has announced the change in runner-images #15253. Starting no earlier than November 18, 2026, Go 1.24 is removed from the tool cache, Go 1.27 is added, and the go on PATH moves from 1.24 to 1.26 on Ubuntu 22.04, Ubuntu 24.04 and all Windows images. The start can shift by a few days, and the rollout then takes 2 to 3 days to reach all regions. Ubuntu 26.04 already has Go 1.26 as its default, and macOS images have no default Go, so there only the tool cache changes. Microsoft-hosted agents in Azure Pipelines get the same images.
Which jobs change
- A job that runs
gowithoutactions/setup-goonubuntu-22.04,ubuntu-24.04or a Windows runner builds and tests with Go 1.26 instead of 1.24. - A job with
actions/setup-gobut nogo-versionorgo-version-filedoes the same: setup-go logs "go-version input was not specified. The action will try to use pre-installed version." and uses the go onPATH. - A job that asks for 1.24 (
go-version: '1.24', ago.modthat saysgo 1.24.xthroughgo-version-file, or the GoTool@0 task in Azure Pipelines) still gets 1.24, but downloads it during the run instead of taking it from the tool cache. The setup step gets slower and needs the network. - A step that reads
GOROOT_1_24_X64,GOROOT_1_24_ARM64orGOROOT_1_24_AARCH64no longer finds the variable. - A job that already pins Go 1.25, 1.26 or 1.27 is not affected.
To see what a job uses today, print it in a step:
- run: |
which go
go version
go env GOROOT GOTOOLCHAIN
golangci-lint v1.64.8 and the runner shutdown
The change that fails hardest is in lint jobs. golangci-lint v1.64.8 was built with Go 1.24.1, and when it runs with Go 1.26 on PATH its memory grows without limit. The maintainers reproduced it on Ubuntu 26.04, where the default is already 1.26 (runner-images #15179): with Go 1.26 it reached 15 GB after about 70 seconds and filled the 3 GB of swap, and the runner was lost; with Go 1.24 it peaked at 2.5 GB and passed in about 4 minutes. The job ends with "The runner has received a shutdown signal", with no out-of-memory message and no exit code from golangci-lint. From November 18 the same happens on Ubuntu 22.04, Ubuntu 24.04 and Windows to lint jobs that run golangci-lint v1.64.8 with whatever go the image has.
To see which Go your golangci-lint was built with, run golangci-lint version; the line says "built with go1.24.1" or similar.
- Move to golangci-lint v2. On the same repository and Go 1.26, v2.15.0 peaked at 3 GB and finished in under 3 minutes. The configuration file changes between v1 and v2;
golangci-lint migrateconverts it. golangci-lint-action v7 and later run v2 only:- uses: actions/setup-go@v6 with: go-version-file: go.mod - uses: golangci/golangci-lint-action@v9 with: version: v2.15.0 - Pinning Go 1.24 in the lint job (
go-version: '1.24') is the stopgap the maintainers suggest. After November 18 that Go is downloaded in every run, and the Go team no longer supports 1.24, so plan the move to v2.
What Go 1.25 and 1.26 change while go.mod says 1.24
Many behavior changes in Go are tied to the go line in your go.mod, not to the toolchain. When Go 1.26 builds a module whose go.mod says go 1.24, its GODEBUG defaults are moved back to match 1.24 (Go, GODEBUG). So these keep the 1.24 behavior until you raise the line:
net/url.Parserejecting hosts with stray colons, such ashttp://localhost:80:80/(1.26,urlstrictcolons).- crypto functions ignoring the random reader you pass to them, which breaks tests that rely on deterministic keys (1.26,
cryptocustomrand). - GOMAXPROCS following the cgroup CPU limit in containers (1.25,
containermaxprocsandupdatemaxprocs). - SHA-1 signatures refused in TLS 1.2 handshakes (1.25,
tlssha1).
Other changes apply as soon as the toolchain is 1.26, whatever go.mod says (Go 1.25 release notes, Go 1.26 release notes):
- A compiler bug from Go 1.21 to 1.24 delayed some nil pointer checks. Code that uses a result before checking its error, such as calling
f.Name()on the result of a failedos.Open, used to run and now panics with a nil pointer dereference. A test that passed on 1.24 can fail this way; the fix is to check the error first. go vethas two new analyzers:waitgroupreportssync.WaitGroup.Addcalled in the wrong place, andhostportreportsfmt.Sprintf("%s:%d", host, port)used fornet.Dial, which fails with IPv6 (usenet.JoinHostPort). Ago vet ./...step can report new findings.go tool docis gone;go doctakes the same flags and arguments. The old fixers ofgo fixwere removed when it was rewritten.- Binaries carry DWARF 5 debug information. If a tool that reads it fails, build with
GOEXPERIMENT=nodwarf5for now. - The Green Tea garbage collector is the default. If memory use or benchmark numbers change and you need the old collector, build with
GOEXPERIMENT=nogreenteagc; the release notes expect that setting to go in 1.27. testing.AllocsPerRunpanics if parallel tests are running.
Fix
- Say which Go you want. With
go-version-file: go.mod, setup-go v6 and later take thetoolchainline if there is one, and thegoline otherwise. setup-go also setsGOTOOLCHAIN=local, so the go command uses exactly that version and does not switch to another one. - Try your build on Go 1.26 before the images move: run the job once with
go-version: '1.26', or onruns-on: ubuntu-26.04, where the default is already 1.26. - Replace
GOROOT_1_24_X64and the other 1.24 variables withgo env GOROOTafter setup-go. - If your
go.modstill saysgo 1.24, the build keeps working with a pinned 1.24 for now, but it is a download in every run and an unsupported Go. Raising the line to 1.25 or 1.26 also turns on the GODEBUG changes above, so run the tests after you raise it.
See failed jobs from IntelliJ IDEA
Pipeline Inbox for GitHub Actions Workflows, a plugin by Lesstep for JetBrains IDEs 2024.1 or later, lists the runs of all your repositories in an IDE tool window, with their jobs and steps, so a lint job that ended in a runner shutdown stands out, and your current branch's runs are in the status bar. Reading is free; re-running failed jobs, cancelling, running workflows and reviewing deployments are Pro (US$1.50 a month, with a 30-day trial).
Get it on JetBrains Marketplace
GitHub and GitHub Actions are trademarks of GitHub, Inc.; IntelliJ IDEA is a trademark of JetBrains s.r.o.; Go is a trademark of Google LLC; Ubuntu is a trademark of Canonical Ltd.; Windows and Azure are trademarks of Microsoft Corporation. This page is not affiliated with, sponsored or endorsed by any of them.
More: The runner has received a shutdown signal · ubuntu-latest and Ubuntu 26.04 · GitHub Actions plugins for IntelliJ IDEA compared · 日本語