Skip to content

Add subdir support, cleanup caches, warning for pack_options #218

Add subdir support, cleanup caches, warning for pack_options

Add subdir support, cleanup caches, warning for pack_options #218

Workflow file for this run

# packcheck-0.7.1
# You can use any of the options supported by packcheck as environment
# variables here. See https://github.com/composewell/packcheck for all
# options and their explanation.
name: tests
#-----------------------------------------------------------------------------
# Events on which the build should be triggered
#-----------------------------------------------------------------------------
on:
push:
branches:
- master
pull_request:
#-----------------------------------------------------------------------------
# Build matrix
#-----------------------------------------------------------------------------
jobs:
build:
name: >-
${{ matrix.runner }}
${{ matrix.command }}
${{ matrix.ghc_version }}
${{ matrix.name }}
env:
# ------------------------------------------------------------------------
# Common options
# ------------------------------------------------------------------------
CABAL_REINIT_CONFIG: y
LC_ALL: C.UTF-8
# ------------------------------------------------------------------------
# What to build
# ------------------------------------------------------------------------
# DISABLE_TEST: "y"
# DISABLE_BENCH: "y"
# DISABLE_DOCS: "y"
# DISABLE_SDIST_BUILD: "y"
# DISABLE_SDIST_GIT_CHECK: "y"
# DISABLE_DIST_CHECKS: "y"
# ------------------------------------------------------------------------
# Selecting tool versions
# ------------------------------------------------------------------------
# For updating see: https://downloads.haskell.org/~ghcup/
GHCUP_VERSION: 0.1.50.2
GHCVER: ${{ matrix.ghc_version }}
# ------------------------------------------------------------------------
# stack options (if using stack builds)
# ------------------------------------------------------------------------
# Note requiring a specific version of stack using STACKVER may fail due to
# github API limit while checking and upgrading/downgrading to the specific
# version.
#STACKVER: "1.6.5"
#STACK_UPGRADE: "y"
STACK_YAML: "stack.yaml"
# ------------------------------------------------------------------------
# cabal options
# ------------------------------------------------------------------------
CABAL_CHECK_RELAX: y
# Build paralellism can cause memory issues. We need to have sufficient
# per CPU memory, if not we can use a lower -j option; default is ncpus.
# Currently (2026-03-12) from packcheck output we see:
# Linux: 15GB, 4 cpus
# macOS: 7GB, 3 cpus
# Windows: 16GB, 4 cpus
# ------------------------------------------------------------------------
# Location of packcheck.sh (the shell script invoked to perform CI tests ).
# ------------------------------------------------------------------------
# You can either commit the packcheck.sh script at this path in your repo or
# you can use it by specifying the PACKCHECK_REPO_URL option below in which
# case it will be automatically copied from the packcheck repo to this path
# during CI tests. In any case it is finally invoked from this path.
PACKCHECK: "./packcheck.sh"
# If you have not committed packcheck.sh in your repo at PACKCHECK
# then it is automatically pulled from this URL.
PACKCHECK_GITHUB_URL: "https://raw.githubusercontent.com/composewell/packcheck"
PACKCHECK_GITHUB_COMMIT: "4e1603ebb7692ffd538b54135a5fd002fc5644eb"
# ------------------------------------------------------------------------
# Final build variables
# ------------------------------------------------------------------------
PACKCHECK_COMMAND: ${{ matrix.command }} ${{ matrix.pack_options }}
# Subdir
SUBDIR: ${{ matrix.subdir }}
# ubuntu seems to have better support than debian on CI systems
runs-on: ${{ matrix.runner }}
#continue-on-error: ${{ matrix.ignore_error }}
strategy:
fail-fast: false
matrix:
# The order of jobs is important to optimize fail-fast.
# This section is to order the important jobs first especially for
# "fail-fast" so that these are the ones started first.
#name:
# - ci
# The name of the CI is built using the name and other info from CI,
# therefore, the "name" field can be same for all tests here.
#
# The reason we have an explicit "name" field here is to force
# an additional config instead of adding to an existing config
# while adding additional configs.
# Look at <https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions#jobsjob_idstrategymatrix>
# for more info about adding matrix elements.
# Adding any element to the list will increase the number of matrix
# elements proportional to the cross product.
include:
- name: ci
runner: ubuntu-latest
command: cabal
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
# WARNING! cannot use # comments inside pack_options.
pack_options: >-
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"
CABAL_PROJECT=cabal.project.ghc-head
- name: ci
runner: ubuntu-latest
command: cabal
ghc_version: 9.14.1
# WARNING! cannot use # comments inside pack_options.
pack_options: >-
CABAL_PROJECT=cabal.project
- name: ci
runner: macos-latest
command: cabal
ghc_version: 9.12.2
# WARNING! cannot use # comments inside pack_options.
pack_options: >-
CABAL_PROJECT=cabal.project
- name: ci
runner: ubuntu-latest
command: cabal
ghc_version: 9.10.3
# WARNING! cannot use # comments inside pack_options.
pack_options: >-
CABAL_PROJECT=cabal.project
- name: ghc-9.10.3
runner: ubuntu-latest
command: stack
# WARNING! cannot use # comments inside pack_options.
pack_options: >-
CABAL_PROJECT=cabal.project
STACK_UPGRADE="y"
DISABLE_SDIST_BUILD="y"
- name: ci
runner: ubuntu-latest
command: cabal
ghc_version: 9.8.4
# WARNING! cannot use # comments inside pack_options.
pack_options: >-
CABAL_PROJECT=cabal.project
- name: ci
runner: ubuntu-latest
command: cabal
ghc_version: 9.6.3
# WARNING! cannot use # comments inside pack_options.
pack_options: >-
CABAL_PROJECT=cabal.project
- name: ci
runner: windows-latest
command: cabal
ghc_version: 9.10.3
# WARNING! cannot use # comments inside pack_options.
pack_options: >-
CABAL_PROJECT=cabal.project
- name: ci
runner: ubuntu-latest
command: hlint
# WARNING! cannot use # comments inside pack_options.
pack_options: >-
HLINT_VERSION=3.6.1
HLINT_OPTIONS="lint"
HLINT_TARGETS="src"
- name: docspec
runner: ubuntu-latest
command: cabal
ghc_version: 9.12.2
# WARNING! cannot use # comments inside pack_options.
pack_options: >-
ENABLE_DOCSPEC="y"
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"
CABAL_PROJECT=cabal.project
steps:
- uses: actions/checkout@v4
# See the "cabal path" output in the CI logs to tweak the cache locations
- uses: actions/cache@v4
name: Cache common directories (non-Windows)
if: runner.os != 'Windows'
with:
# ghcup: ~/.ghcup (macOS), /usr/local/.ghcup (Linux)
# cabal: ~/.local/bin, ~/.local/state/cabal, ~/.local/cache/cabal
path: |
/usr/local/.ghcup
~/.cabal
~/.ghcup
~/.local
~/.stack
# Bump the key version to clear the cache
# Key is same as the CI name
key: ${{ matrix.runner }}-${{ matrix.command }}-${{ matrix.ghc_version }}-${{ matrix.name }}-v1
- uses: actions/cache@v4
name: Cache common directories (Windows)
if: runner.os == 'Windows'
with:
path: |
${{ env.APPDATA }}/local
C:/ghcup
C:/cabal
key: ${{ matrix.runner }}-${{ matrix.command }}-${{ matrix.ghc_version }}-${{ matrix.name }}-v1
- name: Download packcheck
# on windows-latest GitHub Actions defaults to PowerShell
shell: bash
run: |
if test ! -e "$PACKCHECK"
then
if test -z "$PACKCHECK_GITHUB_COMMIT"
then
die "PACKCHECK_GITHUB_COMMIT env var 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 packcheck
# on windows-latest GitHub Actions defaults to PowerShell
shell: bash
run: |
if test -n "$SUBDIR"
then
mv "$PACKCHECK" "$SUBDIR/packcheck.sh"
# This is required otherwise dist-newstyle will be created in
# the top level directory as it is considered the working dir.
rm cabal.project
cd "$SUBDIR"
fi
PATH_VAR=/sbin:/usr/sbin:/bin:/usr/bin
case "$(uname)" in
CYGWIN*|MINGW*|MSYS*)
PATH_VAR="$PATH_VAR:/c/Program Files/7-Zip:/mingw64/bin"
;;
esac
# Use "bash -c" instead of invoking directly to preserve quoted
# arguments in PACKCHECK_COMMAND e.g. DOCSPEC_OPTIONS="--timeout 60".
# Direct invocation would word-split on spaces inside quoted values.
echo "$PACKCHECK $PACKCHECK_COMMAND PATH=\"$PATH_VAR\""
bash -c "$PACKCHECK $PACKCHECK_COMMAND PATH=\"$PATH_VAR\""