Skip to content

Commit 6d8ae4d

Browse files
authored
Switch CI from Travis to GitHub Actions (#313)
1 parent 853471c commit 6d8ae4d

File tree

7 files changed

+237
-208
lines changed

7 files changed

+237
-208
lines changed

.github/workflows/haskell-ci.yml

Lines changed: 227 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,227 @@
1+
# This GitHub workflow config has been generated by a script via
2+
#
3+
# haskell-ci 'github' '--config=cabal.haskell-ci' 'cabal.project'
4+
#
5+
# To regenerate the script (for example after adjusting tested-with) run
6+
#
7+
# haskell-ci regenerate
8+
#
9+
# For more information, see https://github.com/haskell-CI/haskell-ci
10+
#
11+
# version: 0.11.20210222
12+
#
13+
# REGENDATA ("0.11.20210222",["github","--config=cabal.haskell-ci","cabal.project"])
14+
#
15+
name: Haskell-CI
16+
on:
17+
push:
18+
branches:
19+
- master
20+
pull_request:
21+
branches:
22+
- master
23+
jobs:
24+
linux:
25+
name: Haskell-CI - Linux - GHC ${{ matrix.ghc }}
26+
runs-on: ubuntu-18.04
27+
container:
28+
image: buildpack-deps:bionic
29+
continue-on-error: ${{ matrix.allow-failure }}
30+
strategy:
31+
matrix:
32+
include:
33+
- ghc: 9.0.1
34+
allow-failure: false
35+
- ghc: 8.10.4
36+
allow-failure: false
37+
- ghc: 8.8.4
38+
allow-failure: false
39+
- ghc: 8.6.5
40+
allow-failure: false
41+
- ghc: 8.4.4
42+
allow-failure: false
43+
- ghc: 8.2.2
44+
allow-failure: false
45+
- ghc: 8.0.2
46+
allow-failure: false
47+
- ghc: 7.10.3
48+
allow-failure: false
49+
- ghc: 7.8.4
50+
allow-failure: false
51+
- ghc: 7.6.3
52+
allow-failure: false
53+
- ghc: 7.4.2
54+
allow-failure: false
55+
- ghc: 7.2.2
56+
allow-failure: false
57+
- ghc: 7.0.4
58+
allow-failure: false
59+
fail-fast: false
60+
steps:
61+
- name: apt
62+
run: |
63+
apt-get update
64+
apt-get install -y --no-install-recommends gnupg ca-certificates dirmngr curl git software-properties-common
65+
apt-add-repository -y 'ppa:hvr/ghc'
66+
apt-get update
67+
apt-get install -y ghc-$GHC_VERSION cabal-install-3.4
68+
env:
69+
GHC_VERSION: ${{ matrix.ghc }}
70+
- name: Set PATH and environment variables
71+
run: |
72+
echo "$HOME/.cabal/bin" >> $GITHUB_PATH
73+
echo "LANG=C.UTF-8" >> $GITHUB_ENV
74+
echo "CABAL_DIR=$HOME/.cabal" >> $GITHUB_ENV
75+
echo "CABAL_CONFIG=$HOME/.cabal/config" >> $GITHUB_ENV
76+
HC=/opt/ghc/$GHC_VERSION/bin/ghc
77+
echo "HC=$HC" >> $GITHUB_ENV
78+
echo "HCPKG=/opt/ghc/$GHC_VERSION/bin/ghc-pkg" >> $GITHUB_ENV
79+
echo "HADDOCK=/opt/ghc/$GHC_VERSION/bin/haddock" >> $GITHUB_ENV
80+
echo "CABAL=/opt/cabal/3.4/bin/cabal -vnormal+nowrap" >> $GITHUB_ENV
81+
HCNUMVER=$(${HC} --numeric-version|perl -ne '/^(\d+)\.(\d+)\.(\d+)(\.(\d+))?$/; print(10000 * $1 + 100 * $2 + ($3 == 0 ? $5 != 1 : $3))')
82+
echo "HCNUMVER=$HCNUMVER" >> $GITHUB_ENV
83+
echo "ARG_TESTS=--enable-tests" >> $GITHUB_ENV
84+
if [ $((HCNUMVER >= 70400)) -ne 0 ] ; then echo "ARG_BENCH=--enable-benchmarks" >> $GITHUB_ENV ; else echo "ARG_BENCH=--disable-benchmarks" >> $GITHUB_ENV ; fi
85+
echo "HEADHACKAGE=false" >> $GITHUB_ENV
86+
echo "ARG_COMPILER=--ghc --with-compiler=$HC" >> $GITHUB_ENV
87+
echo "GHCJSARITH=0" >> $GITHUB_ENV
88+
env:
89+
GHC_VERSION: ${{ matrix.ghc }}
90+
- name: env
91+
run: |
92+
env
93+
- name: write cabal config
94+
run: |
95+
mkdir -p $CABAL_DIR
96+
cat >> $CABAL_CONFIG <<EOF
97+
remote-build-reporting: anonymous
98+
write-ghc-environment-files: never
99+
remote-repo-cache: $CABAL_DIR/packages
100+
logs-dir: $CABAL_DIR/logs
101+
world-file: $CABAL_DIR/world
102+
extra-prog-path: $CABAL_DIR/bin
103+
symlink-bindir: $CABAL_DIR/bin
104+
installdir: $CABAL_DIR/bin
105+
build-summary: $CABAL_DIR/logs/build.log
106+
store-dir: $CABAL_DIR/store
107+
install-dirs user
108+
prefix: $CABAL_DIR
109+
repository hackage.haskell.org
110+
url: http://hackage.haskell.org/
111+
EOF
112+
cat $CABAL_CONFIG
113+
- name: versions
114+
run: |
115+
$HC --version || true
116+
$HC --print-project-git-commit-id || true
117+
$CABAL --version || true
118+
- name: update cabal index
119+
run: |
120+
$CABAL v2-update -v
121+
- name: cache (tools)
122+
uses: actions/cache@v2
123+
with:
124+
key: ${{ runner.os }}-${{ matrix.ghc }}-tools-2f29a7e3
125+
path: ~/.haskell-ci-tools
126+
- name: install cabal-plan
127+
run: |
128+
mkdir -p $HOME/.cabal/bin
129+
curl -sL https://github.com/haskell-hvr/cabal-plan/releases/download/v0.6.2.0/cabal-plan-0.6.2.0-x86_64-linux.xz > cabal-plan.xz
130+
echo 'de73600b1836d3f55e32d80385acc055fd97f60eaa0ab68a755302685f5d81bc cabal-plan.xz' | sha256sum -c -
131+
xz -d < cabal-plan.xz > $HOME/.cabal/bin/cabal-plan
132+
rm -f cabal-plan.xz
133+
chmod a+x $HOME/.cabal/bin/cabal-plan
134+
cabal-plan --version
135+
- name: install doctest
136+
run: |
137+
if [ $((HCNUMVER >= 80000 && HCNUMVER < 90000)) -ne 0 ] ; then $CABAL --store-dir=$HOME/.haskell-ci-tools/store v2-install $ARG_COMPILER --ignore-project -j2 doctest --constraint='doctest ^>=0.17' ; fi
138+
if [ $((HCNUMVER >= 80000 && HCNUMVER < 90000)) -ne 0 ] ; then doctest --version ; fi
139+
- name: checkout
140+
uses: actions/checkout@v2
141+
with:
142+
path: source
143+
- name: initial cabal.project for sdist
144+
run: |
145+
touch cabal.project
146+
echo "packages: $GITHUB_WORKSPACE/source/." >> cabal.project
147+
echo "packages: $GITHUB_WORKSPACE/source/tests" >> cabal.project
148+
echo "packages: $GITHUB_WORKSPACE/source/th-tests" >> cabal.project
149+
if [ $((HCNUMVER >= 71000)) -ne 0 ] ; then echo "packages: $GITHUB_WORKSPACE/source/benchmarks" >> cabal.project ; fi
150+
cat cabal.project
151+
- name: sdist
152+
run: |
153+
mkdir -p sdist
154+
$CABAL sdist all --output-dir $GITHUB_WORKSPACE/sdist
155+
- name: unpack
156+
run: |
157+
mkdir -p unpacked
158+
find sdist -maxdepth 1 -type f -name '*.tar.gz' -exec tar -C $GITHUB_WORKSPACE/unpacked -xzvf {} \;
159+
- name: generate cabal.project
160+
run: |
161+
PKGDIR_text="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/text-[0-9.]*')"
162+
echo "PKGDIR_text=${PKGDIR_text}" >> $GITHUB_ENV
163+
PKGDIR_text_tests="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/text-tests-[0-9.]*')"
164+
echo "PKGDIR_text_tests=${PKGDIR_text_tests}" >> $GITHUB_ENV
165+
PKGDIR_th_tests="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/th-tests-[0-9.]*')"
166+
echo "PKGDIR_th_tests=${PKGDIR_th_tests}" >> $GITHUB_ENV
167+
PKGDIR_text_benchmarks="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/text-benchmarks-[0-9.]*')"
168+
echo "PKGDIR_text_benchmarks=${PKGDIR_text_benchmarks}" >> $GITHUB_ENV
169+
touch cabal.project
170+
touch cabal.project.local
171+
echo "packages: ${PKGDIR_text}" >> cabal.project
172+
echo "packages: ${PKGDIR_text_tests}" >> cabal.project
173+
echo "packages: ${PKGDIR_th_tests}" >> cabal.project
174+
if [ $((HCNUMVER >= 71000)) -ne 0 ] ; then echo "packages: ${PKGDIR_text_benchmarks}" >> cabal.project ; fi
175+
if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package text" >> cabal.project ; fi
176+
if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi
177+
if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package text-tests" >> cabal.project ; fi
178+
if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi
179+
if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package th-tests" >> cabal.project ; fi
180+
if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi
181+
if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package text-benchmarks" >> cabal.project ; fi
182+
if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi
183+
cat >> cabal.project <<EOF
184+
EOF
185+
$HCPKG list --simple-output --names-only | perl -ne 'for (split /\s+/) { print "constraints: $_ installed\n" unless /^(parsec|text|text-benchmarks|text-tests|th-tests)$/; }' >> cabal.project.local
186+
cat cabal.project
187+
cat cabal.project.local
188+
- name: dump install plan
189+
run: |
190+
$CABAL v2-build $ARG_COMPILER $ARG_TESTS $ARG_BENCH --dry-run all
191+
cabal-plan
192+
- name: cache
193+
uses: actions/cache@v2
194+
with:
195+
key: ${{ runner.os }}-${{ matrix.ghc }}-${{ github.sha }}
196+
path: ~/.cabal/store
197+
restore-keys: ${{ runner.os }}-${{ matrix.ghc }}-
198+
- name: build w/o tests
199+
run: |
200+
$CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks all
201+
- name: build
202+
run: |
203+
$CABAL v2-build $ARG_COMPILER $ARG_TESTS $ARG_BENCH all --write-ghc-environment-files=always
204+
- name: tests
205+
run: |
206+
$CABAL v2-test $ARG_COMPILER $ARG_TESTS $ARG_BENCH all --test-show-details=direct
207+
- name: doctest
208+
run: |
209+
if [ $((HCNUMVER >= 80000 && HCNUMVER < 90000)) -ne 0 ] ; then cd ${PKGDIR_text} || false ; fi
210+
if [ $((HCNUMVER >= 80000 && HCNUMVER < 90000)) -ne 0 ] ; then doctest -fobject-code -DINTEGER_GMP -XNondecreasingIndentation src ; fi
211+
- name: cabal check
212+
run: |
213+
cd ${PKGDIR_text} || false
214+
${CABAL} -vnormal check
215+
cd ${PKGDIR_text_tests} || false
216+
${CABAL} -vnormal check
217+
cd ${PKGDIR_th_tests} || false
218+
${CABAL} -vnormal check
219+
if [ $((HCNUMVER >= 71000)) -ne 0 ] ; then cd ${PKGDIR_text_benchmarks} || false ; fi
220+
if [ $((HCNUMVER >= 71000)) -ne 0 ] ; then ${CABAL} -vnormal check ; fi
221+
- name: haddock
222+
run: |
223+
$CABAL v2-haddock $ARG_COMPILER --with-haddock $HADDOCK $ARG_TESTS $ARG_BENCH all
224+
- name: unconstrained build
225+
run: |
226+
rm -f cabal.project.local
227+
$CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks all

0 commit comments

Comments
 (0)