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


以前の記事（[Golang のバイナリにバージョンを埋め込む](https://qiita.com/ynozue/items/385fc18de7af997fcd79)）で Git のタグとショートバージョンをバイナリに埋め込みましたが [kyoh86](https://qiita.com/kyoh86) さんから goreleaser を教えてもらいましたので試してみます。

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

# 試してみる
## goreleaser インストール
```sh
$ go get github.com/goreleaser/goreleaser
```

## チュートリアルに従って設定ファイルを作成
main の go ファイルと binary の名前、ビルド対象の OS だけを指定します。

```yml:.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](https://qiita-image-store.s3.amazonaws.com/0/203864/1b55e243-da8a-b63c-bdf0-3d13c77ec481.png "Kobito.WwwrUz.png")

### 「Personal access tokens」 -> 「Generate new token」 から Token を作成します。
![Kobito.VXYTGk.png](https://qiita-image-store.s3.amazonaws.com/0/203864/3a89149d-362a-0d4c-ea01-9a428af3b364.png "Kobito.VXYTGk.png")

![Kobito.bSqfg8.png](https://qiita-image-store.s3.amazonaws.com/0/203864/176f98bb-362c-e033-e018-4945cfee985b.png "Kobito.bSqfg8.png")

### goreleaser 用の Token を発行
とりあえず、Token Description を適当に入力して、チュートリアル通り repo にチェックをつけます。
![Kobito.OcDOby.png](https://qiita-image-store.s3.amazonaws.com/0/203864/3e185a2f-1c2d-5aef-99c0-7e00813e8e88.png "Kobito.OcDOby.png")

### 発行された Token を設定
先ほど発行した Token を 「YOUR_TOKEN」に入力してください。

```sh
$ export GITHUB_TOKEN="YOUR_TOKEN"
```
※ チュートリアルだとなぜかバッククォートになっているので注意してください。

## git のタグをつける
```sh
$ git tag v1.0.1
$ git push --tags
```

## goreleaser 実行
```sh
$ 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](https://qiita-image-store.s3.amazonaws.com/0/203864/d009bd72-84d9-aedb-deb0-ce70f9b6f146.png "Kobito.LHpum9.png")

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

```sh
$ apichecker -v
version( 1.0.1 )
```

# Appendix
* [ソースコード](https://github.com/ynozue/apichecker/tree/goreleaser)