on 45e2189 help sign in
239 lines 9.2 kB history raw
1name: Haskell CI
3on:
4 push:
5 branches:
6 - master
7 pull_request:
9jobs:
10 build:
11 name: GHC ${{matrix.name}}
12 env:
13 # packcheck environment variables
14 LC_ALL: C.UTF-8
15 BUILD: ${{ matrix.build }}
16 GHCVER: ${{ matrix.ghc_version }}
17 CABALVER: ${{ matrix.cabal_version }}
18 DISABLE_DOCS: ${{ matrix.disable_docs }}
19 DISABLE_TEST: ${{ matrix.disable_test }}
20 DISABLE_BENCH: ${{ matrix.disable_bench }}
21 DISABLE_DIST_CHECKS: ${{ matrix.disable_dist_checks }}
22 SDIST_OPTIONS: ${{ matrix.sdist_options }}
23 DISABLE_SDIST_BUILD: ${{ matrix.disable_sdist_build }}
25 # Cabal options
26 CABAL_REINIT_CONFIG: y
27 # Github has machines with 2 CPUS and 6GB memory so the cabal jobs
28 # default (ncpus) is good, this can be checked from the packcheck
29 # output in case it changes.
30 CABAL_BUILD_OPTIONS: ${{ matrix.cabal_build_options }} --flag limit-build-mem
31 CABAL_BUILD_TARGETS: ${{ matrix.cabal_build_targets }}
32 CABAL_PROJECT: ${{ matrix.cabal_project }}
33 CABAL_CHECK_RELAX: y
35 # Stack options
36 STACK_UPGRADE: "y"
37 RESOLVER: ${{ matrix.resolver }}
38 STACK_YAML: ${{ matrix.stack_yaml }}
39 STACK_BUILD_OPTIONS: ${{ matrix.stack_build_options }}
41 # packcheck location and revision
42 PACKCHECK_LOCAL_PATH: "./packcheck.sh"
43 PACKCHECK_GITHUB_URL: "https://raw.githubusercontent.com/composewell/packcheck"
44 PACKCHECK_GITHUB_COMMIT: "a302772c8f3791c477edd1764b82f8d1f5b22fdf"
46 # Pull token from "secrets" setting of the github repo
47 COVERALLS_TOKEN: ${{ secrets.COVERALLS_TOKEN }}
48 COVERAGE: ${{ matrix.coverage }}
49 DOCTEST: ${{ matrix.doctest }}
51 runs-on: ${{ matrix.runner }}
52 continue-on-error: ${{ matrix.ignore_error }}
53 strategy:
54 fail-fast: true
55 matrix:
56 # The order is important to optimize fail-fast.
57 name:
58 - 8.10.7-Werror
59 - 9.2.4-docspec
60 # - 8.10.7-coverage
62 # Note: if cabal.project is not specified benchmarks and tests won't
63 # run. But we need at least one test where we test without
64 # cabal.project because that is how hackage would build it.
65 include:
66 - name: head
67 ghc_version: head
68 runner: ubuntu-latest
69 build: cabal
70 cabal_version: 3.8.1.0
71 cabal_project: cabal.project.ghc-head
72 disable_sdist_build: "y"
73 ignore_error: true
74 - name: 9.4.2-fusion-inspection
75 ghc_version: 9.4.2
76 runner: ubuntu-latest
77 build: cabal
78 cabal_version: 3.8.1.0
79 disable_sdist_build: "y"
80 cabal_project: cabal.project
81 cabal_build_options: "--flag fusion-plugin --flag inspection"
82 ignore_error: false
83 - name: 9.2.4
84 ghc_version: 9.2.4
85 runner: ubuntu-latest
86 build: cabal
87 cabal_project: cabal.project
88 cabal_version: 3.6.2.0
89 disable_sdist_build: "y"
90 ignore_error: false
91 - name: 9.2.4-docspec
92 ghc_version: 9.2.4
93 runner: ubuntu-latest
94 doctest: "y"
95 cabal_version: 3.6.2.0
96 cabal_project: cabal.project
97 disable_sdist_build: "y"
98 ignore_error: false
99 - name: 9.0.2-streamly-sdist
100 ghc_version: 9.0.2
101 runner: ubuntu-latest
102 build: cabal
103 cabal_version: 3.6.2.0
104 cabal_project: cabal.project.streamly
105 ignore_error: true
106 - name: 8.10.7-streamly-sdist-stack
107 runner: ubuntu-latest
108 build: stack
109 resolver: lts-18.23
110 stack_yaml: stack.yaml
111 sdist_options: "--ignore-check"
112 stack_build_options: "--flag streamly-benchmarks:-opt"
113 cabal_version: 3.6.2.0
114 ignore_error: false
115 - name: 8.10.7-macos
116 ghc_version: 8.10.7
117 runner: macos-latest
118 build: cabal
119 cabal_version: 3.6.2.0
120 cabal_project: cabal.project
121 disable_sdist_build: "y"
122 ignore_error: false
123 # - name: 8.10.7-coverage
124 # ghc_version: 8.10.7
125 # runner: ubuntu-latest
126 # coverage: "y"
127 # cabal_version: 3.6.2.0
128 # ignore_error: false
129 - name: 8.10.7-Werror
130 ghc_version: 8.10.7
131 runner: ubuntu-latest
132 build: cabal
133 cabal_version: 3.6.2.0
134 cabal_project: cabal.project.Werror
135 disable_sdist_build: "y"
136 ignore_error: false
137 - name: 8.8.4
138 ghc_version: 8.8.4
139 runner: ubuntu-latest
140 build: cabal
141 cabal_version: 3.6.2.0
142 cabal_project: cabal.project
143 disable_sdist_build: "y"
144 ignore_error: false
145 - name: 8.6.5-no-fusion-unoptimized
146 ghc_version: 8.6.5
147 runner: ubuntu-latest
148 build: cabal
149 cabal_version: 3.6.2.0
150 cabal_project: cabal.project
151 cabal_build_options: "--flag no-fusion --flag -opt"
152 disable_sdist_build: "y"
153 ignore_error: false
154 - name: 8.6.5-debug-unoptimized
155 ghc_version: 8.6.5
156 runner: ubuntu-latest
157 build: cabal
158 cabal_version: 3.6.2.0
159 cabal_project: cabal.project
160 cabal_build_options: "--flag debug --flag -opt"
161 disable_sdist_build: "y"
162 ignore_error: false
164 steps:
165 - uses: actions/checkout@v2
167 - uses: actions/cache@v1
168 name: Cache ~/.cabal
169 with:
170 path: ~/.cabal
171 # Bump the key version to clear the cache
172 key: ${{ runner.os }}-${{ matrix.ghc_version }}-cabal-v2
174 - name: Download packcheck
175 run: |
176 # Get packcheck if needed
177 CURL=$(which curl)
178 PACKCHECK_URL=${PACKCHECK_GITHUB_URL}/${PACKCHECK_GITHUB_COMMIT}/packcheck.sh
179 if test ! -e "$PACKCHECK_LOCAL_PATH"; then $CURL -sL -o "$PACKCHECK_LOCAL_PATH" $PACKCHECK_URL; fi;
180 chmod +x $PACKCHECK_LOCAL_PATH
182 os=$(uname -s -m)
183 case "$os" in
184 "Linux x86_64") GHCUP_ARCH="x86_64-linux" ;;
185 "Darwin x86_64") GHCUP_ARCH="x86_64-apple-darwin" ;;
186 *) echo "Unknown OS/Arch: $os"; exit 1;;
187 esac
189 # Check available versions here: https://downloads.haskell.org/~ghcup/
190 GHCUP_VER=0.1.18.0
191 $CURL -sL -o ./ghcup https://downloads.haskell.org/~ghcup/$GHCUP_VER/${GHCUP_ARCH}-ghcup-$GHCUP_VER
192 chmod +x ./ghcup
193 if test "$GHCVER" = "head"
194 then
195 # The URL may change, to find a working URL go to https://gitlab.haskell.org/ghc/ghc/-/jobs/
196 # Find a debian10 job, click on a passed/failed job, at the
197 # end of the output you will find the tar.xz name, put that after
198 # "raw/", and put the job name after "job=".
199 # Also see https://github.com/mpickering/ghc-artefact-nix/blob/master/gitlab-artifact.nix
200 ./ghcup install ghc -u https://gitlab.haskell.org/ghc/ghc/-/jobs/artifacts/master/raw/ghc-x86_64-linux-deb10-int_native-validate.tar.xz?job=x86_64-linux-deb10-int_native-validate head
201 else
202 ./ghcup install ghc $GHCVER
203 fi
204 ./ghcup install cabal $CABALVER
205 ./ghcup set ghc $GHCVER
206 ./ghcup set cabal $CABALVER
208 - name: Run tests
209 run: |
210 if test -n "$DOCTEST"
211 then
212 mkdir -p $HOME/.cabal/bin
213 curl -sL https://github.com/phadej/cabal-extras/releases/download/cabal-docspec-0.0.0.20210111/cabal-docspec-0.0.0.20210111.xz > cabal-docspec.xz
214 echo '0829bd034fba901cbcfe491d98ed8b28fd54f9cb5c91fa8e1ac62dc4413c9562 cabal-docspec.xz' | sha256sum -c -
215 xz -d < cabal-docspec.xz > $HOME/.cabal/bin/cabal-docspec
216 rm -f cabal-docspec.xz
217 chmod a+x $HOME/.cabal/bin/cabal-docspec
218 cabal update
219 cabal build --project-file cabal.project.doctest all
220 $HOME/.cabal/bin/cabal-docspec --version
221 $HOME/.cabal/bin/cabal-docspec --timeout 60 --check-properties --property-variables xs
222 elif test -n "$COVERAGE"
223 then
224 # Run tests with coverage
225 cabal update
226 # Build hpc-coveralls if needed
227 sudo apt-get install -y libcurl4-gnutls-dev
228 export PATH=$HOME/.cabal/bin:$PATH
229 which hpc-coveralls 2>/dev/null || cabal install --project-file cabal.project.hpc-coveralls hpc-coveralls
230 # Run tests and upload results to coveralls.io
231 bin/test.sh --coverage --raw
232 # XXX Uncomment this and fix it properly later
233 # hpc-coveralls --repo-token="$COVERALLS_TOKEN" --coverage-mode=StrictlyFullLines
234 else
235 export TOOLS_DIR=/opt
236 # /usr/local/opt/curl/bin for macOS
237 export PATH=$HOME/.local/bin:$HOME/.ghcup/bin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/opt/curl/bin
238 bash -c "$PACKCHECK_LOCAL_PATH $BUILD"
239 fi