Skip to content

release hardening: build with the Go that CI tests; digests are identity - #34

Merged
y1o1 merged 1 commit into
mainfrom
chore/tested-toolchain-and-honest-pins
Jul 27, 2026
Merged

release hardening: build with the Go that CI tests; digests are identity#34
y1o1 merged 1 commit into
mainfrom
chore/tested-toolchain-and-honest-pins

Conversation

@y1o1

@y1o1 y1o1 commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

Summary

Two repo-local pieces of the release-engineering track (companion to
provin-line/auth#13).

golang:1.26-alpine1.25.5-alpine (×3 Dockerfiles)

release.toolchain.tested-is-shipped: go.mod says 1.25.5 and CI tests with
it (go-version-file), but cmd/network, cmd/pipeline and
deploy/quickstart/provision compiled with whatever 1.26.x the tag served that
week — evidence from CI covers the shipped binary only when they are the same
toolchain. Aligning down to the tested version keeps this a hardening
change; moving to 1.26 stays available as its own deliberate bump that runs the
full CI + e2e surface.

Tag-level on purpose, not digest: base-image digest pins without a scan/refresh
loop freeze CVE fixes, and stay consciously deferred to the P0-7 scanner track.

A sha-<sha> tag is not "an exact, reproducible build"

release.docs.match-artifacts: the quickstart README and compose comments
promised reproducibility from a tag that names the source commit but remains a
movable registry pointer. An operator who believes an artifact is pinned stops
checking. The docs now direct exact pinning to the image digest
(name@sha256:…, printed in each publish run's job summary — added in
auth#13). The moving v0.2 pin itself stays: a deliberate convenience-locator
choice, now described as one.

Test plan

The compose job builds all three Dockerfiles from this commit with
1.25.5-alpine and runs the 11 scenarios against the result — that green is the
tested-is-shipped verification, not a proxy for it. golang:1.25.5-alpine
existence verified against Docker Hub (manifest HTTP 200) before pinning.

🤖 Generated with Claude Code

Two repo-local pieces of the release-engineering track.

**golang:1.26-alpine -> 1.25.5-alpine** in all three build Dockerfiles
(release.toolchain.tested-is-shipped): go.mod says 1.25.5 and CI tests with
it via go-version-file, but every image compiled with whatever 1.26.x the
tag served that week. Evidence from CI covers the shipped binary only when
they are the same toolchain; aligning DOWN to the tested version keeps this
a hardening change instead of a toolchain upgrade. Moving to 1.26 stays
available as its own deliberate bump that runs the full CI + e2e surface.
Tag-level on purpose, not digest: base-image digest pins without a
scan/refresh loop freeze CVE fixes, and stay deferred to the P0-7 scanner
track.

**A sha-<sha> tag is not "an exact, reproducible build"**
(release.docs.match-artifacts): the quickstart README and compose comments
promised reproducibility from a tag that names the source commit but remains
a movable registry pointer. An operator who believes an artifact is pinned
stops checking — the docs now direct exact pinning to the image digest
(name@sha256:..., printed in each publish run's job summary), which is the
only immutable reference. The moving v0.2 pin itself stays: that is a
deliberate convenience-locator choice, now described as one.
@y1o1
y1o1 merged commit 33d8797 into main Jul 27, 2026
5 of 6 checks passed
@y1o1
y1o1 deleted the chore/tested-toolchain-and-honest-pins branch July 27, 2026 05:41
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