Skip to content

ci: pin goreleaser instead of tracking latest - #35

Merged
patramsey merged 1 commit into
mainfrom
ci/pin-goreleaser
Aug 3, 2026
Merged

ci: pin goreleaser instead of tracking latest#35
patramsey merged 1 commit into
mainfrom
ci/pin-goreleaser

Conversation

@patramsey

Copy link
Copy Markdown
Owner

version: latest reached straight past the action's SHA pin and fetched whatever goreleaser had shipped by the time a tag was pushed.

The action is pinned to a commit precisely so upstream can't swap what runs. Asking it to then install the newest available goreleaser puts that exposure right back — on the one job holding HOMEBREW_TAP_GITHUB_TOKEN, which reaches other people's machines via brew upgrade.

Not hypothetical

.goreleaser.yaml still uses the deprecated brews: key. goreleaser check warns about it — and only warns, today:

• DEPRECATED: brews should not be used anymore
• .goreleaser.yaml  error=configuration is valid, but uses deprecated properties

While unpinned, the release that breaks is whichever one happens to run after upstream turns that deprecation into a removal. Discovered at release time, with a tag already pushed — the worst possible moment.

Why 2.17.1 specifically

It's what CI actually used for the v0.2.3 release minutes ago, verified end to end:

Archives 5, all platforms
checksums.txt validates against the published file (namecom_darwin_arm64.tar.gz: OK)
Homebrew formula version 0.2.3, URLs resolve
README curl URL downloads and the binary reports "version": "0.2.3"

That's stronger evidence than "the newest one probably works."

Maintenance

Dependabot doesn't manage this input — it's a value, not an action ref — so it's bumped by hand, same as govulncheck in ci.yml. The comment records what to do when bumping: migrate brews:homebrew_casks: first, then run goreleaser check and a snapshot build locally before pushing a tag.

Honest limitation

CI cannot exercise this change. release.yml only runs on tag pushes, so the next tag is the real test. I've left the brews: migration for its own change rather than folding it in, so that if that migration goes wrong, it isn't entangled with the pin.

Test plan

  • release.yml parses as valid YAML
  • v2.17.1 confirmed to exist upstream (published 2026-07-26)
  • goreleaser release --snapshot --clean succeeds against this config locally (on 2.17.0)
  • The pinned version is the one that produced the verified v0.2.3 release
  • Not verifiable until the next tag push — noted above

`version: latest` reached straight past the action's SHA pin and fetched
whatever goreleaser had shipped by the time a tag was pushed. The action
is pinned to a commit precisely so upstream cannot swap what runs; asking
it to install the newest available goreleaser puts that exposure back, on
the one job holding the Homebrew tap token.

Not hypothetical here. `.goreleaser.yaml` still uses the deprecated
`brews:` key — `goreleaser check` warns, and only warns, today. While
unpinned, the release that breaks is whichever one happens to run after
upstream turns that deprecation into a removal: discovered at release
time, with a tag already pushed, which is the worst moment to find out.

Pinned to 2.17.1 because that is what CI actually used for v0.2.3
minutes ago, verified end to end — five archives, checksums that
validate against the published files, a Homebrew formula pointing at
real URLs, and a downloaded binary reporting 0.2.3. That is stronger
evidence than "the newest one probably works".

Dependabot does not manage this input; it is a value, not an action ref.
So it is bumped by hand, like govulncheck in ci.yml, and the comment says
what to do when bumping: migrate `brews:` to `homebrew_casks:` first, then
run `goreleaser check` and a snapshot build locally before pushing a tag.

Worth stating plainly: CI cannot exercise this change, because release.yml
only runs on tag pushes. The next tag is the real test. The `brews:`
migration is left for its own change rather than folded in here, so that
if it does go wrong the pin is not entangled with it.
@patramsey
patramsey merged commit 0a13554 into main Aug 3, 2026
4 checks passed
@patramsey
patramsey deleted the ci/pin-goreleaser branch August 3, 2026 04:01
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