Problem
Two coupled release-pipeline footguns surfaced while cutting v0.18.0:
-
.goreleaser.yml uses the deprecated brews: key. goreleaser check (v2.16.0) reports:
DEPRECATED: brews should not be used anymore, check https://goreleaser.com/deprecations#brews
.goreleaser.yml: configuration is valid, but uses deprecated properties
It still publishes today because release/build only warn on deprecations (only check exits non-zero) — v0.18.0's Homebrew formula published fine. But when GoReleaser eventually removes brews, the publish step breaks.
-
Both .github/workflows/release.yml and ci.yml (Build job) pin GoReleaser version: latest. Combined with (1), a future GoReleaser release that drops brews would break the release with no advance warning — latest silently rolls forward at tag time.
Why it matters
The brew publish failure would happen after the v* tag is already created (the Release workflow isn't a required check), so a bad GoReleaser bump would leave a tag with a partially-failed release.
Options
- Migrate
brews: → homebrew_casks: per https://goreleaser.com/deprecations#brews (note: formula → cask is a behavior change for a binary CLI; validate the install UX). Then goreleaser check is clean again.
- And/or pin a known-good GoReleaser version (
version: 'v2.x.y') in both workflows instead of latest, so upgrades are deliberate and tested via the snapshot Build job before they can affect a real release.
Verification
goreleaser check should exit 0, and a goreleaser release --snapshot --clean dry-run should produce the cask/formula without deprecation errors.
Context: surfaced during the v0.18.0 / reyamira org-transfer release.
Problem
Two coupled release-pipeline footguns surfaced while cutting v0.18.0:
.goreleaser.ymluses the deprecatedbrews:key.goreleaser check(v2.16.0) reports:It still publishes today because
release/buildonly warn on deprecations (onlycheckexits non-zero) — v0.18.0's Homebrew formula published fine. But when GoReleaser eventually removesbrews, the publish step breaks.Both
.github/workflows/release.ymlandci.yml(Build job) pin GoReleaserversion: latest. Combined with (1), a future GoReleaser release that dropsbrewswould break the release with no advance warning —latestsilently rolls forward at tag time.Why it matters
The brew publish failure would happen after the
v*tag is already created (the Release workflow isn't a required check), so a bad GoReleaser bump would leave a tag with a partially-failed release.Options
brews:→homebrew_casks:per https://goreleaser.com/deprecations#brews (note: formula → cask is a behavior change for a binary CLI; validate the install UX). Thengoreleaser checkis clean again.version: 'v2.x.y') in both workflows instead oflatest, so upgrades are deliberate and tested via the snapshot Build job before they can affect a real release.Verification
goreleaser checkshould exit 0, and agoreleaser release --snapshot --cleandry-run should produce the cask/formula without deprecation errors.Context: surfaced during the v0.18.0 / reyamira org-transfer release.