language: c++
matrix:
  include:
  - os: linux
    env: BENCHMARK=1
    sudo: required
  - os: osx
env:
  global:
  - CARGO_HOME=$HOME/.cargo/
  - RUSTUP_HOME=$HOME/.rustup/
  - HOMEBREW_PATH=$HOME/homebrew/
  - DENO_BUILD_ARGS="use_custom_libcxx=false use_sysroot=false"
  - DENO_BUILD_PATH=$HOME/out/Default
  - DENO_BUILD_MODE=release
  - PATH=$TRAVIS_BUILD_DIR/third_party/llvm-build/Release+Asserts/bin:$CARGO_HOME/bin:$PATH
  - CCACHE_CPP2=yes
  - CCACHE_SLOPPINESS=time_macros
  - SCCACHE_DIR=$HOME/.sccache/
  - SCCACHE_CACHE_SIZE=1G
  - SCCACHE_IDLE_TIMEOUT=0
cache:
  ccache: true
  directories:
  - "$CARGO_HOME"
  - "$RUSTUP_HOME"
  - "$HOMEBREW_PATH"
  - "$SCCACHE_DIR"
  - third_party/v8/build/linux/debian_sid_amd64-sysroot/
  - third_party/v8/third_party/llvm-build/
install:
- |-
  # OS X: install a private copy of homebrew.
  if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
    export BREW="${HOMEBREW_PATH}bin/brew"
    export PATH="${HOMEBREW_PATH}bin:$PATH"
    if [[ ! -x "$BREW" ]]; then
      git clone git://github.com/homebrew/brew "$HOMEBREW_PATH"
    fi
    "$BREW" --version
  fi
- |-
  # Install ccache (if necessary) and set it up.
  if [[ "$TRAVIS_OS_NAME" == "osx" && ! $(which ccache) ]]; then
    "$BREW" install ccache
  fi
  ccache --version | head -n 1
  ccache --max-size=1G
- |-
  # Install Rust.
  # TODO(ry) Include rustc in third_party.
  # https://github.com/denoland/deno/issues/386
  if [ ! $(which rustc) ]; then
    curl -sSf https://sh.rustup.rs | sh -s -- -y
  fi
  rustc --version
  cargo --version
- |-
  # Install and start sccache.
  if [ ! $(which sccache) ]; then
    cargo install sccache
  fi
  sccache --version
  sccache --start-server
- |-
  # Install hyperfine (if benchmarking is enabled for this build).
  if [ $BENCHMARK ]; then
    if [ ! $(which hyperfine) ]; then
      cargo install hyperfine
    fi
    hyperfine --version
  fi
- |-
  # Remove unnnecessary cargo and rustup directories.
  # This keeps the Travis CI cache small and fast.
  rm -rf "$CARGO_HOME"registry
  rm -rf "$RUSTUP_HOME"downloads
  rm -rf "$RUSTUP_HOME"tmp
  rm -rf "$RUSTUP_HOME"toolchains/*/etc
  rm -rf "$RUSTUP_HOME"toolchains/*/share
before_script:
- ./tools/setup.py
script:
- ./tools/lint.py
- bash -c "sleep 2100; pkill ninja" &
- ./tools/build.py -j2
- ./tools/test.py $DENO_BUILD_PATH
after_script:
- ccache --show-stats
- sccache --stop-server
after_success:
- |
  # Run benchmarks and publish the result to github pages.
  if [ $BENCHMARK ]; then
    ./tools/benchmark.py $DENO_BUILD_PATH &&
    cp -r website/* gh-pages/
  fi
before_deploy:
- gzip -c $DENO_BUILD_PATH/deno > $DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz
deploy:
- provider: releases
  api_key: &github-token
    secure: RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=
  file: "$DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz"
  on:
    tags: true
    repo: denoland/deno
  skip-cleanup: true
- provider: pages
  github-token: *github-token
  keep-history: true
  local-dir: gh-pages
  on:
    branch: master
    condition: $BENCHMARK == 1
    repo: denoland/deno
  skip-cleanup: true