@@ -8,9 +8,9 @@
9# For more information, see https://github.com/haskell-CI/haskell-ci
9# For more information, see https://github.com/haskell-CI/haskell-ci
11−# version: 0.11.20210214
11+# version: 0.19.20241223
13−# REGENDATA ("0.11.20210214",["github","cabal.project"])
13+# REGENDATA ("0.19.20241223",["github","cabal.project"])
15name: Haskell-CI
15name: Haskell-CI
@@ -22,65 +22,111 @@ on:
25− name: Haskell-CI - Linux - GHC ${{ matrix.ghc }}
25+ name: Haskell-CI - Linux - ${{ matrix.compiler }}
26− runs-on: ubuntu-18.04
26+ runs-on: ubuntu-20.04
27 container:
29 container:
28− image: buildpack-deps:bionic
30+ image: buildpack-deps:jammy
29 continue-on-error: ${{ matrix.allow-failure }}
31 continue-on-error: ${{ matrix.allow-failure }}
33− - ghc: 8.10.3
35+ - compiler: ghc-9.12.1
37+ compilerVersion: 9.12.1
34 allow-failure: false
39 allow-failure: false
35− - ghc: 8.8.4
40+ - compiler: ghc-9.10.1
42+ compilerVersion: 9.10.1
36 allow-failure: false
44 allow-failure: false
37− - ghc: 8.6.4
45+ - compiler: ghc-9.8.4
47+ compilerVersion: 9.8.4
38 allow-failure: false
49 allow-failure: false
39− - ghc: 8.4.4
50+ - compiler: ghc-9.6.6
52+ compilerVersion: 9.6.6
40 allow-failure: false
54 allow-failure: false
41− - ghc: 8.2.2
55+ - compiler: ghc-9.4.8
57+ compilerVersion: 9.4.8
42 allow-failure: false
59 allow-failure: false
43− - ghc: 8.0.2
60+ - compiler: ghc-9.2.8
62+ compilerVersion: 9.2.8
44 allow-failure: false
64 allow-failure: false
45− - ghc: 7.10.3
65+ - compiler: ghc-9.0.2
67+ compilerVersion: 9.0.2
46 allow-failure: false
69 allow-failure: false
47− - ghc: 7.8.4
70+ - compiler: ghc-8.10.7
72+ compilerVersion: 8.10.7
48 allow-failure: false
74 allow-failure: false
49− - ghc: 7.6.3
75+ - compiler: ghc-8.8.4
77+ compilerVersion: 8.8.4
50 allow-failure: false
79 allow-failure: false
51− - ghc: 7.4.2
80+ - compiler: ghc-8.6.5
82+ compilerVersion: 8.6.5
52 allow-failure: false
84 allow-failure: false
53 fail-fast: false
85 fail-fast: false
55− - name: apt
87+ - name: apt-get install
57 apt-get update
89 apt-get update
58− apt-get install -y --no-install-recommends gnupg ca-certificates dirmngr curl git software-properties-common
90+ apt-get install -y --no-install-recommends gnupg ca-certificates dirmngr curl git software-properties-common libtinfo5
59− apt-add-repository -y 'ppa:hvr/ghc'
91+ - name: Install GHCup
60− apt-get update
92+ run: |
61− apt-get install -y ghc-$GHC_VERSION cabal-install-3.2
93+ mkdir -p "$HOME/.ghcup/bin"
94+ curl -sL https://downloads.haskell.org/ghcup/0.1.30.0/x86_64-linux-ghcup-0.1.30.0 > "$HOME/.ghcup/bin/ghcup"
95+ chmod a+x "$HOME/.ghcup/bin/ghcup"
96+ - name: Install cabal-install
98+ "$HOME/.ghcup/bin/ghcup" install cabal 3.14.1.0 || (cat "$HOME"/.ghcup/logs/*.* && false)
99+ echo "CABAL=$HOME/.ghcup/bin/cabal-3.14.1.0 -vnormal+nowrap" >> "$GITHUB_ENV"
100+ - name: Install GHC (GHCup)
101+ if: matrix.setup-method == 'ghcup'
103+ "$HOME/.ghcup/bin/ghcup" install ghc "$HCVER" || (cat "$HOME"/.ghcup/logs/*.* && false)
104+ HC=$("$HOME/.ghcup/bin/ghcup" whereis ghc "$HCVER")
105+ HCPKG=$(echo "$HC" | sed 's#ghc$#ghc-pkg#')
106+ HADDOCK=$(echo "$HC" | sed 's#ghc$#haddock#')
107+ echo "HC=$HC" >> "$GITHUB_ENV"
108+ echo "HCPKG=$HCPKG" >> "$GITHUB_ENV"
109+ echo "HADDOCK=$HADDOCK" >> "$GITHUB_ENV"
63− GHC_VERSION: ${{ matrix.ghc }}
111+ HCKIND: ${{ matrix.compilerKind }}
112+ HCNAME: ${{ matrix.compiler }}
113+ HCVER: ${{ matrix.compilerVersion }}
64 - name: Set PATH and environment variables
114 - name: Set PATH and environment variables
66 echo "$HOME/.cabal/bin" >> $GITHUB_PATH
116 echo "$HOME/.cabal/bin" >> $GITHUB_PATH
67− echo "LANG=C.UTF-8" >> $GITHUB_ENV
117+ echo "LANG=C.UTF-8" >> "$GITHUB_ENV"
68− echo "CABAL_DIR=$HOME/.cabal" >> $GITHUB_ENV
118+ echo "CABAL_DIR=$HOME/.cabal" >> "$GITHUB_ENV"
69− echo "CABAL_CONFIG=$HOME/.cabal/config" >> $GITHUB_ENV
119+ echo "CABAL_CONFIG=$HOME/.cabal/config" >> "$GITHUB_ENV"
70− HC=/opt/ghc/$GHC_VERSION/bin/ghc
71− echo "HC=$HC" >> $GITHUB_ENV
72− echo "HCPKG=/opt/ghc/$GHC_VERSION/bin/ghc-pkg" >> $GITHUB_ENV
73− echo "HADDOCK=/opt/ghc/$GHC_VERSION/bin/haddock" >> $GITHUB_ENV
74− echo "CABAL=/opt/cabal/3.2/bin/cabal -vnormal+nowrap" >> $GITHUB_ENV
75 HCNUMVER=$(${HC} --numeric-version|perl -ne '/^(\d+)\.(\d+)\.(\d+)(\.(\d+))?$/; print(10000 * $1 + 100 * $2 + ($3 == 0 ? $5 != 1 : $3))')
120 HCNUMVER=$(${HC} --numeric-version|perl -ne '/^(\d+)\.(\d+)\.(\d+)(\.(\d+))?$/; print(10000 * $1 + 100 * $2 + ($3 == 0 ? $5 != 1 : $3))')
76− echo "HCNUMVER=$HCNUMVER" >> $GITHUB_ENV
121+ echo "HCNUMVER=$HCNUMVER" >> "$GITHUB_ENV"
77− echo "ARG_TESTS=--enable-tests" >> $GITHUB_ENV
122+ echo "ARG_TESTS=--enable-tests" >> "$GITHUB_ENV"
78− echo "ARG_BENCH=--enable-benchmarks" >> $GITHUB_ENV
123+ echo "ARG_BENCH=--enable-benchmarks" >> "$GITHUB_ENV"
79− echo "HEADHACKAGE=false" >> $GITHUB_ENV
124+ echo "HEADHACKAGE=false" >> "$GITHUB_ENV"
80− echo "ARG_COMPILER=--ghc --with-compiler=/opt/ghc/$GHC_VERSION/bin/ghc" >> $GITHUB_ENV
125+ echo "ARG_COMPILER=--$HCKIND --with-compiler=$HC" >> "$GITHUB_ENV"
81− echo "GHCJSARITH=0" >> $GITHUB_ENV
83− GHC_VERSION: ${{ matrix.ghc }}
127+ HCKIND: ${{ matrix.compilerKind }}
128+ HCNAME: ${{ matrix.compiler }}
129+ HCVER: ${{ matrix.compilerVersion }}
84 - name: env
130 - name: env
@@ -103,6 +149,10 @@ jobs:
103 repository hackage.haskell.org
149 repository hackage.haskell.org
104 url: http://hackage.haskell.org/
150 url: http://hackage.haskell.org/
152+ cat >> $CABAL_CONFIG <<EOF
153+ program-default-options
154+ ghc-options: $GHCJOBS +RTS -M3G -RTS
106 cat $CABAL_CONFIG
156 cat $CABAL_CONFIG
107 - name: versions
157 - name: versions
@@ -115,14 +165,14 @@ jobs:
115 - name: install cabal-plan
165 - name: install cabal-plan
117 mkdir -p $HOME/.cabal/bin
167 mkdir -p $HOME/.cabal/bin
118− 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
168+ curl -sL https://github.com/haskell-hvr/cabal-plan/releases/download/v0.7.3.0/cabal-plan-0.7.3.0-x86_64-linux.xz > cabal-plan.xz
119− echo 'de73600b1836d3f55e32d80385acc055fd97f60eaa0ab68a755302685f5d81bc cabal-plan.xz' | sha256sum -c -
169+ echo 'f62ccb2971567a5f638f2005ad3173dba14693a45154c1508645c52289714cb2 cabal-plan.xz' | sha256sum -c -
120 xz -d < cabal-plan.xz > $HOME/.cabal/bin/cabal-plan
170 xz -d < cabal-plan.xz > $HOME/.cabal/bin/cabal-plan
121 rm -f cabal-plan.xz
171 rm -f cabal-plan.xz
122 chmod a+x $HOME/.cabal/bin/cabal-plan
172 chmod a+x $HOME/.cabal/bin/cabal-plan
123 cabal-plan --version
173 cabal-plan --version
124 - name: checkout
174 - name: checkout
125− uses: actions/checkout@v2
175+ uses: actions/checkout@v4
127 path: source
177 path: source
128 - name: initial cabal.project for sdist
178 - name: initial cabal.project for sdist
@@ -142,32 +192,33 @@ jobs:
142 - name: generate cabal.project
192 - name: generate cabal.project
144 PKGDIR_uuid_types="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/uuid-types-[0-9.]*')"
194 PKGDIR_uuid_types="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/uuid-types-[0-9.]*')"
145− echo "PKGDIR_uuid_types=${PKGDIR_uuid_types}" >> $GITHUB_ENV
195+ echo "PKGDIR_uuid_types=${PKGDIR_uuid_types}" >> "$GITHUB_ENV"
146 PKGDIR_uuid="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/uuid-[0-9.]*')"
196 PKGDIR_uuid="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/uuid-[0-9.]*')"
147− echo "PKGDIR_uuid=${PKGDIR_uuid}" >> $GITHUB_ENV
197+ echo "PKGDIR_uuid=${PKGDIR_uuid}" >> "$GITHUB_ENV"
198+ rm -f cabal.project cabal.project.local
148 touch cabal.project
199 touch cabal.project
149 touch cabal.project.local
200 touch cabal.project.local
150 echo "packages: ${PKGDIR_uuid_types}" >> cabal.project
201 echo "packages: ${PKGDIR_uuid_types}" >> cabal.project
151 echo "packages: ${PKGDIR_uuid}" >> cabal.project
202 echo "packages: ${PKGDIR_uuid}" >> cabal.project
152− if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package uuid-types" >> cabal.project ; fi
203+ echo "package uuid-types" >> cabal.project
153− if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi
204+ echo " ghc-options: -Werror=missing-methods" >> cabal.project
154− if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package uuid" >> cabal.project ; fi
205+ echo "package uuid" >> cabal.project
155− if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi
206+ echo " ghc-options: -Werror=missing-methods" >> cabal.project
156 cat >> cabal.project <<EOF
207 cat >> cabal.project <<EOF
158− $HCPKG list --simple-output --names-only | perl -ne 'for (split /\s+/) { print "constraints: $_ installed\n" unless /^(uuid|uuid-types)$/; }' >> cabal.project.local
209+ $HCPKG list --simple-output --names-only | perl -ne 'for (split /\s+/) { print "constraints: any.$_ installed\n" unless /^(uuid|uuid-types)$/; }' >> cabal.project.local
159 cat cabal.project
210 cat cabal.project
160 cat cabal.project.local
211 cat cabal.project.local
161 - name: dump install plan
212 - name: dump install plan
163 $CABAL v2-build $ARG_COMPILER $ARG_TESTS $ARG_BENCH --dry-run all
214 $CABAL v2-build $ARG_COMPILER $ARG_TESTS $ARG_BENCH --dry-run all
164 cabal-plan
215 cabal-plan
165− - name: cache
216+ - name: restore cache
166− uses: actions/cache@v2
217+ uses: actions/cache/restore@v4
168− key: ${{ runner.os }}-${{ matrix.ghc }}-${{ github.sha }}
219+ key: ${{ runner.os }}-${{ matrix.compiler }}-${{ github.sha }}
169 path: ~/.cabal/store
220 path: ~/.cabal/store
170− restore-keys: ${{ runner.os }}-${{ matrix.ghc }}-
221+ restore-keys: ${{ runner.os }}-${{ matrix.compiler }}-
171 - name: install dependencies
222 - name: install dependencies
173 $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks --dependencies-only -j2 all
224 $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks --dependencies-only -j2 all
@@ -189,8 +240,23 @@ jobs:
189 ${CABAL} -vnormal check
240 ${CABAL} -vnormal check
190 - name: haddock
241 - name: haddock
192− $CABAL v2-haddock $ARG_COMPILER --with-haddock $HADDOCK $ARG_TESTS $ARG_BENCH all
243+ $CABAL v2-haddock --disable-documentation --haddock-all $ARG_COMPILER --with-haddock $HADDOCK $ARG_TESTS $ARG_BENCH all
193 - name: unconstrained build
244 - name: unconstrained build
195 rm -f cabal.project.local
246 rm -f cabal.project.local
196 $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks all
247 $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks all
248+ - name: prepare for constraint sets
250+ rm -f cabal.project.local
251+ - name: constraint set random-1.2
253+ $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks --constraint='random==1.2.*' all --dry-run
254+ cabal-plan topo | sort
255+ $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks --constraint='random==1.2.*' --dependencies-only -j2 all
256+ $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks --constraint='random==1.2.*' all
259+ uses: actions/cache/save@v4
261+ key: ${{ runner.os }}-${{ matrix.compiler }}-${{ github.sha }}
262+ path: ~/.cabal/store