1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
|
#!/bin/sh
# ATTENTION! Before editing this file, maybe you can make a
# separate script to do your test? We don't want individual
# Travis builds to take too long (they time out at 50min and
# it's generally unpleasant if the build takes that long.)
# If you make a separate matrix entry in .travis.yml it can
# be run in parallel.
# NB: the '|| exit $?' workaround is required on old broken versions of bash
# that ship with OS X. See https://github.com/haskell/cabal/pull/3624 and
# http://stackoverflow.com/questions/14970663/why-doesnt-bash-flag-e-exit-when-a-subshell-fails
. ./travis-common.sh
# --hide-successes uses terminal control characters which mess up
# Travis's log viewer. So just print them all!
TEST_OPTIONS=""
# To be enabled temporarily when you need to pre-populate the Travis
# cache to avoid timeout.
#SKIP_TESTS=YES
# ---------------------------------------------------------------------
# Parse options
# ---------------------------------------------------------------------
usage() {
echo -e -n "Usage: `basename $0`\n-j jobs\n"
}
jobs="-j1"
while getopts ":hj:" opt; do
case $opt in
h)
usage
exit 0
;;
j)
jobs="-j$OPTARG"
;;
:)
# Argument-less -j
if [ "$OPTARG" = "j" ]; then
jobs="-j"
fi
;;
\?)
echo "Invalid option: $OPTARG"
usage
exit 1
;;
esac
done
shift $((OPTIND-1))
# Do not try to use -j with GHC older than 7.8
case $GHCVER in
7.4*|7.6*)
jobs=""
;;
*)
;;
esac
# ---------------------------------------------------------------------
# Update the Cabal index
# ---------------------------------------------------------------------
timed cabal update
# ---------------------------------------------------------------------
# Install executables if necessary
# ---------------------------------------------------------------------
# TODO: we need v2-install -z
(cd /tmp && timed cabal v2-install $jobs happy --overwrite-policy=always)
# ---------------------------------------------------------------------
# Setup our local project
# ---------------------------------------------------------------------
make cabal-install-monolithic
if [ "x$CABAL_LIB_ONLY" = "xYES" ]; then
cp cabal.project.libonly cabal.project
fi
cp cabal.project.local.travis cabal.project.local
# ---------------------------------------------------------------------
# Cabal
# ---------------------------------------------------------------------
# Needed to work around some bugs in nix-local-build code.
export CABAL_BUILDDIR="${CABAL_BDIR}"
if [ "x$CABAL_INSTALL_ONLY" != "xYES" ] ; then
# We're doing a full build and test of Cabal
# NB: Best to do everything for a single package together as it's
# more efficient (since new-build will uselessly try to rebuild
# Cabal otherwise).
timed cabal new-build $jobs Cabal Cabal:unit-tests Cabal:check-tests Cabal:parser-tests Cabal:hackage-tests --enable-tests
# Run haddock.
if [ "$TRAVIS_OS_NAME" = "linux" ]; then
# TODO: use new-haddock?
# haddock: internal error: synifyKind
# https://github.com/haskell/haddock/issues/242
if [ "$GHCVER" != "7.6.3" ]; then
(cd Cabal && timed cabal act-as-setup --build-type=Simple -- haddock --builddir=${CABAL_BDIR}) || exit $?
fi
fi
# Check for package warnings
(cd Cabal && timed cabal check) || exit $?
fi
unset CABAL_BUILDDIR
# Build and run the package tests
export CABAL_BUILDDIR="${CABAL_TESTSUITE_BDIR}"
# NB: We always build this test runner, because it is used
# both by Cabal and cabal-install
timed cabal new-build $jobs cabal-testsuite:cabal-tests
if [ "x$SKIP_TESTS" != "xYES" ]; then
(cd cabal-testsuite && timed ${CABAL_TESTSUITE_BDIR}/build/cabal-tests/cabal-tests --builddir=${CABAL_TESTSUITE_BDIR} -j3 $TEST_OPTIONS) || exit $?
fi
# Redo the package tests with different versions of GHC
if [ "x$TEST_OTHER_VERSIONS" = "xYES" ]; then
(cd cabal-testsuite && timed ${CABAL_TESTSUITE_BDIR}/build/cabal-tests/cabal-tests --builddir=${CABAL_TESTSUITE_BDIR} $TEST_OPTIONS --with-ghc="/opt/ghc/7.0.4/bin/ghc")
(cd cabal-testsuite && timed ${CABAL_TESTSUITE_BDIR}/build/cabal-tests/cabal-tests --builddir=${CABAL_TESTSUITE_BDIR} $TEST_OPTIONS --with-ghc="/opt/ghc/7.2.2/bin/ghc")
(cd cabal-testsuite && timed ${CABAL_TESTSUITE_BDIR}/build/cabal-tests/cabal-tests --builddir=${CABAL_TESTSUITE_BDIR} $TEST_OPTIONS --with-ghc="/opt/ghc/head/bin/ghc")
fi
unset CABAL_BUILDDIR
if [ "x$CABAL_LIB_ONLY" = "xYES" ]; then
# If this fails, we WANT to fail, because the tests will not be running then
(timed ./travis/upload.sh) || exit $?
exit 0;
fi
# ---------------------------------------------------------------------
# cabal-install
# ---------------------------------------------------------------------
# Needed to work around some bugs in nix-local-build code.
export CABAL_BUILDDIR="${CABAL_INSTALL_BDIR}"
if [ "x$DEBUG_EXPENSIVE_ASSERTIONS" = "xYES" ]; then
CABAL_INSTALL_FLAGS=-fdebug-expensive-assertions
fi
# NB: For Travis, we do a *monolithic* build, which means all the
# test suites are baked into the cabal binary
timed cabal new-build $jobs $CABAL_INSTALL_FLAGS cabal-install:cabal
# TODO: we need v2-install -z
(cd /tmp && timed cabal new-install $jobs hackage-repo-tool --overwrite-policy=always)
if [ "x$SKIP_TESTS" = "xYES" ]; then
exit 1;
fi
# Tests need this
timed ${CABAL_INSTALL_EXE} update
# Big tests
(cd cabal-testsuite && timed ${CABAL_TESTSUITE_BDIR}/build/cabal-tests/cabal-tests --builddir=${CABAL_TESTSUITE_BDIR} -j3 --skip-setup-tests --with-cabal ${CABAL_INSTALL_EXE} --with-hackage-repo-tool hackage-repo-tool $TEST_OPTIONS) || exit $?
# Cabal check
# TODO: remove -main-is and re-enable me.
# (cd cabal-install && timed cabal check) || exit $?
if [ "x$TEST_SOLVER_BENCHMARKS" = "xYES" ]; then
timed cabal new-build $jobs solver-benchmarks:hackage-benchmark solver-benchmarks:unit-tests
timed ${SOLVER_BENCHMARKS_BDIR}/t/unit-tests/build/unit-tests/unit-tests $TEST_OPTIONS
fi
# Haddock
# TODO: >= 8.4.3 would be nicer
if [ "$TRAVIS_OS_NAME" = "linux" -a "$GHCVER" == "8.4.4" ]; then
timed cabal new-haddock cabal-install
fi
unset CABAL_BUILDDIR
# Check what we got
${CABAL_INSTALL_EXE} --version
# If this fails, we WANT to fail, because the tests will not be running then
(timed ./travis/upload.sh) || exit $?
|