Goで書いたツールのバイナリ配布ってどうやれば良いのかなーと思っていたら、goreleaser というツールを見つけたので使ってみた。非常に便利だったのでメモしておく。
goreleaserの設定を行う
まずはリリースの設定を行う。レポジトリのルートに.goreleaser.ymlというのを置いて設定していく。僕はこんな感じで設定した。
https://github.com/shibayu36/shibayu36/blob/v0.0.5/.goreleaser.yml
builds:
- binary: shibayu36
goos:
- windows
- darwin
- linux
goarch:
- amd64
- 386
archive:
format: zip
name_template: "{{ .ProjectName }}_{{ .Os }}_{{ .Arch }}"
files:
- README.md
release:
github:
owner: shibayu36
name: shibayu36
一つ一つ説明していくと
- buildsのセクションでクロスコンパイルの設定ができる
- archiveのセクションでzipとかの圧縮形式の設定ができる
- 今回は全部zipで圧縮
- name_templateでディレクトリ名の設定
- デフォルトでは
{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}
なのだけど、バージョン番号はリリースタグで分かるし、Arm用にはビルドしないので、シンプルなものに変更した
- さらにアーカイブにはREADME.mdも入れるように
- releaseのセクションで、Github Releasesへの配布の設定をする
- 今回はshibayu36/shibayu36のレポジトリに配置したいのでownerとnameを設定した
これで設定は終わり。
実際に手元からgoreleaserでリリースする
リリースするときは、GithubでPersonal access tokenをrepo権限で発行して、以下のようなコマンドを打つだけ。
$ git tag v0.0.5
$ GITHUB_TOKEN=... goreleaser --rm-dist
• running goreleaser dev
• loading config file file=.goreleaser.yml
• SETTING DEFAULTS
• GETTING AND VALIDATING GIT STATE
• releasing v0.0.5, commit a02b3bd5240af3b7898bbfe2adcb1aad4ae39dbf
• LOADING ENVIRONMENT VARIABLES
• CHECKING ./DIST
• --rm-dist is set, removing ./dist
• BUILDING BINARIES
• building binary=dist/shibayu36_windows_386/shibayu36.exe
• building binary=dist/shibayu36_darwin_386/shibayu36
• building binary=dist/shibayu36_darwin_amd64/shibayu36
• building binary=dist/shibayu36_windows_amd64/shibayu36.exe
• building binary=dist/shibayu36_linux_amd64/shibayu36
• building binary=dist/shibayu36_linux_386/shibayu36
• CREATING ARCHIVES
• creating archive=dist/shibayu36_linux_386.zip
• creating archive=dist/shibayu36_windows_amd64.zip
• creating archive=dist/shibayu36_darwin_amd64.zip
• creating archive=dist/shibayu36_darwin_386.zip
• creating archive=dist/shibayu36_windows_386.zip
• creating archive=dist/shibayu36_linux_amd64.zip
• new release artifact artifact=shibayu36_windows_386.zip
• new release artifact artifact=shibayu36_linux_386.zip
• new release artifact artifact=shibayu36_windows_amd64.zip
• new release artifact artifact=shibayu36_linux_amd64.zip
• new release artifact artifact=shibayu36_darwin_386.zip
• new release artifact artifact=shibayu36_darwin_amd64.zip
• 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=shibayu36_windows_amd64.zip
• checksumming file=shibayu36_windows_386.zip
• checksumming file=shibayu36_linux_386.zip
• checksumming file=shibayu36_linux_amd64.zip
• checksumming file=shibayu36_darwin_386.zip
• checksumming file=shibayu36_darwin_amd64.zip
• new release artifact artifact=shibayu36_0.0.5_checksums.txt
• CREATING DOCKER IMAGES
• skipped reason=docker section is not configured
• RELEASING TO GITHUB
• creating or updating release repo=shibayu36/shibayu36 tag=v0.0.5
• release updated url=https://github.com/shibayu36/shibayu36/releases/tag/v0.0.5
• uploading to release file=dist/shibayu36_linux_amd64.zip name=shibayu36_linux_amd64.zip
• uploading to release file=dist/shibayu36_windows_386.zip name=shibayu36_windows_386.zip
• uploading to release file=dist/shibayu36_windows_amd64.zip name=shibayu36_windows_amd64.zip
• uploading to release file=dist/shibayu36_linux_386.zip name=shibayu36_linux_386.zip
• uploading to release file=dist/shibayu36_darwin_386.zip name=shibayu36_darwin_386.zip
• uploading to release file=dist/shibayu36_darwin_amd64.zip name=shibayu36_darwin_amd64.zip
• uploading to release file=dist/shibayu36_0.0.5_checksums.txt name=shibayu36_0.0.5_checksums.txt
• CREATING HOMEBREW FORMULA
• skipped reason=brew section is not configured
• SUCCESS!
これで、https://github.com/shibayu36/shibayu36/releases/tag/v0.0.5 にリリースがなされた。便利!
TravisCIで自動リリースする
タグを打ってpushした時に自動でTravisCIでビルドしたいなら、.travis.ymlを以下のように設定する。
https://github.com/shibayu36/shibayu36/blob/v0.0.5/.travis.yml
language: go
go:
- 1.9
script:
- make test
after_success:
- test -n "$TRAVIS_TAG" && curl -sL https://git.io/goreleaser | bash
またTravisCIの設定で、GITHUB_TOKENを設定するのを忘れずに。
あとは以下のようにコマンドを打つと、TravisCIが勝手にビルドしてリリースまでしてくれる。
$ git tag v0.0.5
$ git push
$ git push --tags
便利!