タグを打つ前にビルド結果を確認したい
goreleaserは通常、Gitのタグをトリガーにビルド・パッケージング・GitHubへの公開までを一気に行う。しかし、タグを打つたびにアーカイブの中身やビルドオプションを確認していては手間がかかる。goreleaserには、タグの作成やGitHubへの公開といった実際のリリース操作を伴わずに、ローカルでビルド結果だけを確認できるオプションが用意されている。
release –snapshot でリリース一式をローカルに生成する
goreleaser releaseに--snapshotを付けると、Gitのタグやリモートリポジトリの状態を検証せず、distディレクトリ配下にビルド成果物一式を生成できる。GitHubへの公開などのパブリッシュ処理はスキップされる。
$ goreleaser release --snapshot --clean
• starting release
• skipping announce, publish, and validate...
• cleaning distribution directory
...
• snapshotting
• building snapshot... version=0.0.0-SNAPSHOT-bbc9033
• building binaries
• building paths=[./cmd/myapp] binaries=[myapp] target=darwin_arm64_v8.0
• building paths=[./cmd/myapp] binaries=[myapp] target=linux_amd64_v1
...
• archives
• archiving name=dist/example_Darwin_arm64.tar.gz
• archiving name=dist/example_Linux_x86_64.tar.gz
...
• release succeeded after 2s
• thanks for using GoReleaser!
--cleanは実行前に既存のdistディレクトリを削除するオプションであり、前回の生成物が残っていても気にせず再実行できる。
.goreleaser.yamlのbuildsに設定した全プラットフォーム分のバイナリと、archivesで設定したアーカイブ形式(tar.gzやzip)がdist配下に生成される。
$ find dist -maxdepth 1
dist
dist/example_darwin_arm64_v8.0
dist/example_linux_amd64_v1
dist/example_Darwin_arm64.tar.gz
dist/example_Linux_x86_64.tar.gz
dist/example_0.0.0-SNAPSHOT-bbc9033_checksums.txt
...
アーカイブのファイル名にはデフォルトでバージョンが含まれないため、example_Darwin_arm64.tar.gzのようにOS名とアーキテクチャのみの名前になる。一方、checksumsファイルの名前にはバージョンが含まれる。
生成されたバイナリは実際に実行して動作を確認できる。
$ ./dist/example_darwin_arm64_v8.0/myapp
hello
build –single-target で現在の環境向けだけをビルドする
複数プラットフォーム分のビルドは時間がかかるため、動作確認だけしたい場合はgoreleaser buildに--single-targetを付けると、実行しているマシンのOS・アーキテクチャ向けのバイナリだけをビルドできる。アーカイブ化やチェックサムの計算は行われず、ビルドのみが実行される。
$ goreleaser build --single-target --snapshot --clean
• partial
• snapshotting
• building snapshot... version=0.0.0-SNAPSHOT-bbc9033
• building binaries
• partial build match=target=darwin_arm64_v8.0
• building paths=[./cmd/myapp] binaries=[myapp] target=darwin_arm64_v8.0
• build succeeded after 0s
• thanks for using GoReleaser!
buildコマンドでも、タグの検証を省略するために--snapshotを付ける必要がある。
GOOS・GOARCHでビルド対象を指定する
--single-target使用時、環境変数GOOS・GOARCHを指定すると、現在のマシン以外のターゲット向けにビルドできる。
$ GOOS=linux GOARCH=amd64 goreleaser build --single-target --snapshot --clean
• partial build match=target=linux_amd64_v1
• building paths=[./cmd/myapp] binaries=[myapp] target=linux_amd64_v1
• build succeeded after 0s
-o オプションでバイナリの出力先を指定する
-o(--output)オプションを使うと、ビルドしたバイナリを指定したパスにコピーできる。dist配下のディレクトリ構成を気にせず、バイナリの場所を直接指定したい場合に使う。
$ goreleaser build --single-target --snapshot --clean -o ./myapp
• copying binary to "./myapp"
• build succeeded after 0s
$ ./myapp
hello
