sudo: false # Use the container-based infrastructure. addons: apt: packages: - libgmp-dev # Stack's GHC depends on this. cache: directories: - $HOME/.stack # Global stack's cache. - $HOME/.foldercache # Per exercise `.stack-work` cache. env: - RESOLVER="nightly-2016-07-17" CURRENT="YES" # Equal to each stack.yaml. - RESOLVER="nightly" # Latest nightly snapshot. matrix: allow_failures: # The snapshot `nightly` is just an aliases 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: - | set -e configlet . # 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 SET_RESOLVER="--resolver ${RESOLVER}" fi for exercise in ${TRAVIS_BUILD_DIR}/exercises/* ; do pushd ${exercise} # `stack --work-dir` fails if not targeting a subdirectory, so we just # symbolic-link `.stack-work` to a subfolder in the cache directory. mkdir -p "${HOME}/.foldercache/${exercise}/.stack-work" ln -f -s "${HOME}/.foldercache/${exercise}/.stack-work" # Here we prepare the exercise to be tested by Stack. MODULE=`sed -n 's/ *module \+\([a-zA-Z0-9]\+\).*/\1/p' src/Example.hs` mv src/Example.hs "src/${MODULE}.hs" stack test ${SET_RESOLVER} `# Select the correct resolver. `\ --install-ghc `# Download GHC if not in cache.`\ --no-terminal `# Terminal detection is broken.`\ --pedantic `# Enable -Wall and -Werror. ` popd done