Travis-CI で Go の Windows 用バイナリを Github release に登録する

More than 5 years have passed since last update.

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 としておきます。


.travis.yml

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 の設定も必要です。


.travis.yml

# (続き)

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 に登録してくれるようになります。