forked from commercialhaskell/stack
-
Notifications
You must be signed in to change notification settings - Fork 0
/
.travis.yml
154 lines (135 loc) · 5.21 KB
/
.travis.yml
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
# Here, we test with both stack and cabal. The reasons to test with cabal are
# twofold:
#
# 1. We want to ensure that the bootstrapping case works
#
# 2. Building with stack would be too easy a test, since it guarantees us a
# sane build environment. In CI, we want to make our life more difficult, so we
# use cabal without any Stackage snapshots.
#
language: generic
sudo: false
cache:
directories:
- $HOME/.ghc
- $HOME/.cabal
- $HOME/.stack
- $TRAVIS_BUILD_DIR/.stack-work
matrix:
fast_finish: true
include:
# FIXME: Removing because the build keeps timing out.
# - env: BUILD=cabal STACK_YAML=stack.yaml CABALVER=1.24 GHCVER=8.2.2
# compiler: ": #GHC 8.2.2"
# addons: {apt: {packages: [cabal-install-1.24,ghc-8.2.2], sources: [hvr-ghc]}}
- env: BUILD=stack GHCVER=8.2.2 STACK_YAML=stack.yaml
compiler: ": #stack 8.2.2"
addons: {apt: {packages: [ghc-8.2.2, alex-3.1.7, happy-1.19.5], sources: [hvr-ghc]}}
- env: BUILD=stack GHCVER=8.4.4 STACK_YAML=stack-lts-12.yaml
compiler: ": #stack 8.4.4"
addons: {apt: {packages: [ghc-8.4.4, alex-3.1.7, happy-1.19.5], sources: [hvr-ghc]}}
- env: BUILD=stack GHCVER=8.6.2 STACK_YAML=stack-nightly.yaml
compiler: ": #stack 8.6.2"
addons: {apt: {packages: [ghc-8.6.2, alex-3.1.7, happy-1.19.5], sources: [hvr-ghc]}}
- env: BUILD=stack GHCVER=8.2.2 STACK_YAML=stack.yaml
compiler: ": #stack 8.2.2 osx"
os: osx
- env: BUILD=style
- env: BUILD=pedantic GHCVER=8.2.2 STACK_YAML=stack.yaml
compiler: ": #stack 8.2.2"
addons: {apt: {packages: [ghc-8.2.2, alex-3.1.7, happy-1.19.5], sources: [hvr-ghc]}}
allow_failures:
- env: BUILD=stack GHCVER=8.2.2 STACK_YAML=stack.yaml
compiler: ": #stack 8.2.2 osx"
os: osx
# Note: the distinction between `before_install` and `install` is not important.
# - in before_install we install build tools
# - in install we install (haskell) dependencies
before_install:
- unset CC
- case "$BUILD" in
style)
export PATH="$TRAVIS_BUILD_DIR"/hlint:$PATH
;;
cabal)
export PATH=$HOME/.cabal/bin:/opt/ghc/$GHCVER/bin:/opt/happy/1.19.5/bin:/opt/alex/3.1.7/bin:/opt/cabal/$CABALVER/bin:$PATH
;;
*)
export PATH=$HOME/.local/bin:/opt/ghc/$GHCVER/bin:/opt/happy/1.19.5/bin:/opt/alex/3.1.7/bin:$PATH
;;
esac
- ./.travis-setup.sh
install:
- if ! [ "$BUILD" = style ]; then echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo '?')]"; fi
# Note: we build Cabal by themselves below due to high memory usage/time
- |
set -ex
case "$BUILD" in
style)
./etc/scripts/get-hlint.sh
;;
cabal)
cabal --version
travis_retry cabal update
rm -f $HOME/.cabal/bin/stack
echo "stack is located at $(which stack)"
stack --version
echo Removing any old dist files
rm -f $(stack --stack-yaml=$STACK_YAML path --dist-dir)/stack-*.tar.gz
echo To avoid custom Cabal setup business, switching temporarily to Simple
cp stack.cabal stack.orig-cabal
sed 's@build-type\:.*@build-type\: Simple@' < stack.orig-cabal > stack.cabal
echo Generating new dist with pvp bounds in the cabal file
stack --system-ghc --stack-yaml=$STACK_YAML sdist --pvp-bounds=both
echo Grabbing the newly generated stack.cabal file from the tarball
tar xf $(stack --system-ghc --compiler=ghc-$GHCVER path --dist-dir)/stack-*.tar.gz --wildcards --strip-components=1 '*/stack.cabal'
echo Switching back to Custom build type
cp stack.cabal stack.orig-cabal
sed 's@build-type\:.*@build-type\: Custom@' < stack.orig-cabal > stack.cabal
rm -f stack.orig-cabal
echo Performing the actual build now that we have the right stack.cabal
cabal install --only-dependencies --enable-tests --enable-benchmarks --force-reinstalls --ghc-options=-O0 --reorder-goals --max-backjumps=-1
;;
*)
travis_wait stack --no-terminal build Cabal
stack --no-terminal test --only-dependencies
;;
esac
set +ex
script:
- GHC_OPTIONS="-Werror"
- |
set -ex
case "$BUILD" in
style)
hlint src/
hlint src/ --cpp-define=WINDOWS=1
hlint test/ --cpp-simple
;;
stack)
echo Build stack package first, so that it generates output to stdout.
echo Otherwise Travis thinks we stalled.
stack --no-terminal test --haddock --no-haddock-deps --ghc-options="$GHC_OPTIONS" stack
echo Build the other, smaller subpackages.
stack --no-terminal test --haddock --no-haddock-deps --ghc-options="$GHC_OPTIONS"
;;
pedantic)
stack --no-terminal build --pedantic stack
stack --no-terminal build --pedantic
;;
cabal)
cabal configure --enable-tests --enable-benchmarks -v2 --ghc-options="-O0 $GHC_OPTIONS"
cabal build
cabal test
cabal check
cabal sdist
cabal copy
cd test/integration
true stack setup --compiler=ghc-$GHCVER
true stack test --compiler=ghc-$GHCVER
cd ../..
SRC_TGZ=$(cabal info . | awk '{print $2;exit}').tar.gz
(cd dist && cabal install --force-reinstalls "$SRC_TGZ")
;;
esac
set +ex