sudo: true  # required for CI push into Kubernetes.
language: go
os: linux
go: "1.10"

go_import_path: github.com/google/certificate-transparency-go

env:
  - GCE_CI=${ENABLE_GCE_CI} GOFLAGS=
  - GOFLAGS=-race
  - GOFLAGS=      WITH_ETCD=true WITH_COVERAGE=true
  - GOFLAGS=-race WITH_ETCD=true

matrix:
  fast_finish: true

addons:
  apt:
    sources:
      - mysql-5.7-trusty
    packages:
      - mysql-server
      - mysql-client

services:
  - docker

before_install:
  - sudo mysql -e "use mysql; update user set authentication_string=PASSWORD('') where User='root'; update user set plugin='mysql_native_password';FLUSH PRIVILEGES;"
  - sudo mysql_upgrade
  - sudo service mysql restart

install:
  - mkdir ../protoc
  - |
    (
      cd ../protoc
      wget https://github.com/google/protobuf/releases/download/v3.5.1/protoc-3.5.1-${TRAVIS_OS_NAME}-x86_64.zip
      unzip protoc-3.5.1-${TRAVIS_OS_NAME}-x86_64.zip
    )
  - export PATH=$(pwd)/../protoc/bin:$PATH
  - go get -d -t ./...
  - go get github.com/alecthomas/gometalinter
  - gometalinter --install
  - go get -u github.com/golang/protobuf/proto
  - go get -u github.com/golang/protobuf/protoc-gen-go
  - go install github.com/golang/mock/mockgen
  # install vendored etcd binary
  - go install ./vendor/github.com/coreos/etcd/cmd/etcd
  - go install ./vendor/github.com/coreos/etcd/cmd/etcdctl
  - pushd ${GOPATH}/src/github.com/google/trillian
  - go get -d -t ./...
  - popd

script:
  - set -e
  - cd $HOME/gopath/src/github.com/google/certificate-transparency-go
  - ./scripts/presubmit.sh ${PRESUBMIT_OPTS} ${WITH_COVERAGE:+--coverage}
  - |
      # Check re-generation didn't change anything
      status=$(git status --porcelain | grep -v coverage) || :
      if [[ -n ${status} ]]; then
        echo "Regenerated files differ from checked-in versions: ${status}"
        git status
        git diff
        exit 1
      fi
  - |
      if [[ "${WITH_ETCD}" == "true" ]]; then
        export ETCD_DIR="${GOPATH}/bin"
      fi
  - ./trillian/integration/integration_test.sh
  - HAMMER_OPTS="--operations=1500" ./trillian/integration/ct_hammer_test.sh
  - set +e

after_success:
  - cp /tmp/coverage.txt .
  - bash <(curl -s https://codecov.io/bash)
  - |
      # Push up to GCE CI instance if we're running after a merge to master
      if [[ "${GCE_CI}" == "true" ]] && [[ $TRAVIS_PULL_REQUEST == "false" ]] && [[ $TRAVIS_BRANCH == "master" ]]; then
        . scripts/install_cloud.sh
        echo ${GCLOUD_SERVICE_KEY_CI} | base64 --decode -i > ${HOME}/gcloud-service-key.json
        gcloud auth activate-service-account --key-file ${HOME}/gcloud-service-key.json
        rm ${HOME}/gcloud-service-key.json
        . scripts/deploy_gce_ci.sh
      fi
