Repository navigation
fix(ci): build with Go 1.26.9 and adjudicate etcdutl x/net advisories - #177
Merged
Merged
Conversation
Go 1.26.9 (2026-10-08) fixes the standard-library advisories that turn govulncheck, the release bundle scan in go-build-module-integrity and the etcdutl gate in go-test red on every pull request. There are thirteen, in net/http, net/textproto, mime/multipart, crypto/tls, html/template and os: GO-2026-6599, 6600, 6603, 6604, 6605, 6607, 6608, 6609, 6610, 6611, 6612, 6613 and 6617. Pin go1.26.9 in go.mod, every setup-go step, the PostgreSQL test container and the synthetic reference image (golang:1.26.9-bookworm index d9c68c2c), the etcdutl build and adjudication scripts and the release component inventory. The etcdutl 3.6.14 rebuild changes with the compiler, so re-pin its digest to 8cc788cf in the worker, the three etcd-recovery schemas, the contract README and release provenance. Recompute the workflow policy digests and update the docs that name the release compiler. Signed-off-by: trukhin.com <yuri@trukhin.com>
After the compiler update the etcdutl gate still fails on GO-2026-6603, GO-2026-6611, GO-2026-6612 and GO-2026-6617. Their remaining part is golang.org/x/net v0.55.0 from the unchanged etcd 3.6.14 module graph, fixed in x/net v0.60.0 (2026-10-08). No etcd release ships it yet: 3.6.15, 3.7.2 and both release branches carry v0.58.0, main v0.59.0. Of the 27 example traces source mode reports per advisory, 12 enter through the init-time closure dispatch already adjudicated for GO-2026-6348 (crc32 table init -> sync.OnceFunc -> grpc client transport) and 15 through error, fmt.Stringer and io.Writer interface dispatch from cobra, cobrautl and pflag. Each advisory needs an HTTP/2 peer; no etcdutl subcommand opens a listener or dials, and the recovery worker runs only version, snapshot status, hashkv and snapshot restore on local files. Add the four IDs to the reviewed overrides; they must be removed when the pinned etcd release ships x/net >= v0.60.0. The IDs also cover net/http, so the comment records that every scanned binary must be built with the fixed compiler. GO-2026-6443 stays informational as unreachable, GO-2026-6610 is not a binary-mode finding, and the gate still prints the full binary and source reports. Signed-off-by: trukhin.com <yuri@trukhin.com>
There was a problem hiding this comment.
🟢 Approval recommended
The pins and contracts are consistent, the advisory scope is documented, and all completed CI checks pass.
0 open findings
What changed in this PR
Updates CloudRING’s pinned Go toolchain to 1.26.9, restoring security and build checks while preserving reproducible recovery artifacts.
Changes:
- Updates Go pins across modules, CI, containers, and documentation.
- Re-pins the rebuilt
etcdutlbinary and related contracts. - Adds reviewed overrides for unreachable
x/netHTTP/2 advisories.
| File | Description |
|---|---|
go.mod |
Raises the minimum Go version. |
README.md |
Updates development prerequisites. |
reference/synthetic-service/Containerfile |
Pins the Go 1.26.9 image. |
pkg/backup/etcdrecovery/types.go |
Updates the trusted etcdutl digest. |
docs/releasing.md |
Updates the release compiler. |
docs/development-installation.md |
Updates build prerequisites. |
docs/ci-checks.md |
Documents the new compiler pin. |
contracts/etcd-recovery/README.md |
Updates recovery-tool provenance. |
contracts/etcd-recovery/request.schema.json |
Updates the accepted tool digest. |
contracts/etcd-recovery/receipt.schema.json |
Updates the receipt digest constraint. |
contracts/etcd-recovery/image-identity.schema.json |
Updates image identity validation. |
.github/workflows/ci.yml |
Uses Go 1.26.9 throughout CI. |
.github/workflows/security.yml |
Updates security jobs’ toolchain. |
.github/workflows/license.yml |
Updates the license job’s toolchain. |
.github/workflows/supply-chain.yml |
Updates the policy job’s toolchain. |
.github/workflows/release-provenance.yml |
Updates compiler provenance and digest pins. |
.github/workflow-policy.json |
Re-pins workflow semantic digests. |
.github/scripts/build-release-etcdutl.sh |
Rebuilds etcdutl with Go 1.26.9. |
.github/scripts/check-release-binaries.sh |
Adjudicates the remaining x/net findings. |
🧠 Review effort: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Advisories published with the Go security release of 2026-10-08 turn three required checks red on every change: govulncheck, go-build-module-integrity and go-test. Main last passed on 2026-10-07; #176, a docs-only change, fails the same three.
Compiler. Go 1.26.9 fixes the thirteen standard-library advisories behind the failures (GO-2026-6599, 6600, 6603, 6604, 6605, 6607, 6608, 6609, 6610, 6611, 6612, 6613 and 6617 in net/http, net/textproto, mime/multipart, crypto/tls, html/template and os). It is now pinned in go.mod, every setup-go step, the PostgreSQL test container and the synthetic reference image (golang:1.26.9-bookworm index
d9c68c2c), the etcdutl build and adjudication scripts and the release component inventory, and the docs that name the release compiler follow. The rebuilt etcdutl 3.6.14 changes with the compiler, so its digest is re-pinned to8cc788cf08a2ad326ab54add1a161000fd0d563a0f28d6a6d842877c0d2148c1in the worker, the three etcd-recovery schemas, the contract README and release provenance..github/workflow-policy.jsoncarries the new workflow digests.etcdutl x/net overrides. CloudRING requires neither golang.org/x/net nor google.golang.org/grpc; both come from the unchanged etcd 3.6.14 module graph of etcdutl. After the compiler update the etcdutl gate still fails on GO-2026-6603, GO-2026-6611, GO-2026-6612 and GO-2026-6617, whose remaining part is x/net v0.55.0. The fix is x/net v0.60.0 (2026-10-08), and no etcd release ships it yet: 3.6.15, 3.7.2 and both release branches carry v0.58.0, main v0.59.0. Rebuilding etcdutl with patched dependencies would break the rule in docs/releasing.md ("without source or dependency patches"), so this extends the reviewed overrides instead. That weakens a gate, so per QUALITY.md the adjudication is recorded here:
govulncheck -mode=source -scan symbol -show traceson the pinned etcdutl main package reports 27 example traces per advisory, one per vulnerable symbol. 12 start atsnap.init(crc32.MakeTable -> sync.OnceFunc -> grpc pickfirst -> NewHTTP2Client), the closure conflation already adjudicated for GO-2026-6348. 7 reachErrormethods through cobraCommand.Execute, 6 reachStringmethods through cobrautlExitWithErrorand fmt, and 2 reachWritemethods through pflagAddFlagand fmt.snapshot.v3Manager.Save, the only dialing code in its packages, has no subcommand). The recovery worker runs onlyversion,snapshot status,hashkvandsnapshot restoreon local files.Validation with go1.26.9 on macOS: go test, race, vet,
go mod tidy -diff, govulncheck (0 reachable), the Windows build, ocsctl validate and conformance, platform manifests, docscheck, source-safety for the tree and the commit range, go-licenses, gosec, gitleaks with its probes, DCO, CLA, actionlint, the SBOM step and the workflow policy step all pass. The 17 release bundle binaries scan clean. Two etcdutl builds give8cc788cf…, and the same script with go1.26.8 reproduces the previous pin2b7fea46…on this host, so the digest does not depend on the build host. The etcdutl gate passes with the overrides.CI on Linux covers the rest: the real offline snapshot restore with the rebuilt etcdutl, the reproducible bundle archive, the synthetic image build, PostgreSQL integration and the Windows suite. Moving to the first etcd release with x/net >= v0.60.0, dropping these overrides and scoping overrides to the etcdutl binary are separate changes.