language: rust
cache: cargo
dist: trusty
sudo: false
rust:
  - stable

addons:
  apt:
    sources:
      - ubuntu-toolchain-r-test
    packages:
      - g++-5
      - cmake
      - libcurl4-openssl-dev
      - libelf-dev
      - libdw-dev
      - cmake
      - gcc
      - binutils-dev 
env:
  global:
    - RUST_BACKTRACE="1"
  matrix:
    - RUST_TEST_THREADS=1 TEST_DIR=grin
    - TEST_DIR=store
    - TEST_DIR=chain
    - TEST_DIR=pool
    - TEST_DIR=wallet
    - TEST_DIR=p2p
    - TEST_DIR=api
    - TEST_DIR=pow
    - TEST_DIR=keychain
    - TEST_DIR=core
    - TEST_DIR=util

after_success: |
  pwd &&
  wget https://github.com/mimblewimble/kcov/archive/master.tar.gz &&
  tar xzf master.tar.gz &&
  cd kcov-master &&
  mkdir build && cd build &&
  cmake .. && make && mv src/kcov ../.. &&
  cd ../.. &&
  rm -rf kcov-master &&
  cd ../
  cd api && cargo test --no-run && cd .. && rm target/debug/*.d &&
  ./kcov --exclude-pattern=/.cargo,/usr/lib --verify target/cov target/debug/grin_api* &&
  echo "Finished coverage for grin_api"
  cd core && cargo test --no-run && cd .. && rm target/debug/*.d &&
  ./kcov --exclude-pattern=/.cargo,/usr/lib --verify target/cov target/debug/grin_core* &&
  echo "Finished coverage for grin_core"
  cd chain && cargo test --no-run && cd .. && rm target/debug/*.d &&
  ./kcov --exclude-pattern=/.cargo,/usr/lib --verify target/cov target/debug/grin_chain* &&
  ./kcov --exclude-pattern=/.cargo,/usr/lib --verify target/cov target/debug/mine_simple_chain* &&
  ./kcov --exclude-pattern=/.cargo,/usr/lib --verify target/cov target/debug/store_indices* &&
  ./kcov --exclude-pattern=/.cargo,/usr/lib --verify target/cov target/debug/test_coinbase_maturity* &&
  echo "Finished coverage for grin_chain"
  cd keychain && cargo test --no-run && cd .. && rm target/debug/*.d &&
  ./kcov --exclude-pattern=/.cargo,/usr/lib --verify target/cov target/debug/grin_keychain* &&
  echo "Finished coverage for grin_keychain"
  cd p2p && cargo test --no-run && cd .. && rm target/debug/*.d &&
  ./kcov --exclude-pattern=/.cargo,/usr/lib --verify target/cov target/debug/grin_p2p* &&
  ./kcov --exclude-pattern=/.cargo,/usr/lib --verify target/cov target/debug/peer_handshake* &&
  echo "Finished coverage for grin_p2p"
  cd pow && cargo test --no-run && cd .. && rm target/debug/*.d &&
  ./kcov --exclude-pattern=/.cargo,/usr/lib --verify target/cov target/debug/grin_pow* &&
  echo "Finished coverage for grin_pow"
  cd store && cargo test --no-run && cd .. && rm target/debug/*.d &&
  ./kcov --exclude-pattern=/.cargo,/usr/lib --verify target/cov target/debug/grin_store* &&
  ./kcov --exclude-pattern=/.cargo,/usr/lib --verify target/cov target/debug/sumtree* &&
  echo "Finished coverage for grin_store"
  cd wallet && cargo test --no-run && cd .. && rm target/debug/*.d &&
  ./kcov --exclude-pattern=/.cargo,/usr/lib --verify target/cov target/debug/grin_wallet* &&
  echo "Finished coverage for grin_wallet"
  cd util && cargo test --no-run && cd .. && rm target/debug/*.d &&
  ./kcov --exclude-pattern=/.cargo,/usr/lib --verify target/cov target/debug/grin_util* &&
  echo "Finished coverage for grin_util"
  bash <(curl -s https://codecov.io/bash) &&
  echo "Uploaded code coverage"

script: cd $TEST_DIR && cargo test --verbose