Skip to content

chore(deps): update go to 1.26.10 and x/net to v0.60.0 (release-4.0) - #17262

Merged
Joibel merged 3 commits into
release-4.0from
deps/go-1.26.10-release-4.0
Oct 22, 2026
Merged

Joibel merged 3 commits into
release-4.0from
deps/go-1.26.10-release-4.0

Conversation

@Joibel

@Joibel Joibel commented Oct 21, 2026 •

Copy link
Copy Markdown
Member

See the pull request guide for details on each item.

  • Ran make pre-commit -B
  • Signed-off commits with Conventional Commit messages
  • PR title is a conventional commit message (it becomes the release notes entry)
  • Unit or e2e tests cover the change
  • For features: an associated issue and a feature description file (make feature-new)
  • Opened as draft; will mark "Ready for review" once builds are green

Motivation

release-4.0 builds with Go 1.25, which went end of life when Go 1.27.0 shipped on 2026-08-19, so it won't get the Go 1.26.10 / 1.27.3 crypto/x509 security fix (CVE-2026-111943, golang/go#82345, 2026-10-19). That fix makes Go distrust a set of intermediates from one certificate authority, and it isn't gated by GODEBUG, so the godebug pin below doesn't turn it off. 4.0 is also stuck on two security dependency bumps. golang.org/x/net v0.60.0 (#17178, closed) and golang.org/x/crypto v0.56.0 (#16837) both declare go 1.26.0, so neither can land while the branch is on 1.25.

This moves 4.0 to Go 1.26.10, the same Go line as release-4.1, and takes the x/net set in the same change. It supersedes #16837.

Modifications

  • go 1.26.10 in go.mod and the sdks/go modules, plus the SDK README, both Dockerfiles, the devcontainer, setup-go in the workflows, and the nix overlay (go_1_26 / buildGo126Module).
  • godebug default=go1.25 in go.mod. The go directive sets the binaries' GODEBUG defaults, so this keeps the controller, server, executor and CLI on exactly the 1.25.12 defaults (cryptocustomrand=1,httpservecontentmaxranges=1,tlssecpmlkem=0,urlstrictcolons=0, checked with go list -f '{{.DefaultGODEBUG}}'). Without it, the patch release would start offering extra post-quantum TLS key exchanges and parse URL hosts more strictly.
  • golang.org/x/net v0.58.0 → v0.60.0, which brings in x/crypto v0.57.0, x/sync v0.23.0, x/sys v0.48.0, x/term v0.46.0 and x/text v0.42.0. Done in the main module and all five SDK modules.
  • golangci-lint v2.7.2 → v2.11.3. v2.7.2 is built with Go 1.25 and refuses to lint a Go 1.26 module. Its new findings are fixed: three httptest.NewRequest calls now pass a context (the same change as on main), and nine // nolint: directives become //nolint:.
  • x/net v0.60.0 deprecates http2.Transport, so the e2e client now uses http.Transport with unencrypted HTTP/2, the same as main (fix(build): run mockery and golangci-lint under the go.mod toolchain, drop deprecated http2.Transport #17182) and release-4.1 (fix(build): drop deprecated http2.Transport (cherry-pick #17182 for 4.1) #17185). x/net is now only an indirect dependency.
  • Distroless static-debian13 base image digest moved to 034df5c. It carries the Debian ca-certificates update that removes the "AAA Certificate Services" (Comodo) and "emSign ECC Root CA - G3" roots, which upstream now treats as untrusted (backout ca-certificates workaround, revert to debian update that removes them GoogleContainerTools/distroless#2218). Go's fix filters specific intermediates during verification; this drops the roots from the image's trust store as well.
  • setup-go steps now take the version from go.mod (go-version-file: go.mod), so CI doesn't wait for the runner image to cache the new patch (the same change as ci: take the setup-go version from go.mod #17263 on main).
  • No generated code changes.

Some Go 1.26 changes are outside GODEBUG and do reach 4.0 users. The release note should mention them:

  • The Green Tea garbage collector is on by default, so the controller's memory and CPU profile may shift.
  • http.ServeMux trailing-slash redirects are now 307 instead of 301.
  • http.Client cookie scoping now uses Request.Host.

main and release-4.1 already ship all of these.

The nix build will fail until the flake lock reaches a nixpkgs with go 1.26.10. nixpkgs-unstable is still on 1.26.9, and release-4.0 CI doesn't use nix.

Verification

  • make codegen -B (no diff), make lint-go (0 issues) and make test under Go 1.26.10. The only failures were TestEmissary/Sub-process and TestSimpleStartCloser, which only fail locally (a shell echo "\c" quirk).
  • go build ./... in the main module and each SDK module after the x/net bump.

Documentation

Not needed beyond the release note above.

AI

I used Claude Code (Claude Opus 5.5) for the version sweep, the lint fixes, checking the GODEBUG defaults, and running codegen, lint and tests. I've reviewed the diff.

🤖 Generated with Claude Code

https://claude.ai/code/session_014BhuQwzc8b4XKuHRfNuvvb

Joibel and others added 2 commits October 21, 2026 16:11
Go 1.25 is end of life and will not get the crypto/x509 fix for
CVE-2026-111943, and golang.org/x/net v0.60.0 (security) needs Go
1.26. Move release-4.0 to Go 1.26.10 and take the x/net set (x/crypto
v0.57.0, x/sync, x/sys, x/term, x/text) in the main and SDK modules.

Add `godebug default=go1.25` so the binaries keep the 1.25 GODEBUG
defaults (tlssecpmlkem, urlstrictcolons, httpservecontentmaxranges,
cryptocustomrand) in this patch release.

Bump golangci-lint to v2.11.3, which is built with Go 1.26, and fix its
new noctx and nolintlint findings. Replace the deprecated
http2.Transport in the e2e client, as on main and release-4.1.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014BhuQwzc8b4XKuHRfNuvvb
Signed-off-by: Alan Clucas <alan@clucas.org>
With a major.minor spec such as "1.26", setup-go uses any matching Go in
the runner's tool cache without checking for a newer patch. After a Go
patch bump in go.mod, jobs then fail with GOTOOLCHAIN=local until the
runner image catches up. Read the exact version from go.mod instead.
setup-go downloads it when the cache doesn't have it, and go.mod
becomes the only place to bump.

pr.yaml keeps its spec because it sets up Go before checkout.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014BhuQwzc8b4XKuHRfNuvvb
Signed-off-by: Alan Clucas <alan@clucas.org>
@Joibel Joibel mentioned this pull request Oct 21, 2026
4 of 6 tasks
The new image takes the Debian ca-certificates update that removes the
"AAA Certificate Services" (Comodo) and "emSign ECC Root CA - G3"
roots, which upstream now treats as untrusted. It lands alongside the
Go crypto/x509 distrust fix for CVE-2026-111943.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014BhuQwzc8b4XKuHRfNuvvb
Signed-off-by: Alan Clucas <alan@clucas.org>
@Joibel
Joibel marked this pull request as ready for review October 21, 2026 16:06
@Joibel
Joibel merged commit 48750c9 into release-4.0 Oct 22, 2026
38 checks passed
@Joibel
Joibel deleted the deps/go-1.26.10-release-4.0 branch October 22, 2026 08:07
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.

1 participant