Skip to content

Commit

Permalink
Merge pull request #169 from haskell/release/v1.2.1.3
Browse files Browse the repository at this point in the history
Release/v1.2.1.3
  • Loading branch information
lehins authored Dec 14, 2024
2 parents ba5587f + f8a47da commit 51d2ebd
Show file tree
Hide file tree
Showing 9 changed files with 214 additions and 92 deletions.
213 changes: 163 additions & 50 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: random-CI

on:
push:
branches: [ "**" ]
branches: [ "master", "release/**" ]
pull_request:
branches: [ master ]
branches: [ "**" ]

defaults: { run: { shell: bash } }

Expand All @@ -22,49 +22,65 @@ jobs:
matrix:
include:
# Linux
- { cabal: "3.6", os: ubuntu-latest, ghc: "8.0.2" }
- { cabal: "3.6", os: ubuntu-latest, ghc: "8.2.2" }
- { cabal: "3.6", os: ubuntu-latest, ghc: "8.4.4" }
- { cabal: "3.6", os: ubuntu-latest, ghc: "8.6.5" }
- { cabal: "3.6", os: ubuntu-latest, ghc: "8.8.4" }
# - { cabal: "3.6", os: ubuntu-latest, ghc: "8.10.7" }
- { cabal: "3.6", os: ubuntu-latest, ghc: "9.0.2" }
- { cabal: "3.6", os: ubuntu-latest, ghc: "9.2.2" }
# haskell-actions/setup is having trouble installing from hvr/ppa for ghc-8.0 and 8.2
# - { os: ubuntu-latest, ghc: "8.0.2" }
# - { os: ubuntu-latest, ghc: "8.2.2" }
- { os: ubuntu-latest, ghc: "8.4.4" }
- { os: ubuntu-latest, ghc: "8.6.5" }
- { os: ubuntu-latest, ghc: "8.8.4" }
- { os: ubuntu-latest, ghc: "8.10.7" }
- { os: ubuntu-latest, ghc: "9.0.2" }
- { os: ubuntu-latest, ghc: "9.2.8" }
- { os: ubuntu-latest, ghc: "9.4.8" }
- { os: ubuntu-latest, ghc: "9.6.6" }
- { os: ubuntu-latest, ghc: "9.8.2" }
- { os: ubuntu-latest, ghc: "9.10.1" }
# MacOS
- { cabal: "3.6", os: macOS-latest, ghc: "8.0.2" }
- { cabal: "3.6", os: macOS-latest, ghc: "8.2.2" }
- { cabal: "3.6", os: macOS-latest, ghc: "8.4.4" }
- { cabal: "3.6", os: macOS-latest, ghc: "8.6.5" }
- { cabal: "3.6", os: macOS-latest, ghc: "8.8.4" }
# - { cabal: "3.6", os: macOS-latest, ghc: "8.10.7" }
- { cabal: "3.6", os: macOS-latest, ghc: "9.0.2" }
- { cabal: "3.6", os: macOS-latest, ghc: "9.2.2" }
# - { os: macOS-latest, ghc: "8.0.2" }
# - { os: macOS-latest, ghc: "8.2.2" }
- { os: macOS-latest, ghc: "8.4.4" }
- { os: macOS-latest, ghc: "8.6.5" }
- { os: macOS-latest, ghc: "8.8.4" }
- { os: macOS-latest, ghc: "8.10.7" }
- { os: macOS-latest, ghc: "9.0.2" }
- { os: macOS-latest, ghc: "9.2.8" }
- { os: macOS-latest, ghc: "9.4.8" }
- { os: macOS-latest, ghc: "9.6.6" }
- { os: macOS-latest, ghc: "9.8.2" }
- { os: macOS-latest, ghc: "9.10.1" }
# Windows
- { cabal: "3.6", os: windows-latest, ghc: "8.0.2" }
- { cabal: "3.6", os: windows-latest, ghc: "8.2.2" }
- { cabal: "3.6", os: windows-latest, ghc: "8.4.4" }
- { cabal: "3.6", os: windows-latest, ghc: "8.6.5" }
- { cabal: "3.6", os: windows-latest, ghc: "8.8.4" }
# - { cabal: "3.6", os: windows-latest, ghc: "8.10.7" }
- { cabal: "3.6", os: windows-latest, ghc: "9.0.2" }
- { cabal: "3.6", os: windows-latest, ghc: "9.2.2" }
# - { os: windows-latest, ghc: "8.0.2" }
# - { os: windows-latest, ghc: "8.2.2" }
- { os: windows-latest, ghc: "8.4.4" }
- { os: windows-latest, ghc: "8.6.5" }
- { os: windows-latest, ghc: "8.8.4" }
- { os: windows-latest, ghc: "8.10.7" }
- { os: windows-latest, ghc: "9.0.2" }
- { os: windows-latest, ghc: "9.2.8" }
- { os: windows-latest, ghc: "9.4.8" }
- { os: windows-latest, ghc: "9.6.6" }
- { os: windows-latest, ghc: "9.8.2" }
- { os: windows-latest, ghc: "9.10.1" }
steps:
- uses: actions/checkout@v4

- uses: haskell-actions/setup@v2
id: setup-haskell-cabal
name: Setup Haskell
with:
ghc-version: ${{ matrix.ghc }}
cabal-version: ${{ matrix.cabal }}

- name: Update cabal package database
run: cabal update

- uses: actions/cache@v4
name: Cache cabal stuff
with:
path: |
${{ steps.setup-haskell-cabal.outputs.cabal-store }}
dist-newstyle
key: ${{ runner.os }}-${{ matrix.ghc }}

- name: Build and test
run: |
cabal sdist -z -o .
Expand All @@ -73,18 +89,26 @@ jobs:
echo $EXTRA_FLAGS
cabal $EXTRA_FLAGS configure --haddock-all --enable-tests --enable-benchmarks --benchmark-option=-l
cabal $EXTRA_FLAGS build all --write-ghc-environment-files=always
# Disable doctests, since examples in documentation would need to be fixed in order to pass the new doctest setup
# - name: Doctest
# run: |
# cabal install doctest --ignore-project --overwrite-policy=always
# cabal repl --build-depends=unliftio --with-compiler=doctest --repl-options='-w -Wdefault'

build-stack:
name: CI-stack
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
resolver: [nightly, lts-21, lts-20, lts-19, lts-18, lts-16, lts-14, lts-12, lts-11]
resolver: [nightly, lts-22, lts-21, lts-20, lts-19, lts-18, lts-16, lts-14, lts-12, lts-11, lts-9]
include:
- resolver: lts-9
stack-yaml: stack-custom.yaml
- resolver: lts-11
ghc: '8.2.2'
stack-yaml: stack-old.yaml
stack-yaml: stack-custom.yaml
- resolver: lts-12
ghc: '8.4.4'
stack-yaml: stack-old.yaml
Expand All @@ -96,32 +120,55 @@ jobs:
stack-yaml: stack-old.yaml
- resolver: lts-18
ghc: '8.10.7'
stack-yaml: stack.yaml
stack-yaml: stack.lts-18.yaml
- resolver: lts-19
ghc: '9.0.2'
stack-yaml: stack-coveralls.yaml
- resolver: lts-20
ghc: '9.2.8'
stack-yaml: stack.yaml
- resolver: lts-21
ghc: '9.4.7'
ghc: '9.4.8'
stack-yaml: stack.yaml
- resolver: lts-22
ghc: '9.6.6'
stack-yaml: stack.yaml
- resolver: nightly
stack-yaml: stack.yaml
# Latest stable for MacOS: ghc-8.8.4
- resolver: lts-16
os: macos-latest
ghc: '8.8.4'
stack-yaml: stack-old.yaml
# Latest stable for Windows: ghc-8.6.4
# MacOS-latest
- resolver: lts-20
os: macos-13
ghc: '9.2.8'
stack-yaml: stack.yaml
- resolver: lts-21
os: macos-13
ghc: '9.4.8'
stack-yaml: stack.yaml
- resolver: lts-22
os: macos-13
ghc: '9.6.6'
stack-yaml: stack.yaml
# Windows-latest
- resolver: lts-14
os: windows-latest
ghc: '8.6.5'
stack-yaml: stack-old.yaml
- resolver: lts-20
os: windows-latest
ghc: '9.2.8'
stack-yaml: stack.yaml
- resolver: lts-21
os: windows-latest
ghc: '9.4.8'
stack-yaml: stack.yaml
- resolver: lts-22
os: windows-latest
ghc: '9.6.6'
stack-yaml: stack.yaml
env:
STACK_YAML: '${{ matrix.stack-yaml }}'
STACK_ARGS: '--resolver ${{ matrix.resolver }} --system-ghc'
cache-version: v4 # bump up this version to invalidate currently stored cache
STACK_ARGS: '--resolver ${{ matrix.resolver }}'
cache-version: v5 # bump up this version to invalidate currently stored cache
steps:
- uses: actions/checkout@v4

Expand All @@ -131,8 +178,7 @@ jobs:
with:
ghc-version: ${{ matrix.ghc }}
enable-stack: true
stack-version: 'latest'
cabal-version: '3.10'
stack-version: ${{ (matrix.resolver == 'lts-9' || matrix.resolver == 'lts-11') && '2.15.5' || 'latest' }}

- name: Cache
id: cache
Expand All @@ -144,14 +190,7 @@ jobs:
key: ${{ runner.os }}-${{ matrix.resolver }}-${{ env.cache-version }}
restore-keys: |
${{ runner.os }}-${{ matrix.resolver }}-${{ env.cache-version }}
# Executable files somehow become incompatible after restoring on MacOS from a
# previous build, so it needs to be cleaned up. This is very inconvenient and will
# need to be fixed.
- name: MacOS workaround for failure due to setup-exe-cache
if: steps.cache.outputs.cache-hit == 'true' && matrix.os == 'macos-latest'
run: |
rm -r ~/.stack/setup-exe-cache
rm -r .stack-work
- name: Windows Cache
id: cache-windows
uses: actions/cache@v4
Expand Down Expand Up @@ -194,3 +233,77 @@ jobs:
else
stack $STACK_ARGS test --bench --no-run-benchmarks --haddock --no-haddock-deps
fi
i386:
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 wget
wget https://get-ghcup.haskell.org -O ghcup.sh -t 10 --retry-connrefused
chmod a+x ghcup.sh
BOOTSTRAP_HASKELL_NONINTERACTIVE=1 BOOTSTRAP_HASKELL_INSTALL_NO_STACK=1 ./ghcup.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.
arm:
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 "cabal update && cabal test"

# Emulation on s390x platform 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.
s390x:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: uraimo/[email protected]
timeout-minutes: 60
with:
arch: s390x
distro: ubuntu_rolling
githubToken: ${{ github.token }}
install: |
apt-get update -y
apt-get install -y git ghc libghc-tasty-smallcheck-dev libghc-tasty-hunit-dev libghc-splitmix-dev curl
run: |
git clone https://github.com/Bodigrim/data-array-byte
cp -r data-array-byte/Data .
ghc --version
ghc --make -isrc:test-legacy -o legacy test-legacy/Legacy.hs
./legacy
ghc --make -isrc:test -o spec test/Spec.hs
./spec
16 changes: 12 additions & 4 deletions bench/Main.hs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE CPP #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Main (main) where
Expand All @@ -13,9 +14,11 @@ import Foreign.C.Types
import Numeric.Natural (Natural)
import System.Random.SplitMix as SM
import Test.Tasty.Bench
#if MIN_VERSION_primitive(0,7,1)
import Control.Monad.Primitive
import Data.Primitive.PrimArray
import Data.Primitive.Types
import Data.Primitive.PrimArray
#endif

import System.Random.Stateful

Expand Down Expand Up @@ -198,7 +201,9 @@ main = do
in pureUniformRBench (Proxy :: Proxy Natural) range sz
]
, bgroup "floating"
[ bgroup "IO"
[
#if MIN_VERSION_primitive(0,7,1)
bgroup "IO"
[ env ((,) <$> getStdGen <*> newAlignedPinnedPrimArray sz) $ \ ~(gen, ma) ->
bench "uniformFloat01M" $
nfIO (runStateGenT gen (fillMutablePrimArrayM uniformFloat01M ma))
Expand All @@ -212,7 +217,9 @@ main = do
bench "uniformDoublePositive01M" $
nfIO (runStateGenT gen (fillMutablePrimArrayM uniformDoublePositive01M ma))
]
, bgroup "State"
,
#endif
bgroup "State"
[ env getStdGen $
bench "uniformFloat01M" . nf (`runStateGen` (replicateM_ sz . uniformFloat01M))
, env getStdGen $
Expand Down Expand Up @@ -320,7 +327,7 @@ genMany f g0 n = go 0 $ f g0
| i < n = go (i + 1) $ f g
| otherwise = y


#if MIN_VERSION_primitive(0,7,1)
fillMutablePrimArrayM ::
(Prim a, PrimMonad m)
=> (gen -> m a)
Expand All @@ -334,3 +341,4 @@ fillMutablePrimArrayM f ma g = do
| otherwise = pure ()
go 0
unsafeFreezePrimArray ma
#endif
Loading

0 comments on commit 51d2ebd

Please sign in to comment.