11name : Integration tests
22
33on :
4- pull_request :
54 push :
6- branches :
7- - master
8- - stable
9- - rc/**
105 tags :
116 - ' **'
127 workflow_dispatch :
138
14- # Stack will use the value of the GH_TOKEN environment variable to authenticate
15- # its requests of the GitHub REST API, providing a higher request rate limit.
16- env :
17- GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
18-
199# As of 6 May 2024, ubuntu-latest and windows-latest come with Stack 2.15.5 and
2010# GHC 9.8.2. However, macos-13 and macos-latest do not come with Haskell tools.
2111# windows-latest comes with NSIS 3.08, for which the default value of the
@@ -160,79 +150,91 @@ jobs:
160150 name : ${{ runner.os }}-${{ runner.arch }}
161151 path : _release/stack-*
162152
163- configuration :
164- name : Check for self-hosted runners
165- runs-on : ubuntu-latest
166- env :
167- CAN_SIGN : ${{ secrets.RELEASE_SIGNING_KEY != '' }}
168- outputs :
169- arm64-runner : ${{ steps.runners.outputs.arm64 }}
170- can-sign : ${{ env.CAN_SIGN }}
171- test-arm64 : ${{ steps.runners.outputs.test-arm64 }}
172- steps :
173- - name : Check for hosted runners
174- id : runners
175- shell : bash
176- env :
177- SELF_HOSTED_RUNNERS : ${{ secrets.SELF_HOSTED_RUNNERS || (github.repository_owner == 'commercialhaskell' && 'arm64') }}
178- run : |
179- echo "runners=$SELF_HOSTED_RUNNERS" >> $GITHUB_OUTPUT
180- if echo "$SELF_HOSTED_RUNNERS" | grep -q 'arm64'; then
181- echo "arm64=['self-hosted', 'linux', 'ARM64']" >> $GITHUB_OUTPUT
182- echo "test-arm64=true" >> $GITHUB_OUTPUT
183- else
184- echo "arm64='ubuntu-latest'" >> $GITHUB_OUTPUT
185- echo "test-arm64=false" >> $GITHUB_OUTPUT
186- fi
187-
188153 linux-arm64 :
189154 name : Linux ARM64
190- runs-on : ${{ fromJSON(needs.configuration.outputs.arm64-runner) }}
191- needs : configuration
155+ runs-on : [self-hosted, Linux, ARM64, maerwald]
156+ strategy :
157+ fail-fast : false
158+ matrix :
159+ include :
160+ - container : hasufell/arm64v8-alpine-haskell:3.20
161+ release-args : " --build-args=--flag=stack:static"
162+ install-cmd : " apk update && apk add --no-cache nodejs"
163+ container :
164+ image : ${{ matrix.container }}
192165 steps :
193- - name : Skipping ARM64
194- if : needs.configuration.outputs.test-arm64 == 'false'
195- shell : bash
196- run : |
197- echo '::notice title=ARM64 skipped::To build ARM64, a self-hosted runner needs to be configured and the SELF_HOSTED_RUNNERS secret must contain arm64'
198- - name : Clone project
199- if : needs.configuration.outputs.test-arm64 == 'true'
200- uses : actions/checkout@v4
201- - name : Install deps
202- shell : bash
203- run : |
204- set -ex
166+ - name : Install node
167+ run : ${{ matrix.install-cmd }}
205168
206- # As of 9 December 2024, the self-hosted runner comes with Stack 3.1.1,
207- # but it is not on the PATH. Logging the version for information.
208- /usr/local/bin/stack --version
169+ - name : Checkout code
170+ uses : actions/checkout@v4
171+ with :
172+ submodules : ' true'
209173
210- set +ex
211- - name : Build bindist
212- if : needs.configuration.outputs.test-arm64 == 'true'
213- shell : bash
214- run : |
215- # Stack's project-level configuration (stack.yaml) specifies the
216- # multi-architecture (including Linux/Aarch64) Docker image published by
217- # Oliver Benz (@benz0li, on GitHub). That image comes with Stack 3.1.1.
218- # (Note that the online documentation for '--docker-stack-exe image'
219- # specifies that the host Stack and image Stack must have the same
220- # version number.)
221- /usr/local/bin/stack etc/scripts/release.hs build --alpine --stack-args --docker-stack-exe=image
174+ - uses : haskell/ghcup-setup@v1
222175
223- - name : Upload bindist
224- if : needs.configuration.outputs.test-arm64 == 'true'
225- uses : actions/upload-artifact@v4
226- with :
227- name : Linux-ARM64
228- path : _release/stack-*
176+ - name : Run build (aarch64 linux)
177+ run : |
178+ ghcup config set gpg-setting GPGNone
179+ export CABAL_DIR="$GITHUB_WORKSPACE/cabal"
180+ export STACK_ROOT="${GITHUB_WORKSPACE}"/.stack
181+ mkdir -p $STACK_ROOT/hooks/
182+ curl https://raw.githubusercontent.com/haskell/ghcup-hs/master/scripts/hooks/stack/ghc-install.sh > $STACK_ROOT/hooks/ghc-install.sh
183+ chmod +x $STACK_ROOT/hooks/ghc-install.sh
184+ ghcup install stack latest
185+ stack config set system-ghc false --global
186+ ghcup -s https://raw.githubusercontent.com/haskell/ghcup-metadata/develop/ghcup-vanilla-0.0.8.yaml run --install --stack=latest -- stack --allow-different-user etc/scripts/release.hs build --allow-dirty ${{ matrix.release-args }}
187+
188+ - name : Upload bindist
189+ uses : actions/upload-artifact@v4
190+ with :
191+ name : Linux-ARM64
192+ path : _release/stack-*
193+
194+ freebsd-x64 :
195+ name : FreeBSD X64
196+ runs-on : [self-hosted, FreeBSD, X64]
197+ steps :
198+ - name : Checkout code
199+ uses : actions/checkout@v4
200+ with :
201+ submodules : ' true'
202+
203+ - name : Install prerequisites
204+ run : |
205+ sudo sed -i.bak -e 's/quarterly/latest/' /etc/pkg/FreeBSD.conf
206+ sudo pkg install -y ghc gcc curl git bash misc/compat10x misc/compat11x misc/compat12x gmake libiconv devel/stack
207+ sudo tzsetup Etc/GMT
208+ sudo adjkerntz -a
209+
210+ - uses : haskell/ghcup-setup@v1
211+
212+ - name : Install stack ghcup hook
213+ run : |
214+ set -eux
215+ ghcup install stack --set latest
216+ export STACK_ROOT="${GITHUB_WORKSPACE}"/.stack
217+ mkdir -p $STACK_ROOT/hooks/
218+ curl https://raw.githubusercontent.com/haskell/ghcup-hs/master/scripts/hooks/stack/ghc-install.sh > $STACK_ROOT/hooks/ghc-install.sh
219+ chmod +x $STACK_ROOT/hooks/ghc-install.sh
220+ stack config set system-ghc false --global
221+
222+ - name : Run build
223+ run : |
224+ export STACK_ROOT="${GITHUB_WORKSPACE}"/.stack
225+ export CABAL_DIR="$GITHUB_WORKSPACE/cabal"
226+ stack etc/scripts/release.hs build --allow-dirty
227+ - name : Upload bindist
228+ uses : actions/upload-artifact@v4
229+ with :
230+ name : FreeBSD-X64
231+ path : _release/stack-*
229232
230233 github-release :
231234 name : Create GitHub release
232235 permissions :
233236 contents : write
234237 needs :
235- - configuration
236238 - integration-tests
237239 - linux-arm64
238240 runs-on : ubuntu-latest
@@ -259,27 +261,25 @@ jobs:
259261 name : Windows-X64
260262 path : _release
261263 - name : Download Linux/AArch64 artifact
262- if : needs.configuration.outputs.test-arm64 == 'true'
263264 uses : actions/download-artifact@v4
264265 with :
265266 name : Linux-ARM64
266267 path : _release
268+ - name : Download FreeBSD/X64 artifact
269+ uses : actions/download-artifact@v4
270+ with :
271+ name : FreeBSD-X64
272+ path : _release
267273 - name : Hash and sign assets
268- if : needs.configuration.outputs.can-sign == 'true'
269274 shell : bash
270- env :
271- RELEASE_SIGNING_KEY : ${{ secrets.RELEASE_SIGNING_KEY }}
272275 run : |
273276 set -e
274- echo "$RELEASE_SIGNING_KEY"|gpg --import
275277 cd _release
276278 for asset in *; do
277279 shasum -a 256 "$asset" >"$asset.sha256"
278- gpg --digest-algo=sha512 --detach-sig --armor -u 0x575159689BEFB442 "$asset"
279280 done
280281 - name : Create GitHub release (final)
281282 id : github_release_final
282- if : " !startsWith(github.ref, 'refs/tags/rc/')"
283283284284 env :
285285 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
@@ -296,19 +296,7 @@ jobs:
296296 [INSERT CONTRIBUTORS]
297297 draft : true
298298 prerelease : false
299- - name : Create GitHub release (release candidate)
300- id : github_release_rc
301- if : " startsWith(github.ref, 'refs/tags/rc/')"
302- 303- env :
304- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
305- with :
306- body : |
307- **Changes since v[INSERT PREVIOUS VERSION]:**
308299
309- [INSERT CHANGELOG]
310- draft : true
311- prerelease : true
312300 - name : Upload assets to GitHub release (final)
313301 if : " !startsWith(github.ref, 'refs/tags/rc/')"
314302 uses : xresloader/upload-to-github-release@v1
@@ -320,14 +308,3 @@ jobs:
320308 prerelease : false
321309 overwrite : true
322310 release_id : ${{ steps.github_release_final.outputs.id }}
323- - name : Upload assets to GitHub release (release candidate)
324- if : " startsWith(github.ref, 'refs/tags/rc/')"
325- uses : xresloader/upload-to-github-release@v1
326- env :
327- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
328- with :
329- file : " _release/*"
330- draft : true
331- prerelease : true
332- overwrite : true
333- release_id : ${{ steps.github_release_rc.outputs.id }}
0 commit comments