language: rust
sudo: required
dist: trusty

cache:
  cargo: true
  apt: true

matrix:
  include:
    - rust: stable
    - rust: beta
    - rust: nightly
  allow_failures:
    - rust: nightly

env:
  global:
    - RUSTFLAGS="-C link-dead-code"
    - OPENSSL_VERSION=openssl-1.0.2

before_install:
  - sudo add-apt-repository -y ppa:0k53d-karl-f830m/openssl
  - sudo apt-get update -qq
  - sudo apt-get install -y openssl libssl-dev libelf-dev libdw-dev cmake gcc binutils-dev libiberty-dev

# Add clippy
before_script:
  - export PATH=$PATH:~/.cargo/bin

script:
  - |
    if [[ "$TRAVIS_RUST_VERSION" != "nightly" ]]; then
    cargo clean
    cargo test --features="ssl,tls,rust-tls" -- --nocapture
    cd actix-codec && cargo test && cd ..
    cd actix-service && cargo test && cd ..
    cd actix-server && cargo test --features="ssl,tls,rust-tls" -- --nocapture && cd ..
    cd actix-rt && cargo test && cd ..
    cd actix-connector && cargo test && cd ..
    cd actix-utils && cargo test && cd ..
    cd router && cargo test && cd ..
    fi
  - |
    if [[ "$TRAVIS_RUST_VERSION" == "nightly" ]]; then
    RUSTFLAGS="--cfg procmacro2_semver_exempt" cargo install -f cargo-tarpaulin
    cargo tarpaulin --features="ssl,tls,rust-tls" --out Xml
    bash <(curl -s https://codecov.io/bash)
    echo "Uploaded code coverage"
    cd actix-service && cargo tarpaulin --out Xml && bash <(curl -s https://codecov.io/bash) && cd ..
    cd actix-rt && cargo tarpaulin --out Xml && bash <(curl -s https://codecov.io/bash) && cd ..
    cd actix-connector && cargo tarpaulin --out Xml && bash <(curl -s https://codecov.io/bash) && cd ..
    cd actix-codec && cargo tarpaulin --out Xml && bash <(curl -s https://codecov.io/bash) && cd ..
    cd actix-server && cargo tarpaulin --out Xml && bash <(curl -s https://codecov.io/bash) && cd ..
    cd actix-utils && cargo tarpaulin --out Xml && bash <(curl -s https://codecov.io/bash) && cd ..
    cd router && cargo tarpaulin --out Xml && bash <(curl -s https://codecov.io/bash) && cd ..
    fi