Travis-CI には Github release にファイルを登録する機能があります。 (参考)
この機能と Go のクロスコンパイル機能を使って、 tag に自動的に Windows 向けのバイナリを登録してみます。 成功したリポジトリがこちらにあります。 methane/localserver
Makefile で Windows 向けバイナリを作る
GOOS と GOARCH を指定してクロスコンパイルし、 Github にアップロードしたい zip ファイルを作ります。ここでは Windows 用の 32bit 版だけ用意しています。この例では localserver-win32.zip
が生成されます。
.PHONY: all
all:
GOOS=windows GOARCH=386 go build -o localserver.exe
zip localserver-win32.zip localserver.exe
Travis CLI を使って準備
gem install travis
をして、 travis のコマンドラインツールが実行できるようにしておきます。 (gem とか面倒なので Travis の CLI も Go にして欲しいですね)
travis setup releases
コマンドを実行すると、 Github のユーザー名とパスワードを聞かれるので、それを入力すると、 Travis からアップロードするのに使われる API key を作成し、 .travis.yml
に必要最低限の deploy:
のセクションを作ってくれます。
.travis.yml
の設定
クロスコンパイル環境の用意
Travis の Go は gvm を使って管理されていて、クロスコンパイル環境が用意されていません。
クロスコンパイル環境を用意するには mitchellh/gox が便利です。
GOPATH が /home/travis/gopath:/home/travis/.gvm/pkgsets/go1.2/global
になっているので、 gox
のコマンドがインストールされる /home/travis/gopath/bin
に PATH も設定しておきます。
gox -build-toolchain
でクロスコンパイル環境を用意します。今回は windows/386 環境だけ用意できればいいので、 gox -build-toolchain -osarch=windows/386
としておきます。
language: go
go: 1.3
env: "PATH=/home/travis/gopath/bin:$PATH"
install:
- go get github.com/mitchellh/gox
- gox -build-toolchain -osarch=windows/386
# (続く)
Github release へ deploy
script で make
を実行し、 zip ファイルを作ります。 この zip ファイルが deploy 時に消されないように deploy: skip_cleanup: true
を設定しておき、 deploy: file:
でファイル名を指定します。
on: tags: true
を設定し、タグが打たれたリビジョンだけ deploy するようにします。
ただし、 Travis-CI のバグ があるので、 同時に deploy: all_branches: true
の設定も必要です。
# (続き)
script: make
deploy:
provider: releases
api_key:
secure: <travis setup releases で生成した暗号化されたAPI Key>
file: localserver-win32.zip
skip_cleanup: true
all_branches: true # https://github.com/travis-ci/travis-ci/issues/1675
on:
tags: true
これで、タグを push すると自動で Windows 版のバイナリを zip で Github release に登録してくれるようになります。