Hash-verify the Go toolchain in the release workflow (closes #105)
The release workflow installed Go with actions/setup-go, which pins the action but not the Go archive it downloads, so the compiler that builds the published binaries was verified against nothing in this repo. New script/install-go, modelled on script/install-goreleaser, downloads the go.dev archive for the version in go.mod and refuses it unless its sha256 matches the value committed in the script. It fails if its version disagrees with go.mod, and on any OS or architecture other than the Linux release runners. GOTOOLCHAIN=local on the release step keeps the verified toolchain from switching itself. Judgement call: release path only; script/bootstrap still uses the host Go. model: claude-opus-4-8 (implementation, review); claude-fable-5-1 (merge)
This commit was merged in pull request #132.
This commit is contained in:
@@ -40,6 +40,16 @@ release" is exactly the contradiction
|
||||
local `make check`
|
||||
([issue #122](https://git.eeqj.de/sneak/vaultik/issues/122)).
|
||||
|
||||
- 2026-09-21: Hash-verified the Go toolchain in the release workflow
|
||||
([issue #105](https://git.eeqj.de/sneak/vaultik/issues/105)). New
|
||||
`script/install-go` downloads the exact `go.dev` archive for `go.mod`'s
|
||||
`go` directive and refuses it unless its sha256 matches a value
|
||||
committed in the script; `.gitea/workflows/release.yml` calls it
|
||||
instead of `actions/setup-go`, which verified the downloaded toolchain
|
||||
against nothing in the repo. `GOTOOLCHAIN: local` on the release step
|
||||
keeps that exact compiler from auto-switching. Bumping Go now touches
|
||||
`go.mod`, the checksum, and the `Dockerfile` `golang` digest together.
|
||||
|
||||
- 2026-08-10: Moved every lint run into its own container, as a build
|
||||
step ([issue #113](https://git.eeqj.de/sneak/vaultik/issues/113)).
|
||||
New root `Dockerfile.lint`, built by `script/lint`, runs
|
||||
|
||||
Reference in New Issue
Block a user