-
Notifications
You must be signed in to change notification settings - Fork 26
/
.travis.yml
168 lines (153 loc) · 5.27 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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
# This file is modified by Zilin Chen, based on the template generated by https://github.com/hvr/multi-ghc-travis
language: c
sudo: required
dist: trusty
group: edge
git:
submodules: false
# branches:
# except:
# - branch-name
cache:
directories:
- $HOME/.cabsnap
- $HOME/.ghc
- $HOME/.cabal/lib
- $HOME/.cabal/share
- $HOME/.cabal/packages
- $HOME/.cabal/bin
# - $REPO/cogent/$SANDBOX
- $HOME/z3
before_cache:
- rm -fv $HOME/.cabal/packages/hackage.haskell.org/build-reports.log
- rm -fv $HOME/.cabal/packages/hackage.haskell.org/00-index.tar
env:
global:
- SANDBOX=".cabal-sandbox"
- REPO=$TRAVIS_BUILD_DIR
matrix:
include:
- env: CABALVER=2.2 GHCVER=8.4.1
compiler: ": #GHC 8.4.1"
addons: {apt: {packages: [cabal-install-2.2,ghc-8.4.1,alex-3.1.7,happy-1.19.5], sources: [hvr-ghc]}}
- env: CABALVER=2.2 GHCVER=8.4.2
compiler: ": #GHC 8.4.2"
addons: {apt: {packages: [cabal-install-2.2,ghc-8.4.2,alex-3.1.7,happy-1.19.5], sources: [hvr-ghc]}}
- env: CABALVER=2.2 GHCVER=8.4.3
compiler: ": #GHC 8.4.3"
addons: {apt: {packages: [cabal-install-2.2,ghc-8.4.3,alex-3.1.7,happy-1.19.5], sources: [hvr-ghc]}}
- env: CABALVER=2.0 GHCVER=8.2.1
compiler: ": #GHC 8.2.1"
addons: {apt: {packages: [cabal-install-2.0,ghc-8.2.1,alex-3.1.7,happy-1.19.5], sources: [hvr-ghc]}}
- env: CABALVER=2.0 GHCVER=8.2.2
compiler: ": #GHC 8.2.2"
addons: {apt: {packages: [cabal-install-2.0,ghc-8.2.2,alex-3.1.7,happy-1.19.5], sources: [hvr-ghc]}}
# allow_failures:
# - env: CABALVER=2.0 GHCVER=8.4.1
fast_finish: true
before_install:
- unset CC
- export ALEXVER=3.1.7
- export HAPPYVER=1.19.5
- export PATH=~/.cabal/bin:/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:/opt/happy/$HAPPYVER/bin:/opt/alex/$ALEXVER/bin:$REPO/cogent/$SANDBOX/bin:$PATH
install:
- cabal --version
- echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo '?')]"
- if [ -f "$HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz" ];
then
echo "==== Hackage index file found ====";
zcat $HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz >
$HOME/.cabal/packages/hackage.haskell.org/00-index.tar;
fi
- travis_retry cabal update # -v
- cd cogent
- cabal sandbox init
- cabal sandbox add-source ../isa-parser
- "sed -i 's/^jobs:.*$/jobs: 2/' $HOME/.cabal/config"
# - sed -i 's/^jobs:/ jobs:/' ${HOME}/.cabal/config
# Use fixed build plans
- cp misc/cabal.config.d/cabal.config-$GHCVER cabal.config
- |
# In the future, the nix-style thingy might be helpful
if cabal install --only-dependencies --force-reinstalls --enable-tests --dry -v > installplan.txt;
then
sed -i -e '1,/^Resolving /d' installplan.txt;
echo "==== Succeeded to generate an install plan. ====";
cat installplan.txt; # Debugging
else
echo "==== Failed to generate an install plan. ====";
cat installplan.txt; # Display errors
fi
# check whether current requested install-plan matches cached package-db snapshot
- |
if diff -u $HOME/.cabsnap/installplan.txt installplan.txt;
then
echo "==== cabal build-cache HIT ===="; # so copy cached sandbox
rm -rf $SANDBOX
cp -a $HOME/.cabsnap/$SANDBOX $REPO/cogent/
else
echo "==== cabal build-cache MISS (or error) ====";
rm -rf $HOME/.cabsnap;
# mkdir -p $HOME/.ghc $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin;
cabal install --only-dependencies --force-reinstalls; # --enable-tests;
fi
# snapshot package-db on cache miss
- |
if [ ! -d $HOME/.cabsnap ];
then
echo "==== snapshotting package-db to build-cache ====";
mkdir $HOME/.cabsnap;
cp installplan.txt $HOME/.cabsnap/.
cp -a $SANDBOX $HOME/.cabsnap/
fi
# Install z3
- cd $REPO
- git submodule update --init -- z3
- cd z3
- mkdir -p "$HOME"/z3
- export PATH="$HOME/z3/bin:$PATH"
- |
if ! which z3;
then # install z3
python scripts/mk_make.py --prefix="$HOME/z3"
cd build
make
make install
fi
- which z3 || travis_terminate 1
# Here starts the actual work to be performed for the package under test;
# any command which exits with a non-zero exit code causes the build to fail.
script:
- cd $REPO/cogent
# - echo 'Configuring Cogent'
- cabal configure # --enable-tests # or -v2 to provide useful information for debugging
# - echo 'Installing Cogent'
- cabal install --force-reinstalls # --enable-tests
# - cabal build # this builds all libraries and executables (including tests/benchmarks)
# - cabal test # this rarely changes, so disabled for now to save some time / zilinc
# - cabal check
- cabal haddock
# Check if Cogent has been correctly installed
- which cogent || travis_terminate 1
# - echo 'Running tests'
- make test-pp
- make test-tc
- make test-ds
- make test-an
- make test-mn
- make test-cg
- make test-aq
- make test-flags
# - echo 'Typechecking libgum'
- make test-libgum
# - echo 'Building Cogent examples'
- make examples
# - echo 'Generating ext2fs C code from Cogent'
- cd $REPO/impl/fs/ext2/cogent && travis_wait make .c-gen
# - echo 'Generating BilbyFs C code from Cogent'
- cd $REPO/impl/fs/bilby/cogent && travis_wait make .c-gen
notifications:
slack:
rooms:
- cogent-club:dUKOfdIU3BGsvalWStE0BCGG#travis
# EOF