Don't merge! Checking regression CI. #8200
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: Haskell CI | |
on: | |
push: | |
branches: | |
- master | |
pull_request: | |
jobs: | |
build: | |
name: GHC ${{matrix.name}} | |
env: | |
# packcheck environment variables | |
LC_ALL: C.UTF-8 | |
BUILD: ${{ matrix.build }} | |
# For updating see: https://downloads.haskell.org/~ghcup/ | |
GHCUP_VERSION: 0.1.20.0 | |
DOCSPEC_URL: https://github.com/phadej/cabal-extras/releases/download/cabal-docspec-0.0.0.20210111/cabal-docspec-0.0.0.20210111.xz | |
DOCSPEC_OPTIONS: "--timeout 60 --check-properties --property-variables xs" | |
GHCUP_GHC_OPTIONS: ${{ matrix.ghcup_ghc_options }} | |
GHCVER: ${{ matrix.ghc_version }} | |
CABALVER: ${{ matrix.cabal_version }} | |
DISABLE_DOCS: ${{ matrix.disable_docs }} | |
ENABLE_DOCSPEC: ${{ matrix.enable_docspec }} | |
DISABLE_TEST: ${{ matrix.disable_test }} | |
DISABLE_BENCH: ${{ matrix.disable_bench }} | |
DISABLE_DIST_CHECKS: ${{ matrix.disable_dist_checks }} | |
SDIST_OPTIONS: ${{ matrix.sdist_options }} | |
DISABLE_SDIST_BUILD: ${{ matrix.disable_sdist_build }} | |
# Cabal options | |
CABAL_REINIT_CONFIG: y | |
# Github has machines with 2 CPUS and 6GB memory so the cabal jobs | |
# default (ncpus) is good, this can be checked from the packcheck | |
# output in case it changes. | |
CABAL_BUILD_OPTIONS: ${{ matrix.cabal_build_options }} | |
CABAL_BUILD_TARGETS: ${{ matrix.cabal_build_targets }} | |
CABAL_PROJECT: ${{ matrix.cabal_project }} | |
CABAL_CHECK_RELAX: y | |
# Stack options | |
STACK_UPGRADE: "y" | |
RESOLVER: ${{ matrix.resolver }} | |
STACK_YAML: ${{ matrix.stack_yaml }} | |
STACK_BUILD_OPTIONS: ${{ matrix.stack_build_options }} | |
# packcheck location and revision | |
PACKCHECK: "./packcheck.sh" | |
PACKCHECK_GITHUB_URL: "https://raw.githubusercontent.com/composewell/packcheck" | |
PACKCHECK_GITHUB_COMMIT: "e575ff318c93add2a6d3f9107a52c5e37c666a98" | |
# Pull token from "secrets" setting of the github repo | |
COVERALLS_TOKEN: ${{ secrets.COVERALLS_TOKEN }} | |
COVERAGE: ${{ matrix.coverage }} | |
# hlint | |
HLINT_VERSION: 3.6.1 | |
HLINT_OPTIONS: "lint" | |
HLINT_TARGETS: "core/src src test benchmark" | |
# Subdir | |
SUBDIR: ${{ matrix.subdir }} | |
runs-on: ${{ matrix.runner }} | |
continue-on-error: ${{ matrix.ignore_error }} | |
strategy: | |
fail-fast: true | |
matrix: | |
# The order is important to optimize fail-fast. | |
name: | |
- 9.10.1-Werror | |
# - 9.8.1-docspec | |
# - 8.10.7-coverage | |
# Note: if cabal.project is not specified benchmarks and tests won't | |
# run. But we need at least one test where we test without | |
# cabal.project because that is how hackage would build it. | |
include: | |
- name: head | |
ghc_version: head | |
# The URL may change, to find a working URL go to https://gitlab.haskell.org/ghc/ghc/-/jobs/ | |
# Find a debian10/11/12 job, click on a passed/failed status, at the | |
# end of the output you will find the tar.xz name, put that tar | |
# name after "raw/", and put the job name after "job=". | |
# Also see https://github.com/mpickering/ghc-artefact-nix/blob/master/gitlab-artifact.nix | |
# | |
# May also use ghcup for installing ghc head version, use the | |
# version "LatestNightly", and the following config: | |
# ghcup config add-release-channel https://ghc.gitlab.haskell.org/ghcup-metadata/ghcup-nightlies-0.0.7.yaml | |
ghcup_ghc_options: "-u https://gitlab.haskell.org/ghc/ghc/-/jobs/artifacts/master/raw/ghc-x86_64-linux-deb10-int_native-validate.tar.xz?job=x86_64-linux-deb10-int_native-validate" | |
runner: ubuntu-latest | |
build: cabal | |
cabal_build_options: "--flag limit-build-mem" | |
cabal_version: 3.12.1.0 | |
cabal_project: cabal.project.ghc-head | |
disable_sdist_build: "y" | |
ignore_error: true | |
- name: 9.12.1-alpha | |
ghc_version: head | |
ghcup_ghc_options: "-u https://downloads.haskell.org/ghc/9.12.1-alpha1/ghc-9.12.20241014-x86_64-deb12-linux.tar.xz" | |
runner: ubuntu-latest | |
build: cabal | |
cabal_build_options: "--flag limit-build-mem" | |
cabal_version: 3.12.1.0 | |
cabal_project: cabal.project.ghc-head | |
disable_sdist_build: "y" | |
ignore_error: false | |
# Note: use linux for warning build for convenient dev testing | |
- name: 9.10.1-Werror | |
ghc_version: 9.10.1 | |
runner: ubuntu-latest | |
build: cabal | |
cabal_build_options: "--flag limit-build-mem" | |
cabal_version: 3.12.1.0 | |
disable_sdist_build: "y" | |
cabal_project: cabal.project.Werror | |
ignore_error: false | |
- name: 9.10.1-macos | |
ghc_version: 9.10.1 | |
runner: macos-latest | |
build: cabal | |
cabal_build_options: "--flag limit-build-mem" | |
cabal_version: 3.12.1.0 | |
disable_sdist_build: "y" | |
cabal_project: cabal.project | |
ignore_error: false | |
- name: 9.10.1-fusion-inspection | |
ghc_version: 9.10.1 | |
runner: ubuntu-latest | |
build: cabal | |
cabal_version: 3.12.1.0 | |
disable_sdist_build: "y" | |
cabal_project: cabal.project | |
cabal_build_options: "--flag fusion-plugin --flag inspection" | |
ignore_error: false | |
- name: 9.8.2-macos-stack | |
runner: macos-latest | |
build: stack | |
resolver: nightly-2024-09-26 | |
stack_yaml: stack.yaml | |
disable_docs: "y" | |
disable_sdist_build: "y" | |
disable_dist_checks: "y" | |
disable_test: "y" | |
disable_bench: "y" | |
#sdist_options: "--ignore-check" | |
stack_build_options: "-v" | |
cabal_version: 3.12.1.0 | |
ignore_error: true | |
# - name: 9.8.1-docspec | |
# ghc_version: 9.8.1 | |
# runner: ubuntu-latest | |
# build: cabal | |
# cabal_version: 3.10.1.0 | |
# cabal_project: cabal.project.doctest | |
# disable_test: "y" | |
# disable_bench: "y" | |
# disable_docs: "y" | |
# enable_docspec: "y" | |
# disable_sdist_build: "y" | |
# ignore_error: false | |
- name: 9.8.1-fusion-inspection | |
ghc_version: 9.8.1 | |
runner: ubuntu-latest | |
build: cabal | |
cabal_version: 3.12.1.0 | |
disable_sdist_build: "y" | |
cabal_project: cabal.project | |
cabal_build_options: "--flag fusion-plugin --flag inspection" | |
ignore_error: false | |
- name: 9.6.3-macos | |
ghc_version: 9.6.3 | |
runner: macos-latest | |
build: cabal | |
cabal_version: 3.10.1.0 | |
disable_sdist_build: "y" | |
cabal_project: cabal.project | |
ignore_error: false | |
- name: 9.4.7 | |
ghc_version: 9.4.7 | |
runner: ubuntu-latest | |
build: cabal | |
cabal_version: 3.8.1.0 | |
disable_sdist_build: "y" | |
cabal_project: cabal.project | |
ignore_error: false | |
- name: 9.2.8 | |
ghc_version: 9.2.8 | |
runner: ubuntu-latest | |
build: cabal | |
cabal_project: cabal.project | |
cabal_version: 3.6.2.0 | |
disable_sdist_build: "y" | |
ignore_error: false | |
- name: 9.0.2-streamly-sdist | |
ghc_version: 9.0.2 | |
runner: ubuntu-latest | |
build: cabal | |
cabal_version: 3.6.2.0 | |
cabal_project: cabal.project.streamly | |
ignore_error: true | |
- name: 9.0.2-streamly-core-sdist | |
ghc_version: 9.0.2 | |
runner: ubuntu-latest | |
build: cabal | |
cabal_version: 3.6.2.0 | |
subdir: core | |
ignore_error: false | |
- name: 8.10.7-noopt | |
runner: ubuntu-latest | |
build: cabal | |
cabal_version: 3.6.2.0 | |
cabal_project: cabal.project | |
disable_sdist_build: "y" | |
disable_docs: "y" | |
disable_dist_checks: "y" | |
cabal_build_options: "--flags \"-opt\"" | |
ignore_error: false | |
# - name: 8.10.7-coverage | |
# ghc_version: 8.10.7 | |
# runner: ubuntu-latest | |
# coverage: "y" | |
# cabal_version: 3.6.2.0 | |
# ignore_error: false | |
- name: 8.8.4 | |
ghc_version: 8.8.4 | |
runner: ubuntu-latest | |
build: cabal | |
cabal_version: 3.6.2.0 | |
cabal_project: cabal.project | |
disable_sdist_build: "y" | |
disable_docs: "y" | |
ignore_error: false | |
- name: 8.6.5-debug-unoptimized | |
ghc_version: 8.6.5 | |
runner: ubuntu-latest | |
build: cabal | |
cabal_version: 3.6.2.0 | |
cabal_project: cabal.project | |
cabal_build_options: "--flag debug --flag -opt" | |
disable_sdist_build: "y" | |
disable_docs: "y" | |
ignore_error: false | |
# - name: hlint | |
# build: hlint | |
# runner: ubuntu-latest | |
# ignore_error: true | |
steps: | |
- uses: actions/checkout@v2 | |
- uses: actions/cache@v1 | |
name: Cache common directories | |
with: | |
path: | | |
~/.local | |
~/.cabal | |
~/.stack | |
~/.ghcup | |
# Bump the key version to clear the cache | |
key: ${{ runner.os }}-${{ matrix.ghc_version }}-cabal-v2 | |
- name: Download packcheck | |
run: | | |
if test ! -e "$PACKCHECK" | |
then | |
if test -z "$PACKCHECK_GITHUB_COMMIT" | |
then | |
die "PACKCHECK_GITHUB_COMMIT is not specified." | |
fi | |
PACKCHECK_URL=${PACKCHECK_GITHUB_URL}/${PACKCHECK_GITHUB_COMMIT}/packcheck.sh | |
curl --fail -sL -o "$PACKCHECK" $PACKCHECK_URL || exit 1 | |
chmod +x $PACKCHECK | |
elif test ! -x "$PACKCHECK" | |
then | |
chmod +x $PACKCHECK | |
fi | |
- name: Run tests | |
run: | | |
if test -n "$COVERAGE" | |
then | |
# Run tests with coverage | |
cabal update | |
# Build hpc-coveralls if needed | |
sudo apt-get install -y libcurl4-gnutls-dev | |
export PATH=$HOME/.cabal/bin:$PATH | |
which hpc-coveralls 2>/dev/null || cabal install --project-file cabal.project.hpc-coveralls hpc-coveralls | |
# Run tests and upload results to coveralls.io | |
bin/test.sh --coverage --raw | |
# XXX Uncomment this and fix it properly later | |
# hpc-coveralls --repo-token="$COVERALLS_TOKEN" --coverage-mode=StrictlyFullLines | |
else | |
# /usr/local/opt/curl/bin for macOS | |
export PATH=$HOME/.local/bin:$HOME/.ghcup/bin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/opt/curl/bin | |
if test -n "$SUBDIR" | |
then | |
mv "$PACKCHECK" "$SUBDIR/packcheck.sh" | |
# This is required as dist-newstyle will be created on the top level | |
# directory as it is considered the working dir. | |
rm cabal.project | |
cd "$SUBDIR" | |
fi | |
bash -c "$PACKCHECK $BUILD" | |
fi |