language: rust

rust: nightly

os:
  - linux
  - osx
  - windows

branches:
  # Don't build these branches
  except:
    # Used by bors
    - trying.tmp
    - staging.tmp

env:
 global:
   - RUST_BACKTRACE=1

install:
  - |
    if [ -z ${INTEGRATION} ]; then
      rustup component add rustfmt || cargo install --git https://github.com/rust-lang/rustfmt/ --force
      if [ "$TRAVIS_OS_NAME" == "linux" ]; then
        . $HOME/.nvm/nvm.sh
        nvm install stable
        nvm use stable
        npm install remark-cli remark-lint
      fi
      if [ "$TRAVIS_OS_NAME" == "windows" ]; then
        choco install windows-sdk-10.0
      fi
    fi

# disabling the integration tests in forks should be done with
# if: fork = false
# but this is currently buggy travis-ci/travis-ci#9118
matrix:
  fast_finish: true
  include:
    # Builds that are executed for every PR
    - os: osx # run base tests on both platforms
      env: BASE_TESTS=true
    - os: linux
      env: BASE_TESTS=true
    - os: windows
      env: CARGO_INCREMENTAL=0 BASE_TESTS=true

    # Builds that are only executed when a PR is r+ed or a try build is started
    # We don't want to run these always because they go towards
    # the build limit within the Travis rust-lang account.
    # The jobs are approximately sorted by execution time
    - env: INTEGRATION=rust-lang/cargo
      if: repo =~ /^rust-lang\/rust-clippy$/ AND branch IN (auto, try)
    - env: INTEGRATION=rust-lang-nursery/chalk
      if: repo =~ /^rust-lang\/rust-clippy$/ AND branch IN (auto, try)
    - env: INTEGRATION=rust-lang/rls
      if: repo =~ /^rust-lang\/rust-clippy$/ AND branch IN (auto, try)
    - env: INTEGRATION=Geal/nom
      if: repo =~ /^rust-lang\/rust-clippy$/ AND branch IN (auto, try)
    - env: INTEGRATION=rust-lang/rustfmt
      if: repo =~ /^rust-lang\/rust-clippy$/ AND branch IN (auto, try)
    - env: INTEGRATION=hyperium/hyper
      if: repo =~ /^rust-lang\/rust-clippy$/ AND branch IN (auto, try)
    - env: INTEGRATION=bluss/rust-itertools
      if: repo =~ /^rust-lang\/rust-clippy$/ AND branch IN (auto, try)
    - env: INTEGRATION=serde-rs/serde
      if: repo =~ /^rust-lang\/rust-clippy$/ AND branch IN (auto, try)
    - env: INTEGRATION=rust-lang-nursery/stdsimd
      if: repo =~ /^rust-lang\/rust-clippy$/ AND branch IN (auto, try)
    - env: INTEGRATION=rust-random/rand
      if: repo =~ /^rust-lang\/rust-clippy$/ AND branch IN (auto, try)
    - env: INTEGRATION=rust-lang-nursery/futures-rs
      if: repo =~ /^rust-lang\/rust-clippy$/ AND branch IN (auto, try)
    - env: INTEGRATION=Marwes/combine
      if: repo =~ /^rust-lang\/rust-clippy$/ AND branch IN (auto, try)
    - env: INTEGRATION=rust-lang-nursery/failure
      if: repo =~ /^rust-lang\/rust-clippy$/ AND branch IN (auto, try)
    - env: INTEGRATION=rust-lang-nursery/log
      if: repo =~ /^rust-lang\/rust-clippy$/ AND branch IN (auto, try)
    - env: INTEGRATION=chronotope/chrono
      if: repo =~ /^rust-lang\/rust-clippy$/ AND branch IN (auto, try)
  allow_failures:
  - os: windows
    env: CARGO_INCREMENTAL=0 BASE_TESTS=true
# prevent these jobs with default env vars
  exclude:
    - os: linux
    - os: osx
    - os: windows

script:
  - |
      rm rust-toolchain
      ./setup-toolchain.sh
      export LD_LIBRARY_PATH=$(rustc --print sysroot)/lib
  - |
    if [ -z ${INTEGRATION} ]; then
      ./ci/base-tests.sh && sleep 5
    else
      ./ci/integration-tests.sh && sleep 5
    fi

after_success: |
  #!/bin/bash
  if [ $(uname) == Linux ]; then
    set -ex
    if [ -z ${INTEGRATION} ]; then
      ./.github/deploy.sh
    else
      echo "Not deploying, because we're in an integration test run"
    fi
    set +e
  fi