Skip to content

GoReleaser で Homebrew / GitHub Release 配布#3

Merged
polidog merged 6 commits into
mainfrom
feat/1
Jun 26, 2026
Merged

GoReleaser で Homebrew / GitHub Release 配布#3
polidog merged 6 commits into
mainfrom
feat/1

Conversation

@polidog

@polidog polidog commented Jun 26, 2026

Copy link
Copy Markdown
Member

タスク

vercel-env-sync を各環境向けバイナリとして配布できるようにする。

  • GoReleaser を導入する(.goreleaser.yaml を追加し goreleaser check が通る状態にする)。
  • クロスコンパイルで以下のプラットフォーム向けバイナリを生成する: darwin/amd64, darwin/arm64, linux/amd64, linux/arm64。
  • GitHub Actions ワークフロー(.github/workflows/release.yml)を追加し、v* タグの push をトリガに goreleaser がリリースを作成する。
  • バージョン情報をバイナリに埋め込む。main.go に --version フラグを追加し、ldflags で渡したバージョン/コミット/日付を表示できるようにする。
  • Homebrew tap(ptyhard/homebrew-tap)に formula を自動生成・push し、brew install ptyhard/tap/vercel-env-sync で導入できるようにする。
  • README にインストール手順(Homebrew / go install / バイナリ直接DL)を追記する。

完了条件

  • ルートに .goreleaser.yaml が存在し、goreleaser check がエラーなく通る。
  • darwin/amd64, darwin/arm64, linux/amd64, linux/arm64 の4バイナリがビルドされる。
  • .github/workflows/release.yml が存在し、v* タグ push で goreleaser release が走る設定になっている。
  • vercel-env-sync --version でバージョン・コミット・ビルド日が表示される。
  • Homebrew formula が tap リポジトリに生成され、brew install ptyhard/tap/vercel-env-sync で導入できる。
  • README にインストール手順が追記されている。

動作確認

  • lint / build 通過(go vetgo build エラーなし)
  • 設計・計画適合レビュー通過(Critical なし)
  • 統合テスト生成・通過(18 テストケース all passed)
  • コード品質チェック通過(Critical なし)
  • 受け入れテスト通過

品質チェック結果

なし(Critical / Warning ともに検出なし)

パフォーマンス診断

指摘なし(--version フラグは fmt.Printf + os.Exit のみ。実行時コストなし)

変更ファイル

  • main.go--version フラグと ldflags 変数を追加
  • .goreleaser.yaml — GoReleaser v2 設定(homebrew_casks 使用)
  • .github/workflows/release.ymlv* タグ push トリガーのリリースワークフロー
  • README.md — Homebrew / go install / バイナリ直接DLのインストール手順と HOMEBREW_TAP_TOKEN 設定手順を追記
  • main_test.go — parseFlags / parseDotenv / normalizeTarget / --version フラグの統合テスト(18件)

セットアップ手順(初回のみ)

Homebrew tap への自動 push には HOMEBREW_TAP_TOKEN を GitHub Secrets に設定してください。
詳細は README の「GitHub Secrets の設定」セクションを参照。

polidog and others added 2 commits June 26, 2026 16:09
- main.go に --version フラグを追加し、ldflags でバージョン/コミット/ビルド日を埋め込めるようにした
- .goreleaser.yaml を追加: darwin/linux × amd64/arm64 の4プラットフォームビルド、GitHub Release、Homebrew cask 自動生成
- .github/workflows/release.yml を追加: v* タグ push で goreleaser release を実行
- README にインストール手順(Homebrew / go install / バイナリDL)と HOMEBREW_TAP_TOKEN Secrets 設定手順を追記

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HUt4mQe7JfqLu2QPw6iYHL
parseFlags / parseDotenv / normalizeTarget と --version フラグの動作を検証する

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HUt4mQe7JfqLu2QPw6iYHL

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

GoReleaser を導入して vercel-env-sync をクロスコンパイルし、GitHub Releases / Homebrew tap 経由で配布できるようにするための変更です。あわせて --version フラグと統合テスト、README のインストール手順が追加されています。

Changes:

  • GoReleaser 設定(クロスコンパイル + リリース作成 + Homebrew への自動生成/Push)を追加
  • GitHub Actions で v* タグ push をトリガにリリースするワークフローを追加
  • --version フラグと統合テスト、README のインストール/Secrets 手順を追加

Reviewed changes

Copilot reviewed 5 out of 6 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
README.md インストール手順(Homebrew / go install / Releases)と Homebrew tap 用 Secrets 手順を追加
main.go ldflags 由来のバージョン情報変数と --version 出力を追加
main_test.go parseFlags/parseDotenv/normalizeTarget と --version などの統合テストを追加
.goreleaser.yaml GoReleaser v2 のビルド/アーカイブ/リリース/Homebrew 設定を追加
.gitignore GoReleaser の dist/ を ignore に追加
.github/workflows/release.yml タグ push で GoReleaser release を実行するワークフローを追加
Comments suppressed due to low confidence (1)

main.go:332

  • --version フラグを追加していますが、printUsage() のオプション一覧に --version が載っていないため、--help を見ても存在が分かりません。ヘルプ出力に --version を追記してください。
			os.Exit(0)
		case arg == "-h" || arg == "--help":
			printUsage()
			os.Exit(0)
		default:

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .goreleaser.yaml
Comment on lines +41 to +50
homebrew_casks:
- name: vercel-env-sync
repository:
owner: ptyhard
name: homebrew-tap
token: "{{ .Env.HOMEBREW_TAP_TOKEN }}"
homepage: https://github.com/ptyhard/vercel-env-sync
description: "Sync environment variables to Vercel from a definition file"
binaries:
- vercel-env-sync
Comment thread README.md
Comment on lines +23 to +27
### go install

```bash
go install github.com/ptyhard/vercel-env@latest
```
Comment thread .github/workflows/release.yml Outdated
go-version-file: go.mod
- uses: goreleaser/goreleaser-action@v6
with:
version: latest
- go.mod: module path を github.com/ptyhard/vercel-env-sync に変更し、go install で入るバイナリ名を配布名と統一
- README: go install のパスを修正、Homebrew Cask 配布である旨と --cask 補足を追記、Secrets 説明を cask に修正
- release.yml: goreleaser version を latest → "~> v2" に固定して再現性を確保
- main.go: printUsage のオプション一覧に --version を追記

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HUt4mQe7JfqLu2QPw6iYHL
@polidog

polidog commented Jun 26, 2026

Copy link
Copy Markdown
Member Author

Copilot のレビュー指摘に対応しました(commit 40be90a)。

  1. homebrew_casks vs brews: brews は GoReleaser v2.16 で削除済みdeprecations#brews)のため、homebrew_casks(Cask)を採用しています。brew install ptyhard/tap/vercel-env-sync は Homebrew が tap 配下の Cask も解決するためそのまま導入でき、完了条件を満たします。README に Cask 配布である旨と --cask 明示の補足を追記しました。
  2. go install のバイナリ名: ご指摘どおり module path 末尾が vercel-env でバイナリ名が食い違っていたため、go.mod の module path を github.com/ptyhard/vercel-env-sync に変更し、配布バイナリ名と統一しました。README の go install パスも修正済みです。
  3. version: latest: 再現性確保のため version: "~> v2" に固定しました。
  4. printUsage--version がない: --help のオプション一覧に --version を追記しました。

polidog and others added 3 commits June 26, 2026 17:29
別 tap リポジトリ(ptyhard/homebrew-tap)への push をやめ、本リポジトリの
Casks/ に cask を同梱する方式に変更。token を省略すると GITHUB_TOKEN が使われ
るため、追加の PAT 設定が不要になる。

- .goreleaser.yaml: homebrew_casks の repository を self に向け、token 行を削除、directory: Casks を明示
- release.yml: 不要になった HOMEBREW_TAP_TOKEN env を削除
- README: brew tap を URL 指定方式に変更、Secrets 設定セクションをリリース手順(メンテナ向け)に置き換え

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HUt4mQe7JfqLu2QPw6iYHL
brew install ptyhard/tap/vercel-env-sync で導入できる標準的な形にするため、
cask の push 先を本リポジトリ同梱から別リポジトリ ptyhard/homebrew-tap に戻す。
2要素 brew install は Homebrew 非対応のため、tap リポジトリ方式が最短。

- .goreleaser.yaml: homebrew_casks の repository を homebrew-tap + HOMEBREW_TAP_TOKEN に
- release.yml: HOMEBREW_TAP_TOKEN env を復活
- README: brew install ptyhard/tap/vercel-env-sync に戻し、HOMEBREW_TAP_TOKEN 設定手順を記載

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HUt4mQe7JfqLu2QPw6iYHL
@polidog polidog merged commit 7945b83 into main Jun 26, 2026
@polidog polidog deleted the feat/1 branch June 26, 2026 08:49
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.

2 participants