Skip to content

build(deps): consolidate the Go toolchain pin on 1.27.0 - #48

Merged
bketelsen merged 1 commit into
mainfrom
cockpit/go-1.27.0
Aug 28, 2026
Merged

build(deps): consolidate the Go toolchain pin on 1.27.0#48
bketelsen merged 1 commit into
mainfrom
cockpit/go-1.27.0

Conversation

@bketelsen

Copy link
Copy Markdown
Contributor

Summary

Moves every Go toolchain dependency surface in this repository from 1.26.7 to
1.27.0
in a single change. Resolves Snowcat item
efb7e1fc-2678-49ed-9b76-825fbafaaeee (dependencies-gap-fix).

The surfaces have to move together: the worker base image sets
GOTOOLCHAIN=local, so a go.mod toolchain the image's Go cannot satisfy
fails at the first go invocation inside a lease rather than downloading a
toolchain.

  • go.modtoolchain go1.27.0. The go 1.26.6 language/compatibility
    directive is deliberately unchanged; nothing here needs 1.27 language
    semantics, and raising it would narrow who can build the module.
  • mise.lock — regenerated with mise lock. mise.toml never pins Go
    (idiomatic_version_file_enable_tools = ["go"]), so mise reads the same
    go.mod toolchain line; the lock now resolves Go 1.27.0 across all seven
    locked platforms. Each checksum matches upstream https://go.dev/dl/?mode=json
    for go1.27.0 (verified linux-amd64/arm64, darwin-amd64/arm64, windows-amd64).
    golangci-lint 2.13.1 and actionlint 1.7.12 are untouched.
  • .github/workflows/release.yml, .github/workflows/snapshot.yml — the
    setup-go pin.
  • oci/Containerfile — both the fetch and base stages move to
    docker.io/library/golang:1.27.0-bookworm at its immutable
    multi-architecture manifest digest
    sha256:ded31c68586d2e49e760acc2e65a884b23d032e9bbbed0ae0c55abd3fcaf4452
    (confirmed with skopeo inspect; the index carries linux/amd64 and
    linux/arm64). The node:26-bookworm-slim digest and every fetched-binary
    checksum are unchanged.
  • oci/baseline.jsonbase, tools.go, tools.gofmt.
  • docs/specs/oci-workers.md — the reader-facing base pin.
  • internal/worker/worker_test.go — the literal provisioning fixtures and the
    expected go@<version> provisioning tool string.

docs/adr/0012-… still says Go 1.26.7: that is its historical record of what
worker image v0.1.1 contained, and Accepted ADRs are immutable.

golangci-lint 2.13.1 is already built with Go 1.27.0, so the Makefile's
lint-version-check guard (golangci-lint must be built with a Go at least as
new as the toolchain) still passes without a lint bump.

Risk tier

Risk tier: Medium — a toolchain and base-image dependency bump that changes
what every worker image and CI job compiles with. It touches no credential
projection, worker authority, networking, or lifecycle code, but a wrong or
partial pin would break worker leases at their first go invocation, so it is
not docs-only risk. Every reference is verified against upstream (release
checksums, image manifest digest) and the built image was executed.

Boundary check

  • Snowcat's MCP contract and databases remain untouched
  • No provider, MCP, GitHub, or lease credential enters args, logs, or state
  • Writable terminal surfaces remain loopback-only
  • Cleanup remains an explicit operator action

Docs housekeeping

  • New docs started from their category TEMPLATE.md — n/a, no new docs
  • Every new canonical doc is indexed in docs/README.md — n/a, no new docs
  • ADR, design, spec, and plan links run both ways — no links changed;
    make docs-check reports 32 docs, 315 links, 10 symlinks all green
  • Conformance aliases in ADR-0007 were not edited as content

Verification

  • make ci — passes end to end with the pinned tools installed
    (mise install; Go 1.27.0, golangci-lint 2.13.1, actionlint 1.7.12):

    golangci-lint run
    0 issues.
    GOCACHE=/tmp/snowcat-cockpit-gocache go test ./...
    ok  github.com/frostyard/snowcat-cockpit/internal/worker  0.168s
    ...
    PASS: observer wrapper
    PASS: OCI entrypoints
    PASS: cockpit lifecycle
    GOCACHE=/tmp/snowcat-cockpit-gocache go test -race -short ./...   (all ok)
    GOOS=linux GOARCH=amd64 ... go build -trimpath -o /tmp/snowcat-cockpit-linux-amd64
    GOOS=linux GOARCH=arm64 ... go build -trimpath -o /tmp/snowcat-cockpit-linux-arm64
    node scripts/check-docs.mjs
    ok   docs_index_coverage: 1.000 (required 1)
    ok   link_integrity: 1.000 (required 1)
    ok   symlink_resolution: 1.000 (required 1)
    checked: 32 docs, 315 links, 10 symlinks
    actionlint
    (exit 0)
    
  • Workflow changes pass actionlint — via make workflow-lint in the
    make ci run above.

  • Every action is SHA-pinned with a version comment and checkout disables
    persisted credentials — unchanged in this PR; only the go-version
    input strings moved.

  • mise outdated --bumpmise All tools are up to date (it previously
    reported the Go toolchain as behind at 1.26.7).

  • Worker image built and executed (docker build --build-arg TARGETARCH=amd64 --file oci/Containerfile --target codex, exit 0), then
    run:

    go version go1.27.0 linux/amd64
    baseline.base   docker.io/library/golang:1.27.0-bookworm
    baseline.tools.go / .gofmt  1.27.0
    OK: image go matches baseline.tools.go
    codex-cli 0.149.0 / 2.1.239 (Claude Code) / GitHub Copilot CLI 1.0.80.
    node v26.7.0 / mise 2026.8.12
    

Move every Go toolchain dependency surface from 1.26.7 to 1.27.0 in one
change so the module, CI automation, and the worker base image agree:
GOTOOLCHAIN=local in the worker image refuses a toolchain lower than
go.mod's, so a partial bump breaks worker leases.

- go.mod: toolchain go1.27.0 (the `go 1.26.6` language directive is the
  compatibility contract and stays put).
- mise.lock: regenerated with `mise lock`; mise reads the toolchain line
  from go.mod (idiomatic_version_file_enable_tools), so the Go entry now
  resolves 1.27.0 with upstream-matching checksums for all seven
  platforms. The golangci-lint 2.13.1 and actionlint 1.7.12 pins are
  unchanged; golangci-lint 2.13.1 is already built with Go 1.27.0, so
  `make lint-version-check` still passes.
- release.yml / snapshot.yml: setup-go pin 1.27.0.
- oci/Containerfile: both `fetch` and `base` stages move to
  golang:1.27.0-bookworm at its immutable multi-architecture manifest
  digest sha256:ded31c68586d2e49e760acc2e65a884b23d032e9bbbed0ae0c55abd3fcaf4452.
  The node:26-bookworm-slim digest and every fetched-binary checksum are
  untouched.
- oci/baseline.json: base reference plus the go/gofmt entries.
- docs/specs/oci-workers.md: the reader-facing base pin.
- internal/worker/worker_test.go: the literal provisioning fixtures and
  their expected `go@` tool string.

ADR-0012's historical record of the v0.1.1 image is left as written.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UigLsmd17TVDuaaSN4yfdU
@bketelsen
bketelsen marked this pull request as ready for review August 28, 2026 02:05
@bketelsen
bketelsen added this pull request to the merge queue Aug 28, 2026
Merged via the queue into main with commit d3fceed Aug 28, 2026
11 checks passed
@bketelsen
bketelsen deleted the cockpit/go-1.27.0 branch August 28, 2026 02: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