Go
golang
goreleaser

goreleaser を使って Github Releases へ簡単デプロイ #golang

以前の記事(Golang のバイナリにバージョンを埋め込む)で Git のタグとショートバージョンをバイナリに埋め込みましたが kyoh86 さんから goreleaser を教えてもらいましたので試してみます。

goreleaser とは

バイナリのクロスコンパイル(バージョンも埋め込める)と Github Releases へのデプロイを簡単にできちゃう便利ツールみたいです。
詳細は本家のサイトを参照してください。チュートリアルが充実しててわかりやすいです。
https://goreleaser.com

試してみる

goreleaser インストール

$ go get github.com/goreleaser/goreleaser

チュートリアルに従って設定ファイルを作成

main の go ファイルと binary の名前、ビルド対象の OS だけを指定します。

.goreleaser.yml
# .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 を選択します。
Kobito.WwwrUz.png

「Personal access tokens」 -> 「Generate new token」 から Token を作成します。

Kobito.VXYTGk.png

Kobito.bSqfg8.png

goreleaser 用の Token を発行

とりあえず、Token Description を適当に入力して、チュートリアル通り repo にチェックをつけます。
Kobito.OcDOby.png

発行された 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
Kobito.LHpum9.png

バイナリにバージョンも問題なく埋め込まれていることを確認できました。

$ apichecker -v
version( 1.0.1 )

Appendix