diff --git a/.travis.yml b/.travis.yml index 3e07bcc50..4b691b166 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,50 +1,53 @@ -# The Travis docs (https://docs.travis-ci.com/user/languages/haskell) -# suggest that we use `language: haskell` and `ghc:` to specify GHC versions. -# However, as of this writing, Travis only supported versions up to 7.8. -# If Travis supports all versions we would like to test, then we could switch. -# Until then, we use the https://github.com/hvr/multi-ghc-travis setup. -language: c -sudo: false +sudo: false # Use the container-based infrastructure. + addons: - apt: &apt - sources: - - hvr-ghc -cabal: &cabal cabal-install-1.22 -env: - global: - - CABALVER=1.22 -matrix: - include: - - env: GHCVER=7.6.3 - addons: - apt: - <<: *apt - packages: [ghc-7.6.3, *cabal] - - env: GHCVER=7.8.4 - addons: - apt: - <<: *apt - packages: [ghc-7.8.4, *cabal] - - env: GHCVER=7.10.3 - addons: - apt: - <<: *apt - packages: [ghc-7.10.3, *cabal] - - env: GHCVER=8.0.1 - addons: - apt: - <<: *apt - packages: [ghc-8.0.1, *cabal] + apt: + packages: + - libgmp-dev # Stack's GHC depends on this. + cache: directories: - - '$HOME/.ghc' - - '$HOME/.cabal' + - $HOME/.stack # Global stack's cache. + - $HOME/.foldercache # Per exercise `.stack-work` cache. + +env: + - RESOLVER="lts-2.22" # Last GHC 7.8.x snapshot. + - RESOLVER="lts-6.4" # Last checked LTS snapshot (GHC 7.10.3). + - RESOLVER="nightly-2016-06-21" # Last checked nightly snapshot (GHC 8.0.1). + - RESOLVER="lts" # Latest LTS snapshot. + - RESOLVER="nightly" # Latest nightly snapshot. + +matrix: + allow_failures: # The snapshots `lts` and `nightly` are + - env: RESOLVER="lts" # aliases to the most recent versions. + - env: RESOLVER="nightly" # We don't want to fail when a new version + fast_finish: true # is released, so we list them here. + before_install: - - './_test/bootstrap.sh' + - 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. + - export PATH="${TRAVIS_BUILD_DIR}/_test:$PATH" # For stackalize. + install: - - true + - 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' + script: - - 'export PATH=/opt/cabal/$CABALVER/bin:/opt/ghc/$GHCVER/bin:$PATH' - - 'runhaskell -Wall ./_test/check-exercises.hs' - - './bin/fetch-configlet' - - './bin/configlet .' + - | + set -e + configlet . + for exercise in ${TRAVIS_BUILD_DIR}/exercises/* ; do + pushd ${exercise} + # `stack --word-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" + stackalize --resolver lts-0.0 `# This resolver is not used. ` + stack test --resolver "${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 diff --git a/_test/bootstrap.sh b/_test/bootstrap.sh deleted file mode 100755 index da7fc4f40..000000000 --- a/_test/bootstrap.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash -# This installs a the prerequisites for a given GHC/Cabal config -set -x -set -e -if [ ! -z "$GHCVER" ]; then - export PATH=/opt/ghc/${GHCVER}/bin:$PATH -fi -if [ ! -z "$CABALVER" ]; then - export PATH=/opt/cabal/${CABALVER}/bin:$PATH -fi -cabal update -# This is a fairly minimal set -cabal install \ - primitive \ - random \ - tf-random \ - HUnit \ - QuickCheck \ - split \ - text \ - bytestring \ - attoparsec \ - vector \ - parallel \ - stm \ - old-locale \ - lens