Skip to content

Add pure Haskell implementation (#631) #1135

Add pure Haskell implementation (#631)

Add pure Haskell implementation (#631) #1135

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-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/[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'
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-pure-haskell
- name: Test
run: cabal test -fpure-haskell --ghc-options=-fno-ignore-asserts --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"