Shikloshi
Shikloshi

Reputation: 3811

Travis CI + Go: creating a specific build flow for different OS

I have a Go project that I want to build with Travis-CI and deploy it to a specific provider. I familiar with Gimme project that will use a cross-compilation to do so. But because Travis already support linux and osx I only need this feature for Windows build.

The big motivation is, of course, to avoid cross-compilation run time error as there are plenty of it.

My question is how can I create, in the same .travis.yml file, a different build flow:

  1. Native linux/os build (with "os" section).
  2. Windows compilation using Gimmme

The .travis.yml file for the first option will look something like:

language: go

go: 
  - 1.5.1

branches: 
  only: 
    - master

os:
    - osx
    - linux


before_script:
    - go get -d -v ./...

script:
    - go build -v ./...
    # - go test -v ./...

before_deploy: 
  -  chmod +x ./before_deploy.sh
  - ./before_deploy.sh

The .travis.yml file for the second option will look something like:

language: go

go: 
  - 1.5.1

branches: 
  only: 
    - master

env:
    - GIMME_OS=windows GIMME_ARCH=amd64


before_script:
    - go get -d -v ./...

script:
    - go build -v ./...
    # - go test -v ./...

before_deploy: 
  -  chmod +x ./before_deploy.sh
  - ./before_deploy.sh

Is there a nice clean way to combine these two (with Environment variables or any other crazy idea)?

Upvotes: 3

Views: 666

Answers (1)

Heero Yui
Heero Yui

Reputation: 180

It might be simple, but matrix environement can not be done for a specific OS ...

Then just select with local environement variable:

language: go
go: 
  - 1.5.1
branches: 
  only: 
    - master
os:
  - osx
  - linux
install:
  - if [ "$TRAVIS_OS_NAME" == "linux" ]; then
        export GIMME_OS=windows;
        export GIMME_ARCH=amd64;
    fi
before_script:
  - go get -d -v ./...
script:
  - go build -v ./...
after_script:
  - go test -v ./...
before_deploy: 
  - ./before_deploy.sh

An other way:

language: go
go: 
  - 1.5.1
branches: 
  only: 
    - master
matrix:
  include:
    - os: linux
      env: GIMME_OS=windows; GIMME_ARCH=amd64;
    - os: osx
before_script:
  - go get -d -v ./...
script:
  - go build -v ./...
after_script:
  - go test -v ./...
before_deploy: 
  - ./before_deploy.sh

Note: the commande: - chmod +x ./before_deploy.sh can be directly done in your repository and commited on it ...

Note: The environament variable can be accessibe: http://docs.travis-ci.com/user/environment-variables/#Default-Environment-Variables or calling \printenv`

Upvotes: 3

Related Questions