language: c

sudo: false

cache:
  directories:
    - $HOME/travis-cache

os:
  - linux
  - osx

compiler:
  - clang
  - gcc

addons:
  apt:
    packages:
    - language-pack-is
    - git-svn
    - apache2

env:
  global:
    - DEVELOPER=1
    # The Linux build installs the defined dependency versions below.
    # The OS X build installs the latest available versions. Keep that
    # in mind when you encounter a broken OS X build!
    - LINUX_P4_VERSION="16.2"
    - LINUX_GIT_LFS_VERSION="1.5.2"
    - DEFAULT_TEST_TARGET=prove
    - GIT_PROVE_OPTS="--timer --jobs 3 --state=failed,slow,save"
    - GIT_TEST_OPTS="--verbose-log"
    - GIT_TEST_CLONE_2GB=YesPlease
    # t9810 occasionally fails on Travis CI OS X
    # t9816 occasionally fails with "TAP out of sequence errors" on Travis CI OS X
    - GIT_SKIP_TESTS="t9810 t9816"

matrix:
  include:
    - env: Windows
      os: linux
      compiler:
      addons:
      before_install:
      before_script:
      script:
        - >
          test "$TRAVIS_REPO_SLUG" != "git/git" ||
          ci/run-windows-build.sh $TRAVIS_BRANCH $(git rev-parse HEAD)
      after_failure:
    - env: Linux32
      os: linux
      services:
        - docker
      before_install:
        - docker pull daald/ubuntu32:xenial
      before_script:
      script:
        - >
          docker run
          --interactive
          --env DEFAULT_TEST_TARGET
          --env GIT_PROVE_OPTS
          --env GIT_TEST_OPTS
          --env GIT_TEST_CLONE_2GB
          --volume "${PWD}:/usr/src/git"
          daald/ubuntu32:xenial
          /usr/src/git/ci/run-linux32-build.sh $(id -u $USER)
        # Use the following command to debug the docker build locally:
        # $ docker run -itv "${PWD}:/usr/src/git" --entrypoint /bin/bash daald/ubuntu32:xenial
        # root@container:/# /usr/src/git/ci/run-linux32-build.sh
    - env: Documentation
      os: linux
      compiler: clang
      addons:
        apt:
          packages:
          - asciidoc
          - xmlto
      before_install:
      before_script:
      script: ci/test-documentation.sh
      after_failure:

before_install:
  - >
    case "${TRAVIS_OS_NAME:-linux}" in
    linux)
      export GIT_TEST_HTTPD=YesPlease

      mkdir --parents custom/p4
      pushd custom/p4
        wget --quiet http://filehost.perforce.com/perforce/r$LINUX_P4_VERSION/bin.linux26x86_64/p4d
        wget --quiet http://filehost.perforce.com/perforce/r$LINUX_P4_VERSION/bin.linux26x86_64/p4
        chmod u+x p4d
        chmod u+x p4
        export PATH="$(pwd):$PATH"
      popd
      mkdir --parents custom/git-lfs
      pushd custom/git-lfs
        wget --quiet https://github.com/github/git-lfs/releases/download/v$LINUX_GIT_LFS_VERSION/git-lfs-linux-amd64-$LINUX_GIT_LFS_VERSION.tar.gz
        tar --extract --gunzip --file "git-lfs-linux-amd64-$LINUX_GIT_LFS_VERSION.tar.gz"
        cp git-lfs-$LINUX_GIT_LFS_VERSION/git-lfs .
        export PATH="$(pwd):$PATH"
      popd
      ;;
    osx)
      brew update --quiet
      # Uncomment this if you want to run perf tests:
      # brew install gnu-time
      brew install git-lfs gettext
      brew link --force gettext
      brew install caskroom/cask/perforce
      ;;
    esac;
    echo "$(tput setaf 6)Perforce Server Version$(tput sgr0)";
    p4d -V | grep Rev.;
    echo "$(tput setaf 6)Perforce Client Version$(tput sgr0)";
    p4 -V | grep Rev.;
    echo "$(tput setaf 6)Git-LFS Version$(tput sgr0)";
    git-lfs version;
    mkdir -p $HOME/travis-cache;
    ln -s $HOME/travis-cache/.prove t/.prove;

before_script: make --jobs=2

script: make --quiet test

after_failure:
  - >
    : '<-- Click here to see detailed test output!                                                        ';
    for TEST_EXIT in t/test-results/*.exit;
    do
      if [ "$(cat "$TEST_EXIT")" != "0" ];
      then
        TEST_OUT="${TEST_EXIT%exit}out";
        echo "------------------------------------------------------------------------";
        echo "$(tput setaf 1)${TEST_OUT}...$(tput sgr0)";
        echo "------------------------------------------------------------------------";
        cat "${TEST_OUT}";
      fi;
    done;

notifications:
  email: false
