Skip to content

go 1.27.0, go@1.26 1.26.7 (new formula) - #288803

Merged
BrewTestBot merged 12 commits into
mainfrom
go1.27
Aug 21, 2026
Merged

go 1.27.0, go@1.26 1.26.7 (new formula)#288803
BrewTestBot merged 12 commits into
mainfrom
go1.27

Conversation

@stefanb

@stefanb stefanb commented Jun 19, 2026

Copy link
Copy Markdown
Member

Announcements:

Release notes:

Go 1.27 milestone: GitHub milestone details (release blockers, commits, PRs)

Go release dashboard: https://dev.golang.org/release

Downloads: https://go.dev/dl/

This PR also adds go@1.26 (1.26.7) as a new formula, keeping the previous major available for formulae not yet compatible with Go 1.27.

Related/similar previous major releases:

Builds:

Note on rc3 coverage: macOS 14-x86_64 (deps) was cancelled after ~36 h (2026-08-14 00:05 → 2026-08-15 12:06) rather than finishing, stopping partway through the alphabet at tfmigrate and emitting no failed steps summary. So tfproviderlint, tgpt, trivy, vuls, wireguard-go, xeol and xgo were never exercised on macOS x86_64, and their platform notes below reflect arm64/Linux only. (pomerium was reached and correctly skipped — it is arch: :arm64 only.)

This PR's own formulae

The non-(deps) jobs fail on a single, transient step:

  • go@1.26 (1.26.6): brew audit --formula go@1.26 --online --newStable: The source URL https://fossies.org/linux/misc/go1.26.6.src.tar.gz is not reachable (HTTP status code 410) — Fossies had not mirrored 1.26.6 yet when the run started; the URL now returns HTTP 200, so this only needs a re-run.

errcheck, golangci-lint and govulncheck (revision bumps included here) pass on all platforms. solod needs its revision bump pushed to this branch as well (see below).

What would unblock the most formulae

Root causes ranked by how many failing formulae each one accounts for, after checking each project's current go.mod/upstream state:

Blocker Fix Formulae
golang.org/x/net < v0.55.0 (http2.TrailerPrefix) bump x/net to >= v0.55.0, or grpc >= 1.83.0 which requires it 9 — apptainer bigquery-emulator dagger gascity kapacitor localai opentofu steampipe vulcain
cockroachdb/swiss not enabled for Go 1.27 one-line build-tag enablement upstream, as was done for 1.26 5 — ethereum ipget kubo plakar pomerium
go-json-experiment/json not synced to Go 1.27 encoding/json/v2 upstream sync, then dependants bump 4 — dagu sing-box trivy vuls
golang.org/x/sys from 2019-2021 crashes on darwin/amd64 upstream x/sys bump 4 — leaf pget reg terraform-lsp
golang.org/x/tools too old to read Go 1.27 export data upstream x/tools bump 2 — go-critic tfproviderlint
CI runner disk exhaustion none (infrastructure) 3 — grafana grafana-alloy mesheryctl

Already fixed on upstream's master and only waiting for a release: apptainer, dagger, opentofu, vulcain, teleport.

Problematic formulae

Test failure - Needs revision bump

Build failure due to bug in Go 1.27

Build failure internal compiler error: bad live variable

Build failure undefined: http2.TrailerPrefix in google.golang.org/grpc module

Upstream:

The deciding dependency is golang.org/x/net, not grpc. Every formula below pins golang.org/x/net v0.54.0; v0.55.0 is the first release that keeps http2.TrailerPrefix defined under Go 1.27. grpc still references it at internal/transport/handler_server.go:271 in v1.83.0 too — bumping grpc only helps because of what its go.mod requires:

grpc required x/net builds on Go 1.27
v1.79.3 v0.48.0 no
v1.82.1 v0.53.0 no (confirmed by gascity)
v1.83.0 v0.55.0 yes

So, fixable by any of:

  • bumping golang.org/x/net to >= v0.55.0 (smallest change; grep 'golang.org/x/net' go.mod tells you instantly whether a formula is affected),
  • bumping google.golang.org/grpc to >= 1.83.0 (pulls x/net v0.55.0 in), or
  • adding go build -tags=http2legacy.

Formulae issues:

Formula reports different checksum

Gitea unstable checksum:

Others

Upstream tag moved

  • linkerd (2.20) fetch failure: version-2.20 tag should be 7977d505fc3d9ae7dddddd11779a82f813e405ac — all macOS (new in rc3; unrelated to Go 1.27). Upstream force-moved the tag: version-2.20 now resolves to eadc1acf79ad2e766afbdceadb77f1594296fd77, while the formula still pins revision: "7977d505fc3d9ae7dddddd11779a82f813e405ac". linkerd: move git revison for 2.20 release #299023

Build failure undefined: json.SkipFunc / undefined: json.DiscardUnknownMembers

Caused by github.com/go-json-experiment/json module being incompatible with Go 1.27's new stdlib encoding/json/v2. Upstream:

go-json-experiment/json mirrors the stdlib encoding/json/v2 API; its last sync commit is from 2026-06-23, before the Go 1.27 rename, and no upstream issue is filed for this yet — filing one there is probably the highest-leverage action, since it unblocks all four formulae at once.

Formulae:

Build failure undefined: checkMapABI in github.com/pingcap/tidb

Build failure undefined: hashFn / getRuntimeHasher / fastrand64 in cockroachdb/swiss

cockroachdb/swiss gates its runtime-internal hooks on an explicit per-release build-tag list, so each new Go major needs a one-line enablement: runtime_go1.20.go is currently //go:build (go1.20 && !go1.27) || untested_go_version.

None of the five formulae use swiss directly — each gets it as an indirect dependency of cockroachdb/pebble/v2, so this cannot be fixed in the formulae or in their own upstreams; it has to come from swiss or pebble.

  • swiss#51 (open). The repo is low-activity — its newest commit is still b0f6560 from 2025-12-24, which was exactly this enablement for Go 1.26 (#50). The same one-line change for Go 1.27 would unblock all five formulae below.
  • pebble#5676 (open) asks whether the dependency is still needed at all, given Go 1.24+ implements the builtin map with Swiss tables. Per the pebble maintainer it is: pebble pairs swiss.Map with a custom cgo allocator so the GC does not have to scan the large block-cache maps, which the builtin map cannot express. So the realistic fix is the build-tag bump, not dropping the dependency.

Checked locally against go1.27rc3 (macOS arm64): swiss's own test suite passes with -tags untested_go_version — plain, under -race, and with swiss_invariants — and ipget 0.13.2 then builds and runs. So the breakage is the version gate itself rather than a real Go 1.27 incompatibility, which suggests the one-line bump is safe.

Formulae (all with cockroachdb/swiss@v0.0.0-20251224182025-b0f6560f979b):

Build failure link: invalid reference to runtime.nanotime1

Go 1.27 removed/renamed runtime.nanotime1. Needs upstream tailscale.com/tstime/mono update.

Formulae:

Build failure flag provided but not defined: -no-canonical-prefixes (rules_go + Go 1.27)

Runtime panic / crash

macOS x86_64 crash in old golang.org/x/sys ioctl (SIGBUS / SIGSEGV) — new in rc3

Binaries built with Go 1.27 that pull in a pre-2022 golang.org/x/sys crash immediately on macOS x86_64 when calling IoctlGetTermios (isatty/terminal detection). The faulting PC equals the signal address, i.e. the libc trampoline call from syscall.syscall/syscall.syscalln (runtime/sys_darwin.go:27) jumps somewhere non-executable. macOS arm64 and Linux are unaffected.

This is consistent with Go 1.27's change to the darwin libc trampoline calling convention (9b4244e9 runtime: return the error code as a return value in syscallN_trampoline), and it is the same shape as the earlier golang/go#71302 (runtime, x/sys/unix: Connectx is broken on darwin/amd64), which needed a matching x/sys fix and was backported. No Go 1.27 issue is filed for this yet — worth reporting upstream, since it silently breaks previously working binaries at runtime rather than at build time.

Per-formula the fix is an upstream golang.org/x/sys bump to anything recent (current is v0.47.0); the four pins below are 4-7 years old. The x86_64 log contains exactly 8 such crashes (4 formulae × 2 --retry attempts), so these are the full set within the range that job covered before it was cancelled.

panic: crypto: RegisterHash of unknown hash function

in https://go.dev/src/crypto/crypto.go#:~:text=crypto%3A%20RegisterHash%20of%20unknown%20hash%20function

  • cloudfoundry-cli (8.18.4) test failure: panic: crypto: RegisterHash of unknown hash function — all macOS. Panics in an init(), so every cf invocation dies, not just the test. Exact frame:
    crypto.RegisterHash(...) crypto/crypto.go:158
    github.com/SermoDigital/jose/crypto.init.0()
      github.com/SermoDigital/jose@v0.9.2-0.20161205224733-f6df55f235c2/crypto/none.go:11
    
    SermoDigital/jose is pinned to a 2016 commit and registers a non-existent "none" hash, which Go 1.27 now rejects. Needs upstream to drop or replace that dependency; no upstream issue filed yet

panic: strcase.UnicodeVersion "15.0.0" != unicode.Version "17.0.0"

Needs rebuild with updated strcase module matching Go 1.27's Unicode 17.0.0 tables, pending

Formulae:

panic: jsontext: invalid nil io.Reader

encoding/json.NewDecoder(nil) now panics. In Go <= 1.26 a nil io.Reader was accepted and only failed on first read; in Go 1.27 encoding/json is backed by jsontext, which panics in Reset. Any formula calling json.NewDecoder with a nil reader will hit this, so it is worth watching for beyond grpcurl.

  • grpcurl (1.9.3) test failure: panic: jsontext: invalid nil io.Reader — all macOS: grpcurl: pin go@1.26 #300105
    encoding/json/jsontext.(*Decoder).Reset  encoding/json/jsontext/decode.go:137
    encoding/json.NewDecoder({0x0?, 0x0?})   encoding/json/v2_stream.go:48
    grpcurl.NewJSONRequestParserWithUnmarshaler  format.go:62
    grpcurl.RequestParserAndFormatter            format.go:412
    
    grpcurl passes a nil reader when the command needs no request body (describe). v1.9.3 (2025-03-11) is still the newest release and upstream already has an open request for a new release; the fix is upstream skipping the decoder for nil input. Worth reporting to golang/go as well, as it is a silent runtime behaviour change

Go 1.27 internal error — package "X" without types was imported

Go 1.27 runtime analysis failure

  • go-size-analyzer (1.13.1) test failure: the length of module data section is to big: address 0x50f940, base 0x50f940, length 0xffffffffffaf6960 — Linux x86_64/arm64 only. Go 1.27 changed the module data layout the tool parses; no upstream issue filed for 1.27 yet (Zxilly/go-size-analyzer) feat: support Go 1.27 Zxilly/go-size-analyzer#594 go-size-analyzer 1.14.0 #300048
  • xgo (1.7.5) test failure: panic: runtime error: invalid memory address or nil pointer dereference — all macOS arm64 + Linux x86_64/arm64. Crash is in the gogen dependency, reached from dependency checking:
    github.com/goplus/gogen@v1.23.5/package.go:486 (*Package).ForEachFile
    github.com/goplus/xgo/tool.checkGopDeps  tool/load.go:338
    github.com/goplus/xgo/tool.afterLoad     tool/load.go:322
    
    No upstream issue filed for Go 1.27 — worth reporting at goplus/xgo with this stack

Various other build failures

  • argo build failure: panic in k8s.io/code-generator deepcopy-gen — passes in rc3
  • checkmake (0.3.2) build failure: golangci-lint goconst issues (string 'list-rules' has 3 occurrences, make it a constant, …) → make: *** [golangci-lint] Error 1 — all macOS. Not a Go 1.27 problem: upstream's newest release is v0.3.2 (2026-01-10) and its make target runs an unpinned golangci-lint, so newer linter defaults fail the build. Homebrew-side options are dropping the lint step from the build or getting upstream to pin the linter
  • ffmate (2.0.18) build failure: ERR_PNPM_IGNORED_BUILDS — passes in rc3
  • kubetail (0.18.0) build failure: [ERROR] Cannot verify the identity of the @pnpm/exe.darwin-x64 native binary: it is missing from pnpm-lock.yamlmake: *** [build-dashboard-ui] Error 1 — macOS 14 x86_64 only; unrelated to Go 1.27. Upstream switched to a pinned pnpm + frozen lockfile in #1169, and cli/v0.18.0 is the newest release, so the shipped pnpm-lock.yaml simply has no darwin-x64 entry — needs an upstream lockfile regenerated on/for x86_64 macOS
  • parca build failure: ERR_PNPM_LOCKFILE_CONFIG_MISMATCH — passes in rc3
  • syncthing (2.1.3) build failure: runtime go1.27rc3 not found in compat.yaml — all macOS. Trivial upstream fix: compat.yaml lists runtimes only up to go1.26 (whose entry is just # no changes from 1.25), so a - runtime: go1.27 block mirroring it is all that is needed
  • terracognita build failure: no space left on device — passes in rc3

CI runner out of disk (no space left on device)

Not Go 1.27 related; the runner's disk fills up after the large envoy/grafana builds on the same machine.

  • grafana (13.1.3) build failure: ENOSPC: no space left on device during webpack → Command failed: yarn nx run grafana:"build" — macOS 14 arm64 only
  • grafana-alloy (1.18.1) build failure: compile: writing output: … no space left on device — macOS 26 arm64 only
  • mesheryctl (1.0.66) build failure: no space left on device — macOS 15/26 arm64 only. OK in mesheryctl 1.0.67 #300322

Test failure

Test failure — assertion mismatch (needs test fix)

GitHub API rate limit (CI environment issue)

External resource unavailable (CI environment issue)

  • amass (5.1.1) test failure: Failed to create a session with the Amass engine: createSession: status=500 Internal Server Error — all macOS
  • curlie (1.8.2) test failure: 503 Service Temporarily Unavailable from httpbin.org — macOS 14 x86_64 (new in rc3)
  • netdata: passes in rc3
  • restish (2.3.0) test failure: 503 Service Temporarily Unavailable from httpbin.org — macOS 14 x86_64 only; passed on all arm64 runners, and it is the same httpbin.org outage that hit curlie in the same job
  • squealer: passes in rc3
  • tgpt (2.13.0) test failure: Some error has occurred. Statuscode: 429 / FreeUsageLimitError — macOS 26 arm64 (new in rc3) {"type":"error","error":{"type":"ModelError","message":"Free promotion has ended for DeepSeek V4 Flash Free. You can continue using the model by subscribing to OpenCode Go - https://opencode.ai/go"}}
  • wormhole-william: passes in rc3
  • xeol (0.10.8) test failure: the eol database was built 1 year ago (max allowed age is 12 weeks) — macOS 14/15 arm64. The hosted EOL database itself has stopped being refreshed upstream, so no Go/formula change can make this pass; only a test change or an upstream DB refresh will

Failed to download resource (404/403)


  • Have you followed the guidelines for contributing?
  • Have you ensured that your commits follow the commit style guide?
  • Have you checked that there aren't other open pull requests for the same formula update/change?
  • Have you built your formula locally with HOMEBREW_NO_INSTALL_FROM_API=1 brew install --build-from-source <formula>?
  • Is your test running fine brew test <formula>?
  • Does your build pass brew audit --strict <formula> (after doing HOMEBREW_NO_INSTALL_FROM_API=1 brew install --build-from-source <formula>)? If this is a new formula, does it pass brew audit --new <formula>?

  • AI was used to generate or assist with generating this PR. Please specify below how you used AI to help you, and what steps you have taken to manually verify the changes.

AI (Claude Opus 5 via Claude Code) was used only to triage the CI logs of run 31753313820 and to maintain the failure list above: it downloaded the six (deps) job logs, extracted each failing step and its error, grouped them by root cause, and then checked each affected project's upstream go.mod, releases and issue tracker to record what is already fixed and what is still blocked. The formula changes in this PR were written and verified by me. Build/test results quoted above come from Homebrew's CI, except the cockroachdb/swiss / ipget check against go1.27rc3, which the AI ran locally on my machine at my request.


@stefanb stefanb added in progress Stale bot should stay away prerelease-testing Pull request from upstream, testing a pre-release with homebrew dependencies CI-skip-recursive-dependents [DEPRECATED] Pass --skip-recursive-dependents to brew test-bot. CI-no-fail-fast Continue CI tests despite failing GitHub Actions matrix builds. CI-build-dependents-from-source Pass --build-dependents-from-source to brew test-bot. CI-no-fail-fast-deps Continue dependent tests despite failing GitHub Actions matrix tests. long dependent tests Set a long timeout for dependent testing labels Jun 19, 2026
@github-actions github-actions Bot added automerge-skip `brew pr-automerge` will skip this pull request new formula PR adds a new formula to Homebrew/homebrew-core alias labels Jun 19, 2026
@github-actions

Copy link
Copy Markdown
Contributor

⚠️ @stefanb bottle publish failed.

@github-actions

Copy link
Copy Markdown
Contributor

:shipit: @stefanb has requested bottles to be published to this PR.

Caution

Please do not push to this PR branch before the bottle commits have been pushed, as this results in a state that is difficult to recover from. If you need to resolve a merge conflict, please use a merge commit. Do not force-push to this PR branch.

@github-actions github-actions Bot added the CI-published-bottle-commits The commits for the built bottles have been pushed to the PR branch. label Aug 21, 2026
@github-actions

Copy link
Copy Markdown
Contributor

⚠️ @stefanb Failed to enable automerge.

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

Labels

alias CI-build-dependents-from-source Pass --build-dependents-from-source to brew test-bot. CI-no-fail-fast Continue CI tests despite failing GitHub Actions matrix builds. CI-no-fail-fast-deps Continue dependent tests despite failing GitHub Actions matrix tests. CI-published-bottle-commits The commits for the built bottles have been pushed to the PR branch. CI-skip-recursive-dependents [DEPRECATED] Pass --skip-recursive-dependents to brew test-bot. long dependent tests Set a long timeout for dependent testing new formula PR adds a new formula to Homebrew/homebrew-core no long build conflict Do not allow merging other pull requests when files conflict with this one

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants