CI: fix NetBSD job + fix aarch64 job (#700) #1230
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: ci | |
on: | |
push: | |
branches: | |
- master | |
- bytestring-0.11 | |
- bytestring-0.12 | |
pull_request: {} # Validate all PRs | |
defaults: | |
run: | |
shell: bash | |
jobs: | |
build: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: true | |
matrix: | |
os: [ubuntu-latest] | |
ghc: ['8.4', '8.6', '8.8', '8.10', '9.0', '9.2', '9.4', '9.6', '9.8', '9.10'] | |
include: | |
- os: macOS-latest | |
ghc: 'latest' | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: haskell-actions/setup@v2 | |
id: setup-haskell-cabal | |
with: | |
ghc-version: ${{ matrix.ghc }} | |
- name: Update cabal package database | |
run: cabal update | |
- uses: actions/cache@v3 | |
name: Cache cabal stuff | |
with: | |
path: | | |
${{ steps.setup-haskell-cabal.outputs.cabal-store }} | |
dist-newstyle | |
key: ${{ runner.os }}-${{ matrix.ghc }} | |
- name: Test | |
run: | | |
cabal sdist -z -o . | |
cabal get bytestring-*.tar.gz | |
cd bytestring-*/ | |
cabal build bytestring:tests --enable-tests --enable-benchmarks | |
cabal test --enable-tests --enable-benchmarks --test-show-details=direct all | |
- name: Bench | |
run: | | |
cd bytestring-*/ | |
cabal bench --enable-tests --enable-benchmarks --benchmark-option=-l all | |
- name: Haddock | |
run: | | |
cd bytestring-*/ | |
cabal haddock all | |
- name: Cabal check | |
run: | | |
cd bytestring-*/ | |
cabal check | |
windows-build: | |
runs-on: windows-latest | |
needs: build | |
strategy: | |
fail-fast: true | |
matrix: | |
ghc: ['9.2', '9.4', '9.6', '9.8', '9.10'] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: haskell-actions/setup@v2 | |
id: setup-haskell-cabal | |
with: | |
ghc-version: ${{ matrix.ghc }} | |
- name: Update cabal package database | |
run: cabal update | |
- uses: actions/cache@v3 | |
name: Cache cabal stuff | |
with: | |
path: | | |
${{ steps.setup-haskell-cabal.outputs.cabal-store }} | |
dist-newstyle | |
key: ${{ runner.os }}-${{ matrix.ghc }} | |
# We rebuild tests several times to avoid intermittent failures on Windows | |
# https://github.com/haskell/actions/issues/36 | |
# We also use --enable-tests and --enable-benchmarks to avoid | |
# test and bench commands from reconfiguring and thus rebuilding. | |
- name: Build Test | |
run: | | |
cabal sdist -z -o . | |
cabal get bytestring-*.tar.gz | |
cd bytestring-*/ | |
bld() { cabal build bytestring:tests --enable-tests --enable-benchmarks; } | |
bld || bld || bld | |
- name: Run Test | |
# test broken linking on windows: https://github.com/haskell/bytestring/issues/497 | |
run: | | |
cd bytestring-*/ | |
$bin = cabal list-bin bytestring-tests | |
$env:PATH = '' | |
& "$bin" | |
shell: pwsh | |
- name: Bench | |
run: | | |
cd bytestring-*/ | |
cabal bench --enable-tests --enable-benchmarks --benchmark-option=-l all | |
- name: Haddock | |
run: | | |
cd bytestring-*/ | |
cabal haddock all | |
- name: Cabal check | |
run: | | |
cd bytestring-*/ | |
cabal check | |
# Emulation is incredibly slow and memory demanding. It seems that any | |
# executable with GHC RTS takes at least 7-8 Gb of RAM, so we can run | |
# `cabal` or `ghc` on their own, but cannot run them both at the same time, | |
# striking out `cabal test`. Instead we rely on system packages and invoke | |
# `ghc --make` manually, and even so `ghc -O` is prohibitively expensive. | |
emulated: | |
needs: build | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: true | |
matrix: | |
arch: ['s390x', 'ppc64le', 'riscv64'] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: uraimo/run-on-arch-action@v2.8.1 | |
timeout-minutes: 60 | |
with: | |
arch: ${{ matrix.arch }} | |
distro: ubuntu_rolling | |
githubToken: ${{ github.token }} | |
install: | | |
apt-get update -y | |
apt-get install -y ghc libghc-tasty-quickcheck-dev libghc-syb-dev | |
run: | | |
ghc --version | |
ghc --make -fPIC -XHaskell2010 -XBangPatterns -XDeriveDataTypeable -XDeriveGeneric -XDeriveLift -XFlexibleContexts -XFlexibleInstances -XLambdaCase -XMagicHash -XMultiWayIf -XNamedFieldPuns -XPatternSynonyms -XRankNTypes -XScopedTypeVariables -XStandaloneDeriving -XTupleSections -XTypeApplications -XTypeOperators -XUnboxedTuples -optP-Wall -optP-Werror=undef -DPURE_HASKELL=0 -Iinclude -itests:tests/builder -o Main cbits/*.c tests/Main.hs +RTS -s | |
./Main +RTS -s | |
bounds-checking: | |
needs: build | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: haskell-actions/setup@v2 | |
id: setup-haskell-cabal | |
with: | |
ghc-version: 'latest' | |
- name: Update cabal package database | |
run: cabal update | |
- uses: actions/cache@v3 | |
name: Cache cabal stuff | |
with: | |
path: | | |
${{ steps.setup-haskell-cabal.outputs.cabal-store }} | |
dist-newstyle | |
key: ${{ runner.os }}-latest | |
- name: Test | |
run: cabal test --ghc-options='-fcheck-prim-bounds -fno-ignore-asserts -DHS_BYTESTRING_ASSERTIONS' | |
pure-haskell: | |
needs: build | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: haskell-actions/setup@v2 | |
id: setup-haskell-cabal | |
with: | |
ghc-version: 'latest' | |
- name: Update cabal package database | |
run: cabal update | |
- uses: actions/cache@v3 | |
name: Cache cabal stuff | |
with: | |
path: | | |
${{ steps.setup-haskell-cabal.outputs.cabal-store }} | |
dist-newstyle | |
key: ${{ runner.os }}-latest-pure-haskell | |
- name: Test | |
run: cabal test -fpure-haskell --ghc-options=-fno-ignore-asserts --enable-tests --test-show-details=direct all | |
i386: | |
needs: build | |
runs-on: ubuntu-latest | |
container: | |
image: i386/ubuntu:bionic | |
steps: | |
- name: Install | |
run: | | |
apt-get update -y | |
apt-get install -y autoconf build-essential zlib1g-dev libgmp-dev curl libncurses5 libtinfo5 libncurses5-dev libtinfo-dev | |
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | BOOTSTRAP_HASKELL_NONINTERACTIVE=1 BOOTSTRAP_HASKELL_INSTALL_NO_STACK=1 sh | |
- uses: actions/checkout@v1 #This version must stay old enough to remain compatible with the container image | |
- name: Test | |
run: | | |
source ~/.ghcup/env | |
cabal update | |
cabal test | |
# We use github.com/haskell self-hosted runners for ARM testing. | |
# If they become unavailable in future, put ['armv7', 'aarch64'] | |
# back to emulation jobs above. | |
arm: | |
needs: build | |
runs-on: [self-hosted, Linux, ARM64] | |
strategy: | |
fail-fast: true | |
matrix: | |
arch: [arm32v7, arm64v8] | |
steps: | |
- uses: docker://hasufell/arm64v8-ubuntu-haskell:focal | |
name: Cleanup | |
with: | |
args: "find . -mindepth 1 -maxdepth 1 -exec rm -rf -- {} +" | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- if: matrix.arch == 'arm32v7' | |
uses: docker://hasufell/arm32v7-ubuntu-haskell:focal | |
name: Run build (arm32v7 linux) | |
with: | |
args: sh -c "cabal update && cabal test" | |
- if: matrix.arch == 'arm64v8' | |
uses: docker://hasufell/arm64v8-ubuntu-haskell:focal | |
name: Run build (arm64v8 linux) | |
with: | |
args: sh -c "ghcup install ghc 9.10.1 && cabal update && cabal test -w ~/.ghcup/bin/ghc-9.10.1" | |
wasi: | |
runs-on: ubuntu-latest | |
needs: build | |
env: | |
GHC_WASM_META_REV: a04cc1a2206d2030326e1d49be9c6a94ee4283a3 | |
strategy: | |
matrix: | |
ghc: ['9.10'] | |
fail-fast: false | |
steps: | |
- name: setup-ghc-wasm32-wasi | |
run: | | |
cd $(mktemp -d) | |
curl -L https://gitlab.haskell.org/ghc/ghc-wasm-meta/-/archive/$GHC_WASM_META_REV/ghc-wasm-meta.tar.gz | tar xz --strip-components=1 | |
./setup.sh | |
~/.ghc-wasm/add_to_github_path.sh | |
env: | |
FLAVOUR: ${{ matrix.ghc }} | |
- uses: actions/checkout@v4 | |
- uses: actions/cache@v3 | |
with: | |
path: | | |
~/.ghc-wasm/.cabal/store | |
key: wasi-${{ runner.os }}-${{ env.GHC_WASM_META_REV }}-flavour-${{ matrix.ghc }}-${{ github.sha }} | |
restore-keys: | | |
wasi-${{ runner.os }}-${{ env.GHC_WASM_META_REV }}-flavour-${{ matrix.ghc }}- | |
- name: Build | |
run: | | |
mv cabal.project.wasi cabal.project.local | |
wasm32-wasi-cabal build --enable-tests | |
wasm32-wasi-cabal list-bin test:bytestring-tests | |
- name: Test | |
run: | | |
wasmtime.sh $(wasm32-wasi-cabal list-bin test:bytestring-tests) |