Add support for GHC 9.10 #270
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: doctest-parallel-ci | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
concurrency: | |
group: ${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
jobs: | |
# Stack | |
stack: | |
name: ${{ matrix.os }} / Stack / ${{ matrix.resolver }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: ["macOS-latest", "windows-latest", "ubuntu-22.04"] | |
resolver: ["lts-20.17"] | |
fail-fast: false | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Setup Haskell | |
uses: haskell/actions/setup@v2 | |
id: setup-haskell | |
with: | |
enable-stack: true | |
- name: Cache dependencies | |
uses: actions/cache@v3 | |
with: | |
path: ${{ steps.setup-haskell.outputs.stack-root }}/snapshots | |
key: ${{ runner.os }}-ghc-${{ matrix.resolver }}-${{ hashFiles('doctest-parallel.cabal') }} | |
restore-keys: | | |
${{ runner.os }}-stack-${{ matrix.resolver }}-${{ hashFiles('doctest-parallel.cabal') }} | |
${{ runner.os }}-stack-${{ matrix.resolver }}- | |
- name: Build | |
run : | | |
stack build --resolver ${{ matrix.resolver }} | |
- name: Test - doctests | |
run : | | |
stack test doctest-parallel:doctests --resolver ${{ matrix.resolver }} | |
- name: Test - spectests | |
run : | | |
stack test doctest-parallel:spectests --resolver ${{ matrix.resolver }} | |
- name: Test - example project | |
run: | | |
cd example | |
stack test --resolver ${{ matrix.resolver }} | |
# Cabal | |
cabal: | |
name: ${{ matrix.os }} / Cabal / GHC ${{ matrix.ghc }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: ["macOS-latest", "windows-latest", "ubuntu-22.04"] | |
ghc: ["9.8.1", "9.6.3", "9.4.7", "9.2.8", "9.0.2", "8.10.7", "8.8.4", "8.6.5", "8.4.4"] | |
exclude: | |
# Windows gets stuck while running the testsuite, but this is not a | |
# doctest-parallel failure | |
- os: windows-latest | |
ghc: 8.8.4 | |
# Uncomment if testing with an unreleased GHC. Make sure to edit the | |
# "Setup Haskell (head)" step too. | |
include: | |
- os: ubuntu-22.04 | |
ghc: head | |
fail-fast: false | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Setup Haskell | |
if: matrix.ghc != 'head' | |
uses: haskell/actions/setup@v2 | |
id: setup-haskell | |
with: | |
ghc-version: ${{ matrix.ghc }} | |
- name: Setup Haskell (head) | |
if: matrix.ghc == 'head' | |
id: setup-haskell-head | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y build-essential curl libffi-dev libffi8ubuntu1 libgmp-dev libgmp10 libncurses-dev libncurses5 libtinfo5 | |
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh | |
ghcup config add-release-channel https://raw.githubusercontent.com/haskell/ghcup-metadata/master/ghcup-prereleases-0.0.8.yaml | |
ghcup install ghc 9.10.0.20240328 | |
ghcup set ghc 9.10.0.20240328 | |
echo "cabal-store=$HOME/.cabal/store" >> $GITHUB_OUTPUT | |
- name: Setup CI | |
run: | | |
cabal v2-freeze | |
mv cabal.project.freeze frozen | |
- name: Cache dependencies | |
uses: actions/cache@v3 | |
with: | |
path: ${{ steps.setup-haskell.outputs.cabal-store || steps.setup-haskell-head.outputs.cabal-store }} | |
key: ${{ runner.os }}-ghc-${{ matrix.ghc }}-${{ hashFiles('frozen') }} | |
restore-keys: | | |
${{ runner.os }}-ghc-${{ matrix.ghc }}-${{ hashFiles('frozen') }} | |
${{ runner.os }}-ghc-${{ matrix.ghc }}- | |
- name: Build | |
run: | | |
cabal v2-update | |
cabal v2-build all --enable-tests | |
- name: Test - doctests | |
run: | | |
cabal v2-run doctests | |
- name: Test - spectests | |
run: | | |
cabal v2-run spectests | |
- name: Test - example project | |
run: | | |
cd example | |
# See: https://github.com/martijnbastiaan/doctest-parallel/issues/22 | |
# cabal v2-test | |
cabal v2-run doctests | |
nix: | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: cachix/install-nix-action@v18 | |
with: | |
nix_path: nixpkgs=channel:nixos-unstable | |
- run: | | |
nix-build | |
cd test/nix | |
nix-build | |
nix-shell --pure --run "cabal run doctests" | |
nix-shell --pure --run "cabal test" | |
nix-shell --pure --run "cabal run doctests --write-ghc-environment-files=always" | |
nix-shell --pure --run "cabal test --write-ghc-environment-files=always" | |
hls: | |
name: HLS | |
runs-on: ubuntu-22.04 | |
strategy: | |
matrix: | |
tools: | |
- {ghc: "9.6.2", cabal: "3.10.1.0", hls: "2.0.0.1", ghcup: "0.1.19.4"} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Setup Haskell | |
run: | | |
sudo apt-get update | |
sudo apt-get install curl -y | |
sudo apt-get install \ | |
build-essential curl libffi-dev libffi8ubuntu1 libgmp-dev \ | |
libgmp10 libncurses-dev libncurses5 libtinfo5 -y | |
sudo curl "https://downloads.haskell.org/~ghcup/${{ matrix.tools.ghcup }}/x86_64-linux-ghcup-${{ matrix.tools.ghcup }}" --output /usr/bin/ghcup | |
sudo chmod +x /usr/bin/ghcup | |
ghcup install ghc ${{ matrix.tools.ghc }} --set --force | |
ghcup install cabal ${{ matrix.tools.cabal }} --set --force | |
ghcup install hls ${{ matrix.tools.hls }} --set --force | |
cabal update | |
echo "${HOME}/.ghcup/bin/" >> $GITHUB_PATH | |
ls "${HOME}/.ghcup/bin/" | |
- name: Setup CI | |
run: | | |
cabal v2-freeze | |
mv cabal.project.freeze frozen | |
- name: Cache dependencies | |
uses: actions/cache@v3 | |
with: | |
path: $HOME/.cabal/store | |
key: ${{ runner.os }}-cachebust1-hls-${{ matrix.tools.ghc }}-${{ matrix.tools.cabal }}-${{ matrix.tools.hls }}-${{ matrix.tools.ghcup }}-${{ hashFiles('frozen') }} | |
restore-keys: | | |
${{ runner.os }}-cachebust1-hls-${{ matrix.tools.ghc }}-${{ matrix.tools.cabal }}-${{ matrix.tools.hls }}-${{ matrix.tools.ghcup }}-${{ hashFiles('frozen') }} | |
${{ runner.os }}-cachebust1-hls-${{ matrix.tools.ghc }}-${{ matrix.tools.cabal }}-${{ matrix.tools.hls }}-${{ matrix.tools.ghcup }}- | |
- name: Build | |
run: | | |
cabal v2-update | |
cabal v2-build all --enable-tests --only-dependencies | |
- name: Run haskell-language-server-wrapper | |
run: | | |
(haskell-language-server-wrapper || true) |& tee hls-log | |
.github/scripts/parse_hls_log.py hls-log | |
# Mandatory check on GitHub | |
all: | |
name: All jobs finished | |
if: always() | |
needs: [ | |
cabal, | |
stack, | |
nix, | |
hls, | |
] | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Check dependencies for failures | |
run: | | |
# Test all dependencies for success/failure | |
set -x | |
success="${{ contains(needs.*.result, 'success') }}" | |
fail="${{ contains(needs.*.result, 'failure') }}" | |
set +x | |
# Test whether success/fail variables contain sane values | |
if [[ "${success}" != "true" && "${success}" != "false" ]]; then exit 1; fi | |
if [[ "${fail}" != "true" && "${fail}" != "false" ]]; then exit 1; fi | |
# We want to fail if one or more dependencies fail. For safety, we introduce | |
# a second check: if no dependencies succeeded something weird is going on. | |
if [[ "${fail}" == "true" || "${success}" == "false" ]]; then | |
echo "One or more dependency failed, or no dependency succeeded." | |
exit 1 | |
fi | |
- name: Install dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get -y install python3-yaml | |
- name: Check that the 'all' job depends on all other jobs | |
run: | | |
.github/scripts/all_check.py |