Learn-skills.dev goreleaser

install
source · Clone the upstream repo
git clone https://github.com/NeverSight/learn-skills.dev
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/NeverSight/learn-skills.dev "$T" && mkdir -p ~/.claude/skills && cp -r "$T/data/skills-md/aaronflorey/agent-skills/goreleaser" ~/.claude/skills/neversight-learn-skills-dev-goreleaser && rm -rf "$T"
manifest: data/skills-md/aaronflorey/agent-skills/goreleaser/SKILL.md
source content

GoReleaser Skill

GoReleaser automates the release process for software projects. It builds binaries, creates archives, publishes to package managers, builds Docker images, and generates changelogs.

Quick Reference

TaskReference File
Build configuration
references/builds.md
Archives (tar.gz, zip)
references/archives.md
Docker images
references/docker.md
Linux packages (deb/rpm)
references/nfpm.md
Homebrew/Scoop/AUR
references/homebrew.md
Signing & notarization
references/signing.md
Changelog generation
references/changelog.md
CI/CD integration
references/ci.md
Template variables
references/templates.md
Complete examples
references/examples.md

Essential Commands

# Initialize new config
goreleaser init

# Validate configuration
goreleaser check

# Test build locally (no publish)
goreleaser release --snapshot --clean

# Create release (usually run in CI)
goreleaser release

Configuration File

GoReleaser uses

.goreleaser.yaml
(or
.goreleaser.yml
). Enable schema validation:

# yaml-language-server: $schema=https://goreleaser.com/static/schema.json
version: 2

# Project name (defaults to directory name)
project_name: myapp

Minimal Go Configuration

# yaml-language-server: $schema=https://goreleaser.com/static/schema.json
version: 2

builds:
  - main: ./cmd/myapp
    binary: myapp
    goos: [linux, darwin, windows]
    goarch: [amd64, arm64]
    ldflags:
      - -s -w
      - -X main.version={{.Version}}

archives:
  - formats: [tar.gz]
    format_overrides:
      - goos: windows
        formats: [zip]

changelog:
  sort: asc
  filters:
    exclude:
      - "^docs:"
      - "^test:"

Build Targets

Go (default)

builds:
  - builder: go  # optional, default
    main: ./cmd/app
    goos: [linux, darwin, windows]
    goarch: [amd64, arm64]
    goarm: ["6", "7"]  # for ARM builds

Rust

builds:
  - builder: rust
    targets:
      - x86_64-unknown-linux-gnu
      - x86_64-apple-darwin
      - aarch64-apple-darwin

Zig

builds:
  - builder: zig
    targets:
      - x86_64-linux-gnu
      - x86_64-macos
      - aarch64-macos

Prebuilt Binaries

builds:
  - builder: prebuilt
    prebuilt:
      path: dist/myapp_{{ .Os }}_{{ .Arch }}/myapp{{ .Ext }}

Common Patterns

Version Injection (Go)

builds:
  - ldflags:
      - -X main.version={{.Version}}
      - -X main.commit={{.Commit}}
      - -X main.date={{.Date}}

CGO Disabled

builds:
  - env:
      - CGO_ENABLED=0

Multiple Binaries

builds:
  - id: cli
    main: ./cmd/cli
    binary: myapp
  - id: server
    main: ./cmd/server
    binary: myapp-server

Publishing

Homebrew Tap

brews:
  - repository:
      owner: myorg
      name: homebrew-tap
    homepage: https://example.com
    description: "My application"

Docker Images

dockers_v2:
  - dockerfile: Dockerfile
    images:
      - "ghcr.io/myorg/myapp:{{ .Tag }}"
      - "ghcr.io/myorg/myapp:latest"

GitHub Release

release:
  github:
    owner: myorg
    name: myrepo
  draft: false
  prerelease: auto

Environment Variables

VariablePurpose
GITHUB_TOKEN
GitHub API access
GITLAB_TOKEN
GitLab API access
GITEA_TOKEN
Gitea API access
GORELEASER_KEY
Pro license key

Workflow

  1. Initialize:
    goreleaser init
    creates
    .goreleaser.yaml
  2. Configure: Edit config for your needs (see reference files)
  3. Validate:
    goreleaser check
    verifies configuration
  4. Test:
    goreleaser release --snapshot --clean
    tests locally
  5. Release: Tag and push, CI runs
    goreleaser release

When to Load References

  • Setting up builds: Load
    references/builds.md
    for complete build options
  • Configuring Docker: Load
    references/docker.md
    for multi-arch images
  • Linux packages: Load
    references/nfpm.md
    for deb/rpm/apk packages
  • Package managers: Load
    references/homebrew.md
    for Homebrew/Scoop/AUR/etc.
  • CI setup: Load
    references/ci.md
    for GitHub Actions/GitLab CI
  • Template syntax: Load
    references/templates.md
    for available variables
  • Complete examples: Load
    references/examples.md
    for copy-paste configs