language: rust
rust: nightly
sudo: required
dist: xenial
services: docker

stages:
  - tools-and-build-and-tier1
  - tier2

matrix:
  include:
    # TOOLS
    - name: "Documentation"
      env: TARGET=x86_64-unknown-linux-gnu
      script: sh ci/dox.sh
      install:
        - travis_retry rustup component add rust-src
        - travis_retry cargo install xargo
      stage: tools-and-build-and-tier1
    - name: "Shellcheck"
      install: true
      script:
        - shellcheck --version
        # FIXME: https://github.com/koalaman/shellcheck/issues/1591
        - shellcheck -e SC2103 ci/*.sh
      stage: tools-and-build-and-tier1
    - name: "Style"
      install: true
      script:
        - rustc ci/style.rs && ./style src
        # Disabled due to rust-lang/rustfmt#3341
        #- |
        #  if rustup component add rustfmt-preview ; then
        #      cargo fmt --all -- --check
        #  fi
      stage: tools-and-build-and-tier1
    - name: "Semver Linux"
      install: travis_retry cargo +nightly install semverver
      script: sh ci/semver.sh
      stage: tools-and-build-and-tier1
    - name: "Semver MacOSX"
      install: travis_retry cargo +nightly install semverver
      script: sh ci/semver.sh
      os: osx
      osx_image: xcode10
      stage: tools-and-build-and-tier1

    # BUILD stable, beta, nightly
    - name: "Build Stable Rust"
      script: sh ci/build.sh
      stage: tools-and-build-and-tier1
      rust: stable
      install: true
    - name: "Build Beta Rust"
      script: sh ci/build.sh
      stage: tools-and-build-and-tier1
      rust: beta
      install: true
    - name: "Build Nightly Rust"
      script: sh ci/build.sh
      stage: tools-and-build-and-tier1
      rust: nightly
      install:
        - travis_retry rustup component add rust-src
        - travis_retry cargo install xargo
    - name: "Build Stable Rust"
      script: sh ci/build.sh
      stage: tools-and-build-and-tier1
      rust: stable
      os: osx
      osx_image: xcode10
      install: true
    - name: "Build Beta Rust"
      script: sh ci/build.sh
      stage: tools-and-build-and-tier1
      rust: beta
      os: osx
      osx_image: xcode10
      install: true
    - name: "Build Nightly Rust"
      script: sh ci/build.sh
      stage: tools-and-build-and-tier1
      rust: nightly
      os: osx
      osx_image: xcode10
      install: true
    - name: "Build Stable Rust 1.13.0"
      script: sh ci/build.sh
      stage: tools-and-build-and-tier1
      rust: 1.13.0
      install: true
    - name: "Build Stable Rust 1.19.0"
      script: sh ci/build.sh
      stage: tools-and-build-and-tier1
      rust: 1.19.0
      install: true
    - name: "Build Stable Rust 1.24.0"
      script: sh ci/build.sh
      stage: tools-and-build-and-tier1
      rust: 1.24.0
      install: true
    - name: "Build Stable Rust 1.25.0"
      script: sh ci/build.sh
      stage: tools-and-build-and-tier1
      rust: 1.25.0
      install: true
    - name: "Build Stable Rust 1.30.0"
      script: sh ci/build.sh
      stage: tools-and-build-and-tier1
      rust: 1.30.0
      install: true
    - name: "Build Stable Rust 1.13.0"
      script: sh ci/build.sh
      stage: tools-and-build-and-tier1
      rust: 1.13.0
      os: osx
      osx_image: xcode10
      install: true
    - name: "Build Stable Rust 1.19.0"
      script: sh ci/build.sh
      stage: tools-and-build-and-tier1
      rust: 1.19.0
      os: osx
      osx_image: xcode10
      install: true
    - name: "Build Stable Rust 1.24.0"
      script: sh ci/build.sh
      stage: tools-and-build-and-tier1
      rust: 1.24.0
      os: osx
      osx_image: xcode10
      install: true
    - name: "Build Stable Rust 1.25.0"
      script: sh ci/build.sh
      stage: tools-and-build-and-tier1
      rust: 1.25.0
      os: osx
      osx_image: xcode10
      install: true
    - name: "Build Stable Rust 1.30.0"
      script: sh ci/build.sh
      stage: tools-and-build-and-tier1
      rust: 1.30.0
      os: osx
      osx_image: xcode10
      install: true
    - env: TARGET=i686-apple-darwin
      os: osx
      osx_image: xcode10
      stage: tools-and-build-and-tier1
    - env: TARGET=i686-unknown-linux-gnu
      stage: tools-and-build-and-tier1
    - env: TARGET=x86_64-apple-darwin
      os: osx
      osx_image: xcode10
      install: true
      stage: tools-and-build-and-tier1
    - env: TARGET=x86_64-unknown-linux-gnu
      stage: tools-and-build-and-tier1
      install: true

    # Tier 2 targets
    - env: TARGET=aarch64-linux-android
      stage: tier2
    - env: TARGET=aarch64-unknown-linux-gnu
      stage: tier2
    - env: TARGET=aarch64-unknown-linux-musl
      stage: tier2
    - env: TARGET=arm-linux-androideabi
      stage: tier2
    - env: TARGET=arm-unknown-linux-gnueabihf
      stage: tier2
    - env: TARGET=arm-unknown-linux-musleabihf
      stage: tier2
    - env: TARGET=asmjs-unknown-emscripten
      stage: tier2
    - env: TARGET=i686-linux-android
      stage: tier2
    - env: TARGET=i686-unknown-linux-musl
      stage: tier2
    - env: TARGET=mips-unknown-linux-gnu
      stage: tier2
    - env: TARGET=mips-unknown-linux-musl
      stage: tier2
    - env: TARGET=mips64-unknown-linux-gnuabi64
      stage: tier2
    - env: TARGET=mips64el-unknown-linux-gnuabi64
      stage: tier2
    - env: TARGET=mipsel-unknown-linux-musl
      stage: tier2
    - env: TARGET=powerpc-unknown-linux-gnu
      stage: tier2
    - env: TARGET=powerpc64-unknown-linux-gnu
      stage: tier2
    - env: TARGET=powerpc64le-unknown-linux-gnu
      stage: tier2
    - env: TARGET=s390x-unknown-linux-gnu
      stage: tier2
    - env: TARGET=sparc64-unknown-linux-gnu
      stage: tier2
    - env: TARGET=wasm32-unknown-emscripten
      stage: tier2
    - env: TARGET=x86_64-linux-android
      stage: tier2
    - env: TARGET=x86_64-unknown-linux-gnux32 OPT="--release"
      stage: tier2
    - env: TARGET=x86_64-unknown-linux-musl
      stage: tier2
    - env: TARGET=wasm32-wasi
      rust: nightly
      stage: tier2
    - name: "Nintendo Switch - build libcore only"
      rust: nightly
      stage: tier2
      install:
        - rustup component add rust-src
        - (test -x $HOME/.cargo/bin/cargo-xbuild || cargo install cargo-xbuild)
      script:
        - mkdir -p target
        - cd target
        - wget https://github.com/devkitPro/pacman/releases/download/devkitpro-pacman-1.0.1/devkitpro-pacman.deb
        - sudo dpkg -i devkitpro-pacman.deb
        - sudo dkp-pacman -Sy
        - sudo dkp-pacman -Syu
        - sudo dkp-pacman -S -v --noconfirm switch-dev devkitA64
        - export PATH="$PATH:/opt/devkitpro/devkitA64/bin"
        - export PATH="$PATH:/opt/devkitpro/tools/bin"
        - cd ..
        # Pull the target spec up into the current directory and then build
        - mv ci/switch.json switch.json
        - cargo xbuild --target switch.json


  allow_failures:
      - name: "Semver Linux"
      - name: "Semver MacOSX"

install: travis_retry rustup target add $TARGET

script:
  - cargo generate-lockfile --manifest-path libc-test/Cargo.toml
  - if [[ $TRAVIS_OS_NAME = "linux" ]] && [[ $BUILD_ONLY != "1" ]]; then
      sh ci/run-docker.sh $TARGET;
    else
      sh ci/run.sh $TARGET;
    fi
env:
  global:
    secure: "e2/3QjgRN9atOuSHp22TrYG7QVKcYUWY48Hi9b60w+r1+BhPkTseIJLte7WefRhdXtqpjjUJTooKDhnurFOeHaCT+nmBgiv+FPU893sBl4bhesY4m0vgUJVbNZcs6lTImYekWVb+aqjGdgV/XAgCw7c3kPmrZV0MzGDWL64Xaps="

notifications:
  email:
    on_success: never
