Add subdir support, cleanup caches, warning for pack_options #218
This file contains hidden or 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
| # 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\"" |