複数のバージョンでテストしたあとテストをパスしたら特定の環境でビルドしたいケースがあるかと思いますが、そんな時のTipsです。
例えば、下記のようなパターンで、テストはgolangのversionとBuild osをマトリックスしたパターン。このパターンでは3x3=9つのパターンでテストが実施されます。
.travis.yml
language: go
go:
- 1.4.3
- 1.5.3
- tip
env:
global:
- BUILD_GOARCH=amd64
matrix:
- BUILD_GOOS=linux
- BUILD_GOOS=darwin
- BUILD_GOOS=windows
install:
- go get golang.org/x/tools/cmd/vet
- go get -v github.com/zquestz/s
script:
- go build
- go fmt ./...
- go vet ./...
- go test -i -race ./...
- go test -v -race ./...
この後、リリース用にBuildしたいとおもうと、普通は下記のようにafter_script:を書いて、deploy:でリリースするか思います。
after_script:
deploy:
provider: releases
api_key: "GITHUB OAUTH TOKEN"
file: "FILE TO UPLOAD"
skip_cleanup: true
on:
tags: true
ただ、これだと9つのマトリックス全てで実行されてしまい、9回deployされてしまいます。これを防ぐには、あまり綺麗とは言えませんが、Travis内の環境変数を取得して、シェルスクリプト内で判断するのが良さそうです。
例えば、go version 1.5.3、BUILD_GOOS=linux gitのtagありで実行させる場合、下記のように書くとよいです。
.travis.yml
after_script:
- if [ "$TRAVIS_GO_VERSION" = "1.5.3" ] && [ "$BUILD_GOOS" = "linux" ] && [ "$TRAVIS_TAG" != "" ]; then go get github.com/inconshreveable/mousetrap; fi
TravisCI内で取れる環境変数は、こちらにまとまっています。