Add pure Haskell implementation #1049
Workflow file for this run
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.0', '8.2', '8.4', '8.6', '8.8', '8.10', '9.0', '9.2', '9.4', '9.6', '9.8'] | |
include: | |
- os: macOS-latest | |
ghc: 'latest' | |
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'] | |
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/run-on-arch-action@v2.5.0 | |
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' | |
pure-haskell: | |
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 -fpure-haskell --enable-tests --test-show-details=direct all | |
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" |