← ClaudeAtlas

goreleaserlisted

Release Go binaries with GoReleaser: minimal .goreleaser.yaml, snapshot builds, tag-driven GitHub Actions release, cosign signing, ko images. Use when releasing a Go CLI.
fmind/dot · ★ 4 · Data & Documents · score 80
Install: claude install-skill fmind/dot
# GoReleaser Build, archive, checksum, sign, and publish Go binaries from one `.goreleaser.yaml` when a `v*` tag lands. The version, changelog, and tag come from [release](../release/SKILL.md) (git-cliff); images come from `ko` per [containerize](../containerize/SKILL.md); signatures follow [cosign](../cosign/SKILL.md). ## Workflow 1. **Config**: `goreleaser init` writes a starter; trim it to the minimum and keep GoReleaser out of changelog duty. ```yaml version: 2 builds: - main: ./cmd/<slug> env: [CGO_ENABLED=0] goos: [linux, darwin] goarch: [amd64, arm64] ldflags: [-s -w -X main.version={{.Version}}] archives: - formats: [tar.gz] checksum: name_template: checksums.txt changelog: disable: true # git-cliff owns CHANGELOG.md and the release notes ``` 1. **Validate**: `goreleaser check` after every edit; `goreleaser healthcheck` confirms `git`, `cosign`, and `ko` are on the runner. 1. **Local dry run**: build every target without a tag and without publishing. ```bash goreleaser release --snapshot --clean goreleaser build --single-target --snapshot --clean -o dist/<slug> # this machine only ``` 1. **CI**: a `release.yml` workflow on `push: tags: ['v*']` with `permissions: contents: write` (plus `id-token: write` when signing), `actions/checkout` with `fetch-depth: 0`, `jdx/mise-action` for the toolchain, then the release with git-cliff notes; this workflow owns the GitHub release, so skip the `g