goreleaser release
コマンドに --single-target
フラグが存在しない
GoReleaser の build
サブコマンドには --single-target
フラグがあり、設定ファイルで複数の GOOS、GOARCH をターゲットとしていた場合でも特定のターゲットのみを対象にビルドを実行できます。しかし、release
サブコマンドにはその機能がありません。CI ジョブでアーティファクトの作成が成功するかをテストしようとすると、GoReleaser の設定ファイルに指定した GOOS と GOARCH のすべての組み合わせでアーティファクトが作成されるため、CI ジョブの実行時間が長くなる問題があります。正しくアーティファクトが作成できるかを確認するだけであれば、全てを対象とせずに特定のターゲットのみの実行で十分です。
goreleaser-filter ツールを使う
GoReleaser は v1.15.2 時点で将来的に指定したターゲットのアーティファクトを作成する機能を追加する予定があるようですが、Pro 版のみに提供予定のようです。
そこで、イシューコメントで提案のある goreleaser-filter ツールを使います。このツールは .goreleaser.yaml
ファイル(GoReleaser の設定ファイル)を標準入力経由で渡すと指定した GOOS と GOARCH のみをターゲットとするように書き換えた設定ファイルを出力してくれるシンプルなツールです。
例えばローカル環境の GOOS と GOARCH のみをターゲットとしてアーティファクトを作成したい場合は次のようにします。
cat .goreleaser.yml | \
go run github.com/t0yv0/goreleaser-filter@v0.3.0 -goos "$(go env GOOS)" -goarch "$(go env GOARCH)" | \
goreleaser release -f - --skip-validate --rm-dist --snapshot
べんり。