mcpField
G
goreleaser

goreleaser

github.com/aaronfloreyクラウド・DevOps243 回インストール22 週間前に更新
リポジトリ

goreleaser について

GoReleaserでソフトウェアのビルドとリリースを設定するためのスキルです。ビルド、パッケージ化、署名、変更履歴、CIワークフローを扱います。

主な機能

  1. 01ビルドとターゲットの設定
  2. 02アーカイブとパッケージの設定
  3. 03Dockerイメージの公開
  4. 04署名と公証の設定
  5. 05変更履歴とCIのガイド

活用シーン

  1. 01GoReleaserのリリース設定
  2. 02公開前のローカルリリーステスト
  3. 03パッケージマネージャー経由のバイナリ公開
  4. 04release-pleaseとGoReleaserの連携

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/aaronflorey/agent-skills --skill goreleaser

インストール後、Claude Code で/goreleaserを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
archives.md
builds.md
changelog.md
ci.md
docker.md
examples.md
homebrew.md
nfpm.md
signing.md
templates.md

詳細

GoReleaser スキル

GoReleaser は、ソフトウェアプロジェクトのリリースプロセスを自動化します。バイナリのビルド、アーカイブの作成、パッケージマネージャーへの公開、Docker イメージのビルド、変更履歴の生成を行います。

クイックリファレンス

タスクリファレンスファイル
ビルド設定references/builds.md
アーカイブ(tar.gz、zip)references/archives.md
Docker イメージreferences/docker.md
Linux パッケージ(deb/rpm)references/nfpm.md
Homebrew/Scoop/AURreferences/homebrew.md
署名と公証references/signing.md
変更履歴の生成references/changelog.md
CI/CD 統合references/ci.md
release-please 統合../release-please/references/release-please-goreleaser-unified-workflow.md
テンプレート変数references/templates.md
完全な例references/examples.md

基本的なコマンド

# 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

設定ファイル

GoReleaser は .goreleaser.yaml(または .goreleaser.yml)を使用します。スキーマ検証を有効にします。

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

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

Go の最小設定

# 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:"

ビルドターゲット

Go(デフォルト)
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
ビルド済みバイナリ
builds:
  - builder: prebuilt
    prebuilt:
      path: dist/myapp_{{ .Os }}_{{ .Arch }}/myapp{{ .Ext }}

よく使われるパターン

バージョンの埋め込み(Go)
builds:
  - ldflags:
      - -X main.version={{.Version}}
      - -X main.commit={{.Commit}}
      - -X main.date={{.Date}}
CGO の無効化
builds:
  - env:
      - CGO_ENABLED=0
複数のバイナリ
builds:
  - id: cli
    main: ./cmd/cli
    binary: myapp
  - id: server
    main: ./cmd/server
    binary: myapp-server

公開

Homebrew Tap
brews:
  - repository:
      owner: myorg
      name: homebrew-tap
    homepage: https://example.com
    description: "My application"
Docker イメージ
dockers_v2:
  - dockerfile: Dockerfile
    images:
      - "ghcr.io/myorg/myapp:{{ .Tag }}"
      - "ghcr.io/myorg/myapp:latest"
GitHub リリース
release:
  github:
    owner: myorg
    name: myrepo
  draft: false
  prerelease: auto

環境変数

変数用途
GITHUB_TOKENGitHub API へのアクセス
GITLAB_TOKENGitLab API へのアクセス
GITEA_TOKENGitea API へのアクセス
GORELEASER_KEYPro ライセンスキー

ワークフロー

  1. 初期化:goreleaser init で .goreleaser.yaml を作成します
  2. 設定:必要に応じて設定を編集します(リファレンスファイルを参照)
  3. 検証:goreleaser check で設定を検証します
  4. テスト:goreleaser release --snapshot --clean でローカルテストを行います
  5. リリース:タグを付けてプッシュすると、CI が goreleaser release を実行します

release-please 統合ルール

プロジェクトで release-please と GoReleaser の両方を使用する場合は、別々の連鎖ワークフローではなく、必ず統合ワークフロー(同じワークフローファイル)で実装します。

標準の統合手順として ../release-please/references/release-please-goreleaser-unified-workflow.md を使用してください。

  • 最初に googleapis/release-please-action@v4 を実行します。
  • その出力(release_created、tag_name)を使用して、GoReleaser を条件付きで実行します。
  • goreleaser release --clean の前に、ref: ${{ needs.release-please.outputs.tag_name }} をチェックアウトします。
  • GITHUB_TOKEN を使用し、GoReleaser のトリガーだけを目的としたカスタム PAT の導入は避けます。

これにより、GitHub Actions のトークン再帰の問題を回避し、リリーストリガー用 PAT による回避策が不要になります。

リファレンスを読み込むタイミング

  • ビルドの設定:ビルドオプションの全容については references/builds.md を読み込みます
  • Docker の設定:マルチアーキテクチャイメージについては references/docker.md を読み込みます
  • Linux パッケージ:deb/rpm/apk パッケージについては references/nfpm.md を読み込みます
  • パッケージマネージャー:Homebrew/Scoop/AUR などについては references/homebrew.md を読み込みます
  • CI の設定:GitHub Actions/GitLab CI については references/ci.md を読み込みます
  • release-please の統合:カスタム PAT を使わない統合ワークフローについては ../release-please/references/release-please-goreleaser-unified-workflow.md を読み込みます
  • テンプレート構文:使用可能な変数については references/templates.md を読み込みます
  • 完全な例:コピーして使える設定については references/examples.md を読み込みます

コメント