sudo: false # Use the container-based infrastructure. addons: apt: packages: - libgmp-dev # Stack's GHC depends on this. cache: timeout: 600 # The cache is too big to upload in 180 seconds. directories: - $HOME/.stack # Global stack's cache. - $HOME/.foldercache # Per exercise `.stack-work` cache. env: - RESOLVER="lts-11.1" CURRENT="YES" # Equal to each stack.yaml. - RESOLVER="nightly" # Latest nightly snapshot. matrix: allow_failures: # The snapshot `nightly` is just an alias to - env: RESOLVER="nightly" # the newest version released. We don't want fast_finish: true # Travis to fail on new incompatible releases. before_install: - mkdir -p ${HOME}/bin # Create folder for stack. - export PATH="${HOME}/bin:$PATH" # For stack - export PATH="${TRAVIS_BUILD_DIR}/bin:$PATH" # For {,fetch-}configlet. install: - travis_retry fetch-configlet - travis_retry curl -L https://www.stackage.org/stack/linux-x86_64 -o pack.tgz - tar xzf pack.tgz --wildcards --strip-components=1 -C ${HOME}/bin '*/stack' - stack --resolver ${RESOLVER} --install-ghc install hlint script: - "sh ./bin/ensure-readmes-are-updated.sh" - | differing_stack="" expected_stack=$(grep 'RESOLVER.*CURRENT' .travis.yml | head -1 | cut -d'"' -f2) echo "All exercises should have resolver $expected_stack" for exercise in ${TRAVIS_BUILD_DIR}/exercises/*/ ; do # This might allow lts-xyz for expected_stack=x.z, but hopefully `stack` fails in that case! # Not a mistake we expect people to make if grep -v "^resolver: ${expected_stack}\$" $exercise/stack.yaml; then differing_stack="$differing_stack $(basename "$exercise")" fi done if [ -n "$differing_stack" ]; then echo "The following exercises have a different stack.yaml resolver:$differing_stack" echo "They should instead be $expected_stack" exit 1 fi - | set -e configlet lint . # Check basic track configuration. hlint ${TRAVIS_BUILD_DIR} # Run `hlint` on the entire repository. # Explicit set exercises' resolver only if it's not the current one. if [ "${CURRENT}" != "YES" ]; then export SET_RESOLVER="--resolver ${RESOLVER}" fi for exercise in ${TRAVIS_BUILD_DIR}/exercises/*/ ; do time bin/test-stub $exercise time bin/test-all-examples $exercise done