以前の記事(Golang のバイナリにバージョンを埋め込む)で Git のタグとショートバージョンをバイナリに埋め込みましたが kyoh86 さんから goreleaser を教えてもらいましたので試してみます。
goreleaser とは
バイナリのクロスコンパイル(バージョンも埋め込める)と Github Releases へのデプロイを簡単にできちゃう便利ツールみたいです。
詳細は本家のサイトを参照してください。チュートリアルが充実しててわかりやすいです。
https://goreleaser.com
試してみる
goreleaser インストール
$ go get github.com/goreleaser/goreleaser
チュートリアルに従って設定ファイルを作成
main の go ファイルと binary の名前、ビルド対象の OS だけを指定します。
# .goreleaser.yml
# Build customization
builds:
- main: apichecker.go
binary: apichecker
goos:
- windows
- darwin
- linux
goarch:
- amd64
GitHub の Token を設定
一応、Access Token の取得方法について書いておきます。
わかってるよーって人はスキップしてください。
GitHub の Token を取得
GitHub の Settings を開いて、 Developer settings を選択します。
「Personal access tokens」 -> 「Generate new token」 から Token を作成します。
goreleaser 用の Token を発行
とりあえず、Token Description を適当に入力して、チュートリアル通り repo にチェックをつけます。
発行された Token を設定
先ほど発行した Token を 「YOUR_TOKEN」に入力してください。
$ export GITHUB_TOKEN="YOUR_TOKEN"
※ チュートリアルだとなぜかバッククォートになっているので注意してください。
git のタグをつける
$ git tag v1.0.1
$ git push --tags
goreleaser 実行
$ goreleaser
• running goreleaser dev
• loading config file file=.goreleaser.yml
• SETTING DEFAULTS
• GETTING AND VALIDATING GIT STATE
• releasing v1.0.1, commit ce33f1ea8a290f6c8d5945359e14b4ae94da6786
• GENERATING CHANGELOG
• LOADING ENVIRONMENT VARIABLES
• CHECKING ./DIST
• BUILDING BINARIES
• building binary=dist/apichecker_1.0.1_windows_amd64/apichecker.exe
• building binary=dist/apichecker_1.0.1_darwin_amd64/apichecker
• building binary=dist/apichecker_1.0.1_linux_amd64/apichecker
• CREATING ARCHIVES
• creating archive=dist/apichecker_1.0.1_darwin_amd64.tar.gz
• creating archive=dist/apichecker_1.0.1_linux_amd64.tar.gz
• creating archive=dist/apichecker_1.0.1_windows_amd64.tar.gz
• new release artifact artifact=apichecker_1.0.1_windows_amd64.tar.gz
• new release artifact artifact=apichecker_1.0.1_linux_amd64.tar.gz
• new release artifact artifact=apichecker_1.0.1_darwin_amd64.tar.gz
• CREATING LINUX PACKAGES WITH FPM
• skipped reason=no output formats configured
• CREATING LINUX PACKAGES WITH SNAPCRAFT
• skipped reason=no summary nor description were provided
• CALCULATING CHECKSUMS
• checksumming file=apichecker_1.0.1_linux_amd64.tar.gz
• checksumming file=apichecker_1.0.1_darwin_amd64.tar.gz
• checksumming file=apichecker_1.0.1_windows_amd64.tar.gz
• new release artifact artifact=apichecker_1.0.1_checksums.txt
• CREATING DOCKER IMAGES
• skipped reason=docker section is not configured
• RELEASING TO GITHUB
• creating or updating release repo=ynozue/apichecker tag=v1.0.1
• release updated url=https://github.com/ynozue/apichecker/releases/tag/v1.0.1
• uploading to release file=dist/apichecker_1.0.1_checksums.txt name=apichecker_1.0.1_checksums.txt
• uploading to release file=dist/apichecker_1.0.1_darwin_amd64.tar.gz name=apichecker_1.0.1_darwin_amd64.tar.gz
• uploading to release file=dist/apichecker_1.0.1_windows_amd64.tar.gz name=apichecker_1.0.1_windows_amd64.tar.gz
• uploading to release file=dist/apichecker_1.0.1_linux_amd64.tar.gz name=apichecker_1.0.1_linux_amd64.tar.gz
• CREATING HOMEBREW FORMULA
• skipped reason=brew section is not configured
• SUCCESS!
確認
GitHub の Releases に v1.0.1 に対応したソースコードやバイナリがアップロードされたことが確認できました。
https://github.com/ynozue/apichecker/releases
バイナリにバージョンも問題なく埋め込まれていることを確認できました。
$ apichecker -v
version( 1.0.1 )