Skip to content

Add MicroHs CI

Add MicroHs CI #335

Workflow file for this run

name: Haskell CI
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
tool-output:
runs-on: ubuntu-latest
outputs:
ghc_versions: ${{ steps.gen_output.outputs.ghc_versions }}
steps:
- uses: haskell/ghcup-setup@v1
- name: Generate output
id: gen_output
run: |
echo "d${GHC_TEST_NUM}d"
GHC_TEST_NUM=${GHC_TEST_NUM// /}
echo "d${GHC_TEST_NUM}d"
echo "d${GHC_TEST_NUM=:5}d"
all="$(ghcup -s GHCupURL list -r -t ghc -c available)"
rec=$(echo "${all}" | grep recommended | awk '{ print $2 }')
latest=$(echo "${all}" | grep latest | awk '{ print $2 }')
other_major=$(echo "${all}" | awk '{ print $2 }' | awk -F '.' '{ print $1 "." $2}' | sort -Vu | tail -${ghc_test_num=:5})
other=$(for v in $other_major ; do point_releases=$(echo "$all" | awk '{ print $2 }' | grep --color=never "^$v.") ; echo "${point_releases}" | tail -n1 ; done)
selected=$(echo -n ${rec} ${latest} ${other} | tr " " "\n" | sort -Vu)
selected_json=$(echo -n $selected | jq -c -r -R 'split(" ") | [ .[] | if length > 0 then . else empty end ]')
echo "${selected}"
echo "${selected_json}"
echo ghc_versions="${selected_json}" >> "$GITHUB_OUTPUT"
shell: bash
env:
GHC_TEST_NUM: ${{ vars.GHC_TEST_NUM }}
build:
runs-on: ${{ matrix.os }}
needs: ["tool-output"]
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, ubuntu-24.04-arm, macOS-15-intel, macOS-latest, windows-latest]
ghc: ${{ fromJSON(needs.tool-output.outputs.ghc_versions) }}
steps:
- uses: actions/checkout@v4
- name: Install dependencies (Ubuntu)
if: runner.os == 'Linux'
run: |
sudo apt-get -y update
sudo apt-get -y install build-essential curl libffi-dev libffi8 libgmp-dev libgmp10 libncurses-dev pkg-config libtinfo6 libncurses6
- uses: haskell/ghcup-setup@v1
with:
ghc: ${{ matrix.ghc }}
cabal: latest
- name: Build
run: |
set -eux
cabal update
cabal build --enable-tests --enable-benchmarks
cabal test --test-show-details=direct filepath-tests
cabal test --test-show-details=direct --test-options='--quickcheck-tests 50_000' filepath-equivalent-tests
cabal test --test-show-details=direct abstract-filepath
cabal haddock
cabal check
cabal sdist
shell: bash
- if: runner.os == 'Linux'
run: cabal bench
- if: runner.os == 'Linux'
name: make all
run: |
set -eux
export "PATH=$HOME/.cabal/bin:$PATH"
cabal install --overwrite-policy=always --install-method=copy cpphs
make all
git diff --exit-code
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 git
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: |
. ~/.ghcup/env
cabal update
cabal test
freebsd:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: [self-hosted, FreeBSD, X64]
ghc: 9.4.8
- os: [self-hosted, FreeBSD, X64]
ghc: 9.6.4
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install prerequisites
run: |
sudo pkg install -y curl gcc gmp gmake ncurses perl5 libffi libiconv git bash misc/compat10x misc/compat11x misc/compat12x gmake llvm14
- uses: haskell/ghcup-setup@v1
with:
ghc: ${{ matrix.ghc }}
cabal: latest
- name: Run build
run: |
cabal update
cabal test
cabal bench