Skip to content

Commit d7a472d

Browse files
authored
Merge pull request #822 from haskell/gha
Use GitHub Actions
2 parents 3b678ac + f72f7c6 commit d7a472d

20 files changed

+440
-745
lines changed

.github/workflows/haskell-ci.yml

Lines changed: 215 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,215 @@
1+
# This GitHub workflow config has been generated by a script via
2+
#
3+
# haskell-ci 'github' '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.20210214
12+
#
13+
# REGENDATA ("0.11.20210214",["github","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: 8.10.1
34+
allow-failure: false
35+
- ghc: 8.8.3
36+
allow-failure: false
37+
- ghc: 8.6.5
38+
allow-failure: false
39+
- ghc: 8.4.4
40+
allow-failure: false
41+
- ghc: 8.2.2
42+
allow-failure: false
43+
- ghc: 8.0.2
44+
allow-failure: false
45+
- ghc: 7.10.3
46+
allow-failure: false
47+
- ghc: 7.8.4
48+
allow-failure: false
49+
fail-fast: false
50+
steps:
51+
- name: apt
52+
run: |
53+
apt-get update
54+
apt-get install -y --no-install-recommends gnupg ca-certificates dirmngr curl git software-properties-common
55+
apt-add-repository -y 'ppa:hvr/ghc'
56+
apt-get update
57+
apt-get install -y ghc-$GHC_VERSION cabal-install-3.2
58+
env:
59+
GHC_VERSION: ${{ matrix.ghc }}
60+
- name: Set PATH and environment variables
61+
run: |
62+
echo "$HOME/.cabal/bin" >> $GITHUB_PATH
63+
echo "LANG=C.UTF-8" >> $GITHUB_ENV
64+
echo "CABAL_DIR=$HOME/.cabal" >> $GITHUB_ENV
65+
echo "CABAL_CONFIG=$HOME/.cabal/config" >> $GITHUB_ENV
66+
HC=/opt/ghc/$GHC_VERSION/bin/ghc
67+
echo "HC=$HC" >> $GITHUB_ENV
68+
echo "HCPKG=/opt/ghc/$GHC_VERSION/bin/ghc-pkg" >> $GITHUB_ENV
69+
echo "HADDOCK=/opt/ghc/$GHC_VERSION/bin/haddock" >> $GITHUB_ENV
70+
echo "CABAL=/opt/cabal/3.2/bin/cabal -vnormal+nowrap" >> $GITHUB_ENV
71+
HCNUMVER=$(${HC} --numeric-version|perl -ne '/^(\d+)\.(\d+)\.(\d+)(\.(\d+))?$/; print(10000 * $1 + 100 * $2 + ($3 == 0 ? $5 != 1 : $3))')
72+
echo "HCNUMVER=$HCNUMVER" >> $GITHUB_ENV
73+
echo "ARG_TESTS=--enable-tests" >> $GITHUB_ENV
74+
echo "ARG_BENCH=--enable-benchmarks" >> $GITHUB_ENV
75+
echo "HEADHACKAGE=false" >> $GITHUB_ENV
76+
echo "ARG_COMPILER=--ghc --with-compiler=/opt/ghc/$GHC_VERSION/bin/ghc" >> $GITHUB_ENV
77+
echo "GHCJSARITH=0" >> $GITHUB_ENV
78+
env:
79+
GHC_VERSION: ${{ matrix.ghc }}
80+
- name: env
81+
run: |
82+
env
83+
- name: write cabal config
84+
run: |
85+
mkdir -p $CABAL_DIR
86+
cat >> $CABAL_CONFIG <<EOF
87+
remote-build-reporting: anonymous
88+
write-ghc-environment-files: never
89+
remote-repo-cache: $CABAL_DIR/packages
90+
logs-dir: $CABAL_DIR/logs
91+
world-file: $CABAL_DIR/world
92+
extra-prog-path: $CABAL_DIR/bin
93+
symlink-bindir: $CABAL_DIR/bin
94+
installdir: $CABAL_DIR/bin
95+
build-summary: $CABAL_DIR/logs/build.log
96+
store-dir: $CABAL_DIR/store
97+
install-dirs user
98+
prefix: $CABAL_DIR
99+
repository hackage.haskell.org
100+
url: http://hackage.haskell.org/
101+
EOF
102+
cat $CABAL_CONFIG
103+
- name: versions
104+
run: |
105+
$HC --version || true
106+
$HC --print-project-git-commit-id || true
107+
$CABAL --version || true
108+
- name: update cabal index
109+
run: |
110+
$CABAL v2-update -v
111+
- name: cache (tools)
112+
uses: actions/cache@v2
113+
with:
114+
key: ${{ runner.os }}-${{ matrix.ghc }}-tools-6e0baf7c
115+
path: ~/.haskell-ci-tools
116+
- name: install cabal-plan
117+
run: |
118+
mkdir -p $HOME/.cabal/bin
119+
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
120+
echo 'de73600b1836d3f55e32d80385acc055fd97f60eaa0ab68a755302685f5d81bc cabal-plan.xz' | sha256sum -c -
121+
xz -d < cabal-plan.xz > $HOME/.cabal/bin/cabal-plan
122+
rm -f cabal-plan.xz
123+
chmod a+x $HOME/.cabal/bin/cabal-plan
124+
cabal-plan --version
125+
- name: install hlint
126+
run: |
127+
if [ $((HCNUMVER >= 80800 && HCNUMVER < 81000)) -ne 0 ] ; then HLINTVER=$(cd /tmp && (${CABAL} v2-install -v $ARG_COMPILER --dry-run hlint --constraint='hlint >=3.2 && <3.3' | perl -ne 'if (/\bhlint-(\d+(\.\d+)*)\b/) { print "$1"; last; }')); echo "HLint version $HLINTVER" ; fi
128+
if [ $((HCNUMVER >= 80800 && HCNUMVER < 81000)) -ne 0 ] ; then if [ ! -e $HOME/.haskell-ci-tools/hlint-$HLINTVER/hlint ]; then echo "Downloading HLint version $HLINTVER"; mkdir -p $HOME/.haskell-ci-tools; curl --write-out 'Status Code: %{http_code} Redirects: %{num_redirects} Total time: %{time_total} Total Dsize: %{size_download}\n' --silent --location --output $HOME/.haskell-ci-tools/hlint-$HLINTVER.tar.gz "https://github.com/ndmitchell/hlint/releases/download/v$HLINTVER/hlint-$HLINTVER-x86_64-linux.tar.gz"; tar -xzv -f $HOME/.haskell-ci-tools/hlint-$HLINTVER.tar.gz -C $HOME/.haskell-ci-tools; fi ; fi
129+
if [ $((HCNUMVER >= 80800 && HCNUMVER < 81000)) -ne 0 ] ; then mkdir -p $CABAL_DIR/bin && ln -sf "$HOME/.haskell-ci-tools/hlint-$HLINTVER/hlint" $CABAL_DIR/bin/hlint ; fi
130+
if [ $((HCNUMVER >= 80800 && HCNUMVER < 81000)) -ne 0 ] ; then hlint --version ; fi
131+
- name: checkout
132+
uses: actions/checkout@v2
133+
with:
134+
path: source
135+
- name: initial cabal.project for sdist
136+
run: |
137+
touch cabal.project
138+
echo "packages: $GITHUB_WORKSPACE/source/." >> cabal.project
139+
echo "packages: $GITHUB_WORKSPACE/source/attoparsec-iso8601" >> cabal.project
140+
echo "packages: $GITHUB_WORKSPACE/source/examples" >> cabal.project
141+
cat cabal.project
142+
- name: sdist
143+
run: |
144+
mkdir -p sdist
145+
$CABAL sdist all --output-dir $GITHUB_WORKSPACE/sdist
146+
- name: unpack
147+
run: |
148+
mkdir -p unpacked
149+
find sdist -maxdepth 1 -type f -name '*.tar.gz' -exec tar -C $GITHUB_WORKSPACE/unpacked -xzvf {} \;
150+
- name: generate cabal.project
151+
run: |
152+
PKGDIR_aeson="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/aeson-[0-9.]*')"
153+
echo "PKGDIR_aeson=${PKGDIR_aeson}" >> $GITHUB_ENV
154+
PKGDIR_attoparsec_iso8601="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/attoparsec-iso8601-[0-9.]*')"
155+
echo "PKGDIR_attoparsec_iso8601=${PKGDIR_attoparsec_iso8601}" >> $GITHUB_ENV
156+
PKGDIR_aeson_examples="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/aeson-examples-[0-9.]*')"
157+
echo "PKGDIR_aeson_examples=${PKGDIR_aeson_examples}" >> $GITHUB_ENV
158+
touch cabal.project
159+
touch cabal.project.local
160+
echo "packages: ${PKGDIR_aeson}" >> cabal.project
161+
echo "packages: ${PKGDIR_attoparsec_iso8601}" >> cabal.project
162+
echo "packages: ${PKGDIR_aeson_examples}" >> cabal.project
163+
if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package aeson" >> cabal.project ; fi
164+
if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi
165+
if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package attoparsec-iso8601" >> cabal.project ; fi
166+
if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi
167+
if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package aeson-examples" >> cabal.project ; fi
168+
if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi
169+
cat >> cabal.project <<EOF
170+
EOF
171+
$HCPKG list --simple-output --names-only | perl -ne 'for (split /\s+/) { print "constraints: $_ installed\n" unless /^(aeson|aeson-examples|attoparsec-iso8601)$/; }' >> cabal.project.local
172+
cat cabal.project
173+
cat cabal.project.local
174+
- name: dump install plan
175+
run: |
176+
$CABAL v2-build $ARG_COMPILER $ARG_TESTS $ARG_BENCH --dry-run all
177+
cabal-plan
178+
- name: cache
179+
uses: actions/cache@v2
180+
with:
181+
key: ${{ runner.os }}-${{ matrix.ghc }}-${{ github.sha }}
182+
path: ~/.cabal/store
183+
restore-keys: ${{ runner.os }}-${{ matrix.ghc }}-
184+
- name: install dependencies
185+
run: |
186+
$CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks --dependencies-only -j2 all
187+
$CABAL v2-build $ARG_COMPILER $ARG_TESTS $ARG_BENCH --dependencies-only -j2 all
188+
- name: build w/o tests
189+
run: |
190+
$CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks all
191+
- name: build
192+
run: |
193+
$CABAL v2-build $ARG_COMPILER $ARG_TESTS $ARG_BENCH all --write-ghc-environment-files=always
194+
- name: tests
195+
run: |
196+
$CABAL v2-test $ARG_COMPILER $ARG_TESTS $ARG_BENCH all --test-show-details=direct
197+
- name: hlint
198+
run: |
199+
if [ $((HCNUMVER >= 80800 && HCNUMVER < 81000)) -ne 0 ] ; then (cd ${PKGDIR_aeson} && hlint -h ${GITHUB_WORKSPACE}/source/.hlint.yaml src attoparsec-iso8601/src src-pure src-ffi) ; fi
200+
if [ $((HCNUMVER >= 80800 && HCNUMVER < 81000)) -ne 0 ] ; then (cd ${PKGDIR_attoparsec_iso8601} && hlint -h ${GITHUB_WORKSPACE}/source/.hlint.yaml src) ; fi
201+
if [ $((HCNUMVER >= 80800 && HCNUMVER < 81000)) -ne 0 ] ; then (cd ${PKGDIR_aeson_examples} && hlint -h ${GITHUB_WORKSPACE}/source/.hlint.yaml src/) ; fi
202+
- name: haddock
203+
run: |
204+
if [ $((HCNUMVER >= 80600)) -ne 0 ] ; then $CABAL v2-haddock $ARG_COMPILER --with-haddock $HADDOCK $ARG_TESTS $ARG_BENCH all ; fi
205+
- name: unconstrained build
206+
run: |
207+
rm -f cabal.project.local
208+
$CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks all
209+
- name: prepare for constraint sets
210+
run: |
211+
rm -f cabal.project.local
212+
- name: constraint set cffi
213+
run: |
214+
$CABAL v2-build $ARG_COMPILER --enable-tests --disable-benchmarks --constraint='aeson +cffi' all
215+
$CABAL v2-test $ARG_COMPILER --enable-tests --disable-benchmarks --constraint='aeson +cffi' all

.github/workflows/z-bench.yml

Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,180 @@
1+
# This GitHub workflow config has been generated by a script via
2+
#
3+
# haskell-ci 'github' '-o' '.github/workflows/z-bench.yml' '--config=cabal.bench.haskell-ci' '--project' 'cabal.bench.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.20210214
12+
#
13+
# REGENDATA ("0.11.20210214",["github","-o",".github/workflows/z-bench.yml","--config=cabal.bench.haskell-ci","--project","cabal.bench.project"])
14+
#
15+
name: Z Bench CI
16+
on:
17+
push:
18+
branches:
19+
- master
20+
pull_request:
21+
branches:
22+
- master
23+
jobs:
24+
linux:
25+
name: Z Bench 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: 8.10.1
34+
allow-failure: false
35+
- ghc: 8.8.3
36+
allow-failure: false
37+
- ghc: 8.6.5
38+
allow-failure: false
39+
- ghc: 8.4.4
40+
allow-failure: false
41+
- ghc: 8.2.2
42+
allow-failure: false
43+
- ghc: 8.0.2
44+
allow-failure: false
45+
- ghc: 7.10.3
46+
allow-failure: false
47+
- ghc: 7.8.4
48+
allow-failure: false
49+
fail-fast: false
50+
steps:
51+
- name: apt
52+
run: |
53+
apt-get update
54+
apt-get install -y --no-install-recommends gnupg ca-certificates dirmngr curl git software-properties-common
55+
apt-add-repository -y 'ppa:hvr/ghc'
56+
apt-get update
57+
apt-get install -y ghc-$GHC_VERSION cabal-install-3.2
58+
env:
59+
GHC_VERSION: ${{ matrix.ghc }}
60+
- name: Set PATH and environment variables
61+
run: |
62+
echo "$HOME/.cabal/bin" >> $GITHUB_PATH
63+
echo "LANG=C.UTF-8" >> $GITHUB_ENV
64+
echo "CABAL_DIR=$HOME/.cabal" >> $GITHUB_ENV
65+
echo "CABAL_CONFIG=$HOME/.cabal/config" >> $GITHUB_ENV
66+
HC=/opt/ghc/$GHC_VERSION/bin/ghc
67+
echo "HC=$HC" >> $GITHUB_ENV
68+
echo "HCPKG=/opt/ghc/$GHC_VERSION/bin/ghc-pkg" >> $GITHUB_ENV
69+
echo "HADDOCK=/opt/ghc/$GHC_VERSION/bin/haddock" >> $GITHUB_ENV
70+
echo "CABAL=/opt/cabal/3.2/bin/cabal -vnormal+nowrap" >> $GITHUB_ENV
71+
HCNUMVER=$(${HC} --numeric-version|perl -ne '/^(\d+)\.(\d+)\.(\d+)(\.(\d+))?$/; print(10000 * $1 + 100 * $2 + ($3 == 0 ? $5 != 1 : $3))')
72+
echo "HCNUMVER=$HCNUMVER" >> $GITHUB_ENV
73+
echo "ARG_TESTS=--enable-tests" >> $GITHUB_ENV
74+
echo "ARG_BENCH=--enable-benchmarks" >> $GITHUB_ENV
75+
echo "HEADHACKAGE=false" >> $GITHUB_ENV
76+
echo "ARG_COMPILER=--ghc --with-compiler=/opt/ghc/$GHC_VERSION/bin/ghc" >> $GITHUB_ENV
77+
echo "GHCJSARITH=0" >> $GITHUB_ENV
78+
env:
79+
GHC_VERSION: ${{ matrix.ghc }}
80+
- name: env
81+
run: |
82+
env
83+
- name: write cabal config
84+
run: |
85+
mkdir -p $CABAL_DIR
86+
cat >> $CABAL_CONFIG <<EOF
87+
remote-build-reporting: anonymous
88+
write-ghc-environment-files: never
89+
remote-repo-cache: $CABAL_DIR/packages
90+
logs-dir: $CABAL_DIR/logs
91+
world-file: $CABAL_DIR/world
92+
extra-prog-path: $CABAL_DIR/bin
93+
symlink-bindir: $CABAL_DIR/bin
94+
installdir: $CABAL_DIR/bin
95+
build-summary: $CABAL_DIR/logs/build.log
96+
store-dir: $CABAL_DIR/store
97+
install-dirs user
98+
prefix: $CABAL_DIR
99+
repository hackage.haskell.org
100+
url: http://hackage.haskell.org/
101+
EOF
102+
cat $CABAL_CONFIG
103+
- name: versions
104+
run: |
105+
$HC --version || true
106+
$HC --print-project-git-commit-id || true
107+
$CABAL --version || true
108+
- name: update cabal index
109+
run: |
110+
$CABAL v2-update -v
111+
- name: install cabal-plan
112+
run: |
113+
mkdir -p $HOME/.cabal/bin
114+
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
115+
echo 'de73600b1836d3f55e32d80385acc055fd97f60eaa0ab68a755302685f5d81bc cabal-plan.xz' | sha256sum -c -
116+
xz -d < cabal-plan.xz > $HOME/.cabal/bin/cabal-plan
117+
rm -f cabal-plan.xz
118+
chmod a+x $HOME/.cabal/bin/cabal-plan
119+
cabal-plan --version
120+
- name: checkout
121+
uses: actions/checkout@v2
122+
with:
123+
path: source
124+
- name: initial cabal.project for sdist
125+
run: |
126+
touch cabal.project
127+
echo "packages: $GITHUB_WORKSPACE/source/benchmarks" >> cabal.project
128+
echo "packages: $GITHUB_WORKSPACE/source/criterion-compare-txt" >> cabal.project
129+
cat cabal.project
130+
- name: sdist
131+
run: |
132+
mkdir -p sdist
133+
$CABAL sdist all --output-dir $GITHUB_WORKSPACE/sdist
134+
- name: unpack
135+
run: |
136+
mkdir -p unpacked
137+
find sdist -maxdepth 1 -type f -name '*.tar.gz' -exec tar -C $GITHUB_WORKSPACE/unpacked -xzvf {} \;
138+
- name: generate cabal.project
139+
run: |
140+
PKGDIR_aeson_benchmarks="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/aeson-benchmarks-[0-9.]*')"
141+
echo "PKGDIR_aeson_benchmarks=${PKGDIR_aeson_benchmarks}" >> $GITHUB_ENV
142+
PKGDIR_criterion_compare_txt="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/criterion-compare-txt-[0-9.]*')"
143+
echo "PKGDIR_criterion_compare_txt=${PKGDIR_criterion_compare_txt}" >> $GITHUB_ENV
144+
touch cabal.project
145+
touch cabal.project.local
146+
echo "packages: ${PKGDIR_aeson_benchmarks}" >> cabal.project
147+
echo "packages: ${PKGDIR_criterion_compare_txt}" >> cabal.project
148+
if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package aeson-benchmarks" >> cabal.project ; fi
149+
if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi
150+
if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package criterion-compare-txt" >> cabal.project ; fi
151+
if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi
152+
cat >> cabal.project <<EOF
153+
EOF
154+
$HCPKG list --simple-output --names-only | perl -ne 'for (split /\s+/) { print "constraints: $_ installed\n" unless /^(aeson-benchmarks|criterion-compare-txt)$/; }' >> cabal.project.local
155+
cat cabal.project
156+
cat cabal.project.local
157+
- name: dump install plan
158+
run: |
159+
$CABAL v2-build $ARG_COMPILER $ARG_TESTS $ARG_BENCH --dry-run all
160+
cabal-plan
161+
- name: cache
162+
uses: actions/cache@v2
163+
with:
164+
key: ${{ runner.os }}-${{ matrix.ghc }}-${{ github.sha }}
165+
path: ~/.cabal/store
166+
restore-keys: ${{ runner.os }}-${{ matrix.ghc }}-
167+
- name: install dependencies
168+
run: |
169+
$CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks --dependencies-only -j2 all
170+
$CABAL v2-build $ARG_COMPILER $ARG_TESTS $ARG_BENCH --dependencies-only -j2 all
171+
- name: build w/o tests
172+
run: |
173+
$CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks all
174+
- name: build
175+
run: |
176+
$CABAL v2-build $ARG_COMPILER $ARG_TESTS $ARG_BENCH all --write-ghc-environment-files=always
177+
- name: unconstrained build
178+
run: |
179+
rm -f cabal.project.local
180+
$CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks all

0 commit comments

Comments
 (0)