Skip to content

CI: add WASM job

CI: add WASM job #1128

Workflow file for this run

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.0', '8.2', '8.4', '8.6', '8.8', '8.10', '9.0', '9.2', '9.4', '9.6', '9.8']
include:
- os: macOS-12 # this one is x86_64
ghc: 'latest'
- os: macOS-14 # this one is aarch64
ghc: '9.4'
- os: macOS-14
ghc: '9.6'
- os: macOS-14
ghc: '9.6'
- os: macOS-14
ghc: '9.8'
steps:
- uses: actions/checkout@v3
- name: Install libncurses5 and libtinfo
if: runner.os == 'Linux' && (matrix.ghc == '8.0' || matrix.ghc == '8.2')
run: |
sudo apt-get install libncurses5 libtinfo5
- 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']
steps:
- uses: actions/checkout@v3
- 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']
steps:
- uses: actions/checkout@v3
- uses: uraimo/[email protected]
timeout-minutes: 60
with:
arch: ${{ matrix.arch }}
distro: ubuntu_rolling
githubToken: ${{ github.token }}
install: |
apt-get update -y
apt-get install -y curl ghc libghc-tasty-quickcheck-dev libghc-syb-dev
run: |
curl -s https://hackage.haskell.org/package/data-array-byte-0.1/data-array-byte-0.1.tar.gz | tar xz
ghc --version
ghc --make -Iinclude -itests:tests/builder:data-array-byte-0.1 -o Main cbits/*.c tests/Main.hs +RTS -s
./Main +RTS -s
bounds-checking:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- 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'
old-gcc:
needs: build
runs-on: ubuntu-latest
container:
image: centos:7
steps:
- name: install deps
run: |
yum install -y gcc gmp gmp-devel make ncurses ncurses-compat-libs xz perl
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | BOOTSTRAP_HASKELL_NONINTERACTIVE=1 BOOTSTRAP_HASKELL_GHC_VERSION=9.2.8 sh
- uses: actions/checkout@v3
- name: test
run: |
source ~/.ghcup/env
cabal update
cabal run bytestring-tests
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
- 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@v3
- 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 "cabal update && cabal test"
wasi:
runs-on: ubuntu-latest
env:
GHC_WASM_META_REV: c0aa3bb7d88bb6ec809210e17658dd1ed64ba66c
strategy:
matrix:
ghc: ['9.6', '9.8']
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)