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 test_exercise () { 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. ` } 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" if [ -f src/Example.hs ]; then # 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" test_exercise elif ! stat -t examples/*/ > /dev/null 2>&1; then echo "No examples for ${exercise}!" exit 1 else for example in examples/*/ ; do echo "testing ${example}" rm -f src/*.hs mv ${example}/*.hs src mv ${example}/package.yaml . test_exercise done fi popd done