language: rust

# Caching of the runtime .wasm blob poses a problem.
# See: https://github.com/Joystream/joystream/issues/466
# Always starting with a clean slate is probably better, it allows us to ensure
# the WASM runtime is always rebuilt. It also allows us to detect when certain upstream dependencies
# sometimes break the build. When cache is enabled do not use the produced WASM build.
# This also means the binary should not be used to produce the final chainspec file (because the same
# one is embedded in the binary)
# cache: cargo

rust: stable

# Skip Rust build in a pull request if no rust project files were modified
before_install:
  - |
    if [ "$TRAVIS_PULL_REQUEST" != "false" ]
      then
      if ! git diff --name-only $TRAVIS_COMMIT_RANGE | grep -qE "(.rs|Cargo.(lock|toml))$"
        then
        echo "No changes to Rust or Cargo Files, CI not running."
        travis_terminate 0
      fi
    fi

install:
  - rustup install nightly-2020-05-23
  - rustup target add wasm32-unknown-unknown --toolchain nightly-2020-05-23
  # travis installs rust using rustup with the "minimal" profile so these tools are not installed by default
  - rustup component add rustfmt
  - rustup component add clippy

before_script:
  - cargo fmt --all -- --check

script:
  # we set release as build type for all steps to benefit from already compiled packages in prior steps
  - BUILD_DUMMY_WASM_BINARY=1 cargo clippy --release -- -D warnings
  - BUILD_DUMMY_WASM_BINARY=1 cargo test --release --verbose --all
  - TRIGGER_WASM_BUILD=1 WASM_BUILD_TOOLCHAIN=nightly-2020-05-23 cargo build --release -p joystream-node
  - ls -l ./target/release/wbuild/joystream-node-runtime/
  - ./target/release/joystream-node --version
