Skip to content

Commit 664c6ec

Browse files
committed
Switch to Github Actions
1 parent d5b0170 commit 664c6ec

File tree

7 files changed

+233
-209
lines changed

7 files changed

+233
-209
lines changed

.github/workflows/haskell-ci.yml

Lines changed: 224 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,224 @@
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.12
12+
#
13+
# REGENDATA ("0.12",["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 - ${{ matrix.compiler }}
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+
- compiler: ghc-8.10.4
34+
allow-failure: false
35+
- compiler: ghc-8.8.4
36+
allow-failure: false
37+
- compiler: ghc-8.6.5
38+
allow-failure: false
39+
- compiler: ghc-8.4.4
40+
allow-failure: false
41+
- compiler: ghc-8.2.2
42+
allow-failure: false
43+
fail-fast: false
44+
steps:
45+
- name: apt
46+
run: |
47+
apt-get update
48+
apt-get install -y --no-install-recommends gnupg ca-certificates dirmngr curl git software-properties-common
49+
apt-add-repository -y 'ppa:hvr/ghc'
50+
apt-get update
51+
apt-get install -y $CC cabal-install-3.4
52+
env:
53+
CC: ${{ matrix.compiler }}
54+
- name: Set PATH and environment variables
55+
run: |
56+
echo "$HOME/.cabal/bin" >> $GITHUB_PATH
57+
echo "LANG=C.UTF-8" >> $GITHUB_ENV
58+
echo "CABAL_DIR=$HOME/.cabal" >> $GITHUB_ENV
59+
echo "CABAL_CONFIG=$HOME/.cabal/config" >> $GITHUB_ENV
60+
HCDIR=$(echo "/opt/$CC" | sed 's/-/\//')
61+
HCNAME=ghc
62+
HC=$HCDIR/bin/$HCNAME
63+
echo "HC=$HC" >> $GITHUB_ENV
64+
echo "HCPKG=$HCDIR/bin/$HCNAME-pkg" >> $GITHUB_ENV
65+
echo "HADDOCK=$HCDIR/bin/haddock" >> $GITHUB_ENV
66+
echo "CABAL=/opt/cabal/3.4/bin/cabal -vnormal+nowrap" >> $GITHUB_ENV
67+
HCNUMVER=$(${HC} --numeric-version|perl -ne '/^(\d+)\.(\d+)\.(\d+)(\.(\d+))?$/; print(10000 * $1 + 100 * $2 + ($3 == 0 ? $5 != 1 : $3))')
68+
echo "HCNUMVER=$HCNUMVER" >> $GITHUB_ENV
69+
echo "ARG_TESTS=--enable-tests" >> $GITHUB_ENV
70+
echo "ARG_BENCH=--enable-benchmarks" >> $GITHUB_ENV
71+
echo "HEADHACKAGE=false" >> $GITHUB_ENV
72+
echo "ARG_COMPILER=--$HCNAME --with-compiler=$HC" >> $GITHUB_ENV
73+
echo "GHCJSARITH=0" >> $GITHUB_ENV
74+
env:
75+
CC: ${{ matrix.compiler }}
76+
- name: env
77+
run: |
78+
env
79+
- name: write cabal config
80+
run: |
81+
mkdir -p $CABAL_DIR
82+
cat >> $CABAL_CONFIG <<EOF
83+
remote-build-reporting: anonymous
84+
write-ghc-environment-files: never
85+
remote-repo-cache: $CABAL_DIR/packages
86+
logs-dir: $CABAL_DIR/logs
87+
world-file: $CABAL_DIR/world
88+
extra-prog-path: $CABAL_DIR/bin
89+
symlink-bindir: $CABAL_DIR/bin
90+
installdir: $CABAL_DIR/bin
91+
build-summary: $CABAL_DIR/logs/build.log
92+
store-dir: $CABAL_DIR/store
93+
install-dirs user
94+
prefix: $CABAL_DIR
95+
repository hackage.haskell.org
96+
url: http://hackage.haskell.org/
97+
EOF
98+
cat $CABAL_CONFIG
99+
- name: versions
100+
run: |
101+
$HC --version || true
102+
$HC --print-project-git-commit-id || true
103+
$CABAL --version || true
104+
- name: update cabal index
105+
run: |
106+
$CABAL v2-update -v
107+
- name: install cabal-plan
108+
run: |
109+
mkdir -p $HOME/.cabal/bin
110+
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
111+
echo 'de73600b1836d3f55e32d80385acc055fd97f60eaa0ab68a755302685f5d81bc cabal-plan.xz' | sha256sum -c -
112+
xz -d < cabal-plan.xz > $HOME/.cabal/bin/cabal-plan
113+
rm -f cabal-plan.xz
114+
chmod a+x $HOME/.cabal/bin/cabal-plan
115+
cabal-plan --version
116+
- name: checkout
117+
uses: actions/checkout@v2
118+
with:
119+
path: source
120+
- name: initial cabal.project for sdist
121+
run: |
122+
touch cabal.project
123+
echo "packages: $GITHUB_WORKSPACE/source/servant-swagger-ui" >> cabal.project
124+
echo "packages: $GITHUB_WORKSPACE/source/servant-swagger-ui-core" >> cabal.project
125+
echo "packages: $GITHUB_WORKSPACE/source/servant-swagger-ui-example" >> cabal.project
126+
echo "packages: $GITHUB_WORKSPACE/source/servant-swagger-ui-jensoleg" >> cabal.project
127+
echo "packages: $GITHUB_WORKSPACE/source/servant-swagger-ui-redoc" >> cabal.project
128+
cat cabal.project
129+
- name: sdist
130+
run: |
131+
mkdir -p sdist
132+
$CABAL sdist all --output-dir $GITHUB_WORKSPACE/sdist
133+
- name: unpack
134+
run: |
135+
mkdir -p unpacked
136+
find sdist -maxdepth 1 -type f -name '*.tar.gz' -exec tar -C $GITHUB_WORKSPACE/unpacked -xzvf {} \;
137+
- name: generate cabal.project
138+
run: |
139+
PKGDIR_servant_swagger_ui="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/servant-swagger-ui-[0-9.]*')"
140+
echo "PKGDIR_servant_swagger_ui=${PKGDIR_servant_swagger_ui}" >> $GITHUB_ENV
141+
PKGDIR_servant_swagger_ui_core="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/servant-swagger-ui-core-[0-9.]*')"
142+
echo "PKGDIR_servant_swagger_ui_core=${PKGDIR_servant_swagger_ui_core}" >> $GITHUB_ENV
143+
PKGDIR_servant_swagger_ui_example="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/servant-swagger-ui-example-[0-9.]*')"
144+
echo "PKGDIR_servant_swagger_ui_example=${PKGDIR_servant_swagger_ui_example}" >> $GITHUB_ENV
145+
PKGDIR_servant_swagger_ui_jensoleg="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/servant-swagger-ui-jensoleg-[0-9.]*')"
146+
echo "PKGDIR_servant_swagger_ui_jensoleg=${PKGDIR_servant_swagger_ui_jensoleg}" >> $GITHUB_ENV
147+
PKGDIR_servant_swagger_ui_redoc="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/servant-swagger-ui-redoc-[0-9.]*')"
148+
echo "PKGDIR_servant_swagger_ui_redoc=${PKGDIR_servant_swagger_ui_redoc}" >> $GITHUB_ENV
149+
touch cabal.project
150+
touch cabal.project.local
151+
echo "packages: ${PKGDIR_servant_swagger_ui}" >> cabal.project
152+
echo "packages: ${PKGDIR_servant_swagger_ui_core}" >> cabal.project
153+
echo "packages: ${PKGDIR_servant_swagger_ui_example}" >> cabal.project
154+
echo "packages: ${PKGDIR_servant_swagger_ui_jensoleg}" >> cabal.project
155+
echo "packages: ${PKGDIR_servant_swagger_ui_redoc}" >> cabal.project
156+
echo "package servant-swagger-ui" >> cabal.project
157+
echo " ghc-options: -Werror=missing-methods" >> cabal.project
158+
echo "package servant-swagger-ui-core" >> cabal.project
159+
echo " ghc-options: -Werror=missing-methods" >> cabal.project
160+
echo "package servant-swagger-ui-example" >> cabal.project
161+
echo " ghc-options: -Werror=missing-methods" >> cabal.project
162+
echo "package servant-swagger-ui-jensoleg" >> cabal.project
163+
echo " ghc-options: -Werror=missing-methods" >> cabal.project
164+
echo "package servant-swagger-ui-redoc" >> cabal.project
165+
echo " ghc-options: -Werror=missing-methods" >> cabal.project
166+
cat >> cabal.project <<EOF
167+
EOF
168+
$HCPKG list --simple-output --names-only | perl -ne 'for (split /\s+/) { print "constraints: $_ installed\n" unless /^(servant-swagger-ui|servant-swagger-ui-core|servant-swagger-ui-example|servant-swagger-ui-jensoleg|servant-swagger-ui-redoc)$/; }' >> cabal.project.local
169+
cat cabal.project
170+
cat cabal.project.local
171+
- name: dump install plan
172+
run: |
173+
$CABAL v2-build $ARG_COMPILER $ARG_TESTS $ARG_BENCH --dry-run all
174+
cabal-plan
175+
- name: cache
176+
uses: actions/cache@v2
177+
with:
178+
key: ${{ runner.os }}-${{ matrix.compiler }}-${{ github.sha }}
179+
path: ~/.cabal/store
180+
restore-keys: ${{ runner.os }}-${{ matrix.compiler }}-
181+
- name: install dependencies
182+
run: |
183+
$CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks --dependencies-only -j2 all
184+
$CABAL v2-build $ARG_COMPILER $ARG_TESTS $ARG_BENCH --dependencies-only -j2 all
185+
- name: build w/o tests
186+
run: |
187+
$CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks all
188+
- name: build
189+
run: |
190+
$CABAL v2-build $ARG_COMPILER $ARG_TESTS $ARG_BENCH all --write-ghc-environment-files=always
191+
- name: cabal check
192+
run: |
193+
cd ${PKGDIR_servant_swagger_ui} || false
194+
${CABAL} -vnormal check
195+
cd ${PKGDIR_servant_swagger_ui_core} || false
196+
${CABAL} -vnormal check
197+
cd ${PKGDIR_servant_swagger_ui_example} || false
198+
${CABAL} -vnormal check
199+
cd ${PKGDIR_servant_swagger_ui_jensoleg} || false
200+
${CABAL} -vnormal check
201+
cd ${PKGDIR_servant_swagger_ui_redoc} || false
202+
${CABAL} -vnormal check
203+
- name: haddock
204+
run: |
205+
$CABAL v2-haddock $ARG_COMPILER --with-haddock $HADDOCK $ARG_TESTS $ARG_BENCH all
206+
- name: unconstrained build
207+
run: |
208+
rm -f cabal.project.local
209+
$CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks all
210+
- name: prepare for constraint sets
211+
run: |
212+
rm -f cabal.project.local
213+
- name: constraint set servant-0.17
214+
run: |
215+
if [ $((HCNUMVER < 81000)) -ne 0 ] ; then $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks --constraint='servant ==0.17.*' all ; fi
216+
- name: constraint set servant-0.16
217+
run: |
218+
if [ $((HCNUMVER < 81000)) -ne 0 ] ; then $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks --constraint='servant ==0.16.*' all ; fi
219+
- name: constraint set servant-0.15
220+
run: |
221+
if [ $((HCNUMVER < 80800)) -ne 0 ] ; then $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks --constraint='servant ==0.15.*' all ; fi
222+
- name: constraint set servant-0.14
223+
run: |
224+
if [ $((HCNUMVER < 80800)) -ne 0 ] ; then $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks --constraint='servant ==0.14.*' all ; fi

0 commit comments

Comments
 (0)