From 922e7008b20ccdaa0412c8c9b0187092b80ad56c Mon Sep 17 00:00:00 2001 From: Andreas Abel Date: Sat, 18 Apr 2026 10:10:19 +0200 Subject: [PATCH 1/5] Remove old stack*.yaml files --- stack-9.2.4.yaml | 6 ------ stack-9.2.5.yaml | 3 --- stack-9.2.6.yaml | 3 --- stack-9.2.7.yaml | 3 --- stack-9.2.8.yaml => stack-9.2.yaml | 0 stack-9.4.3.yaml | 3 --- stack-9.4.4.yaml | 3 --- stack-9.4.5.yaml | 3 --- stack-9.4.6.yaml | 3 --- stack-9.4.7.yaml | 3 --- stack-9.4.8.yaml => stack-9.4.yaml | 0 stack-9.6.2.yaml | 3 --- stack-9.6.3.yaml | 3 --- stack-9.6.4.yaml | 3 --- stack-9.8.1.yaml | 3 --- 15 files changed, 42 deletions(-) delete mode 100644 stack-9.2.4.yaml delete mode 100644 stack-9.2.5.yaml delete mode 100644 stack-9.2.6.yaml delete mode 100644 stack-9.2.7.yaml rename stack-9.2.8.yaml => stack-9.2.yaml (100%) delete mode 100644 stack-9.4.3.yaml delete mode 100644 stack-9.4.4.yaml delete mode 100644 stack-9.4.5.yaml delete mode 100644 stack-9.4.6.yaml delete mode 100644 stack-9.4.7.yaml rename stack-9.4.8.yaml => stack-9.4.yaml (100%) delete mode 100644 stack-9.6.2.yaml delete mode 100644 stack-9.6.3.yaml delete mode 100644 stack-9.6.4.yaml delete mode 100644 stack-9.8.1.yaml diff --git a/stack-9.2.4.yaml b/stack-9.2.4.yaml deleted file mode 100644 index bab00d5..0000000 --- a/stack-9.2.4.yaml +++ /dev/null @@ -1,6 +0,0 @@ -resolver: nightly-2022-11-12 -compiler: ghc-9.2.4 -compiler-check: match-exact - -packages: -- . diff --git a/stack-9.2.5.yaml b/stack-9.2.5.yaml deleted file mode 100644 index 50aa243..0000000 --- a/stack-9.2.5.yaml +++ /dev/null @@ -1,3 +0,0 @@ -resolver: lts-20.6 -compiler: ghc-9.2.5 -compiler-check: match-exact diff --git a/stack-9.2.6.yaml b/stack-9.2.6.yaml deleted file mode 100644 index 2518512..0000000 --- a/stack-9.2.6.yaml +++ /dev/null @@ -1,3 +0,0 @@ -resolver: lts-20.12 -compiler: ghc-9.2.6 -compiler-check: match-exact diff --git a/stack-9.2.7.yaml b/stack-9.2.7.yaml deleted file mode 100644 index 9c961cd..0000000 --- a/stack-9.2.7.yaml +++ /dev/null @@ -1,3 +0,0 @@ -resolver: lts-20.22 -compiler: ghc-9.2.7 -compiler-check: match-exact diff --git a/stack-9.2.8.yaml b/stack-9.2.yaml similarity index 100% rename from stack-9.2.8.yaml rename to stack-9.2.yaml diff --git a/stack-9.4.3.yaml b/stack-9.4.3.yaml deleted file mode 100644 index e87388c..0000000 --- a/stack-9.4.3.yaml +++ /dev/null @@ -1,3 +0,0 @@ -resolver: nightly-2022-12-22 -compiler: ghc-9.4.3 -compiler-check: match-exact diff --git a/stack-9.4.4.yaml b/stack-9.4.4.yaml deleted file mode 100644 index 501485e..0000000 --- a/stack-9.4.4.yaml +++ /dev/null @@ -1,3 +0,0 @@ -resolver: nightly-2023-01-14 -compiler: ghc-9.4.4 -compiler-check: match-exact diff --git a/stack-9.4.5.yaml b/stack-9.4.5.yaml deleted file mode 100644 index 7e8781d..0000000 --- a/stack-9.4.5.yaml +++ /dev/null @@ -1,3 +0,0 @@ -resolver: lts-21.1 -compiler: ghc-9.4.5 -compiler-check: match-exact diff --git a/stack-9.4.6.yaml b/stack-9.4.6.yaml deleted file mode 100644 index fce5cb9..0000000 --- a/stack-9.4.6.yaml +++ /dev/null @@ -1,3 +0,0 @@ -resolver: lts-21.11 -compiler: ghc-9.4.6 -compiler-check: match-exact diff --git a/stack-9.4.7.yaml b/stack-9.4.7.yaml deleted file mode 100644 index 0ae69ed..0000000 --- a/stack-9.4.7.yaml +++ /dev/null @@ -1,3 +0,0 @@ -resolver: lts-21.13 -compiler: ghc-9.4.7 -compiler-check: match-exact diff --git a/stack-9.4.8.yaml b/stack-9.4.yaml similarity index 100% rename from stack-9.4.8.yaml rename to stack-9.4.yaml diff --git a/stack-9.6.2.yaml b/stack-9.6.2.yaml deleted file mode 100644 index 724fa6d..0000000 --- a/stack-9.6.2.yaml +++ /dev/null @@ -1,3 +0,0 @@ -resolver: nightly-2023-09-27 -compiler: ghc-9.6.2 -compiler-check: match-exact diff --git a/stack-9.6.3.yaml b/stack-9.6.3.yaml deleted file mode 100644 index 6396d6c..0000000 --- a/stack-9.6.3.yaml +++ /dev/null @@ -1,3 +0,0 @@ -resolver: lts-22.6 -compiler: ghc-9.6.3 -compiler-check: match-exact diff --git a/stack-9.6.4.yaml b/stack-9.6.4.yaml deleted file mode 100644 index 1850fa6..0000000 --- a/stack-9.6.4.yaml +++ /dev/null @@ -1,3 +0,0 @@ -resolver: lts-22.7 -compiler: ghc-9.6.4 -compiler-check: match-exact diff --git a/stack-9.8.1.yaml b/stack-9.8.1.yaml deleted file mode 100644 index 41a8a67..0000000 --- a/stack-9.8.1.yaml +++ /dev/null @@ -1,3 +0,0 @@ -resolver: nightly-2024-01-23 -compiler: ghc-9.8.1 -compiler-check: match-exact From 8df0ce16c1b68a2edec82911052449ddaa5a5ef6 Mon Sep 17 00:00:00 2001 From: Andreas Abel Date: Sat, 18 Apr 2026 10:10:55 +0200 Subject: [PATCH 2/5] Bump stack CI to latest versions --- .github/workflows/stack.yml | 6 +++--- stack-9.10.yaml | 2 +- stack-9.12.yaml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/stack.yml b/.github/workflows/stack.yml index c7b80fe..2fcbef1 100644 --- a/.github/workflows/stack.yml +++ b/.github/workflows/stack.yml @@ -34,7 +34,7 @@ jobs: shell: bash steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: haskell-actions/setup@v2 id: setup @@ -66,7 +66,7 @@ jobs: sudo apt-get install libbrotli-dev -qq - name: Cache dependencies (restore) - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 id: cache with: path: ${{ steps.setup.outputs.stack-root }} @@ -88,7 +88,7 @@ jobs: stack test ${{ env.ARGS }} --flag HsOpenSSL:use-pkg-config - name: Cache dependencies (save) - uses: actions/cache/save@v4 + uses: actions/cache/save@v5 if: always() && steps.cache.outputs.cache-hit != 'true' # # Will fail if we already have a cache with this key (in this case, cache-hit is true). with: diff --git a/stack-9.10.yaml b/stack-9.10.yaml index 97ce88d..4e91797 100644 --- a/stack-9.10.yaml +++ b/stack-9.10.yaml @@ -1,4 +1,4 @@ -resolver: lts-24.7 +resolver: lts-24.37 compiler: ghc-9.10.2 compiler-check: match-exact diff --git a/stack-9.12.yaml b/stack-9.12.yaml index 1a58a33..784741a 100644 --- a/stack-9.12.yaml +++ b/stack-9.12.yaml @@ -1,4 +1,4 @@ -resolver: nightly-2025-08-30 +resolver: nightly-2026-04-15 compiler: ghc-9.12.2 compiler-check: match-exact From b8690453b50a746b837f6d7cfafd7b8ef7cfd16b Mon Sep 17 00:00:00 2001 From: Andreas Abel Date: Sat, 18 Apr 2026 10:12:57 +0200 Subject: [PATCH 3/5] Bump containers and time bounds for GHC 9.14 --- hackage-cli.cabal | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hackage-cli.cabal b/hackage-cli.cabal index 0cff50b..25aed0f 100644 --- a/hackage-cli.cabal +++ b/hackage-cli.cabal @@ -59,7 +59,7 @@ library cabal-revisions , base >= 4.10.0.0 && < 5 , bytestring >= 0.10.4.0 && < 0.13 , Cabal >= 3.4 && < 3.17 - , containers >= 0.5.0.0 && < 0.8 + , containers >= 0.5.0.0 && < 1 , mtl >= 2.2.2 && < 2.3 || >= 2.3.1 && < 2.4 , pretty ^>= 1.1.2 @@ -134,7 +134,7 @@ executable hackage-cli , tagsoup ^>= 0.14 , tar >= 0.5 && < 1 , text >= 1.2 && < 2.2 - , time >= 1.5.0.1 && < 1.15 + , time >= 1.5.0.1 && < 2 , zlib >= 0.6.1 && < 0.8 ghc-options: -Wall -Wcompat -threaded From e37d9d14ec59af5c34477e8ba0d1bbb5128ebdce Mon Sep 17 00:00:00 2001 From: Andreas Abel Date: Sat, 18 Apr 2026 10:17:29 +0200 Subject: [PATCH 4/5] Haskell CI: drop GHC 8 --- .github/workflows/haskell-ci.yml | 94 ++++++++------------------------ cabal.haskell-ci | 3 +- hackage-cli.cabal | 15 ++--- 3 files changed, 32 insertions(+), 80 deletions(-) diff --git a/.github/workflows/haskell-ci.yml b/.github/workflows/haskell-ci.yml index 82f1841..e9732cc 100644 --- a/.github/workflows/haskell-ci.yml +++ b/.github/workflows/haskell-ci.yml @@ -8,9 +8,9 @@ # # For more information, see https://github.com/haskell-CI/haskell-ci # -# version: 0.19.20250821 +# version: 0.19.20260209 # -# REGENDATA ("0.19.20250821",["github","hackage-cli.cabal"]) +# REGENDATA ("0.19.20260209",["github","hackage-cli.cabal"]) # name: Haskell-CI on: @@ -20,6 +20,11 @@ on: pull_request: branches: - master + merge_group: + branches: + - master + workflow_dispatch: + {} jobs: linux: name: Haskell-CI - Linux - ${{ matrix.compiler }} @@ -32,19 +37,19 @@ jobs: strategy: matrix: include: - - compiler: ghc-9.14.0.20250819 + - compiler: ghc-9.14.1 compilerKind: ghc - compilerVersion: 9.14.0.20250819 - setup-method: ghcup-prerelease + compilerVersion: 9.14.1 + setup-method: ghcup allow-failure: false - - compiler: ghc-9.12.2 + - compiler: ghc-9.12.4 compilerKind: ghc - compilerVersion: 9.12.2 + compilerVersion: 9.12.4 setup-method: ghcup allow-failure: false - - compiler: ghc-9.10.2 + - compiler: ghc-9.10.3 compilerKind: ghc - compilerVersion: 9.10.2 + compilerVersion: 9.10.3 setup-method: ghcup allow-failure: false - compiler: ghc-9.8.4 @@ -72,37 +77,12 @@ jobs: compilerVersion: 9.0.2 setup-method: ghcup allow-failure: false - - compiler: ghc-8.10.7 - compilerKind: ghc - compilerVersion: 8.10.7 - setup-method: ghcup - allow-failure: false - - compiler: ghc-8.8.4 - compilerKind: ghc - compilerVersion: 8.8.4 - setup-method: ghcup - allow-failure: false - - compiler: ghc-8.6.5 - compilerKind: ghc - compilerVersion: 8.6.5 - setup-method: ghcup - allow-failure: false - - compiler: ghc-8.4.4 - compilerKind: ghc - compilerVersion: 8.4.4 - setup-method: ghcup - allow-failure: false - - compiler: ghc-8.2.2 - compilerKind: ghc - compilerVersion: 8.2.2 - setup-method: ghcup - allow-failure: false fail-fast: false steps: - name: apt-get install run: | apt-get update - apt-get install -y --no-install-recommends gnupg ca-certificates dirmngr curl git software-properties-common libtinfo5 libnuma-dev + apt-get install -y --no-install-recommends gnupg ca-certificates dirmngr curl git software-properties-common libtinfo5 apt-get install -y libbrotli-dev - name: Install GHCup run: | @@ -127,21 +107,6 @@ jobs: HCKIND: ${{ matrix.compilerKind }} HCNAME: ${{ matrix.compiler }} HCVER: ${{ matrix.compilerVersion }} - - name: Install GHC (GHCup prerelease) - if: matrix.setup-method == 'ghcup-prerelease' - run: | - "$HOME/.ghcup/bin/ghcup" config add-release-channel prereleases - "$HOME/.ghcup/bin/ghcup" install ghc "$HCVER" || (cat "$HOME"/.ghcup/logs/*.* && false) - HC=$("$HOME/.ghcup/bin/ghcup" whereis ghc "$HCVER") - HCPKG=$(echo "$HC" | sed 's#ghc$#ghc-pkg#') - HADDOCK=$(echo "$HC" | sed 's#ghc$#haddock#') - echo "HC=$HC" >> "$GITHUB_ENV" - echo "HCPKG=$HCPKG" >> "$GITHUB_ENV" - echo "HADDOCK=$HADDOCK" >> "$GITHUB_ENV" - env: - HCKIND: ${{ matrix.compilerKind }} - HCNAME: ${{ matrix.compiler }} - HCVER: ${{ matrix.compilerVersion }} - name: Set PATH and environment variables run: | echo "$HOME/.cabal/bin" >> $GITHUB_PATH @@ -152,7 +117,7 @@ jobs: echo "HCNUMVER=$HCNUMVER" >> "$GITHUB_ENV" echo "ARG_TESTS=--enable-tests" >> "$GITHUB_ENV" echo "ARG_BENCH=--enable-benchmarks" >> "$GITHUB_ENV" - if [ $((HCNUMVER >= 91400)) -ne 0 ] ; then echo "HEADHACKAGE=true" >> "$GITHUB_ENV" ; else echo "HEADHACKAGE=false" >> "$GITHUB_ENV" ; fi + echo "HEADHACKAGE=false" >> "$GITHUB_ENV" echo "ARG_COMPILER=--$HCKIND --with-compiler=$HC" >> "$GITHUB_ENV" env: HCKIND: ${{ matrix.compilerKind }} @@ -180,18 +145,6 @@ jobs: repository hackage.haskell.org url: http://hackage.haskell.org/ EOF - if $HEADHACKAGE; then - cat >> $CABAL_CONFIG <> $CABAL_CONFIG <> cabal.project if [ $((HCNUMVER >= 90400)) -ne 0 ] ; then echo "package hackage-cli" >> cabal.project ; fi if [ $((HCNUMVER >= 90400)) -ne 0 ] ; then echo " ghc-options: -Werror=unused-packages" >> cabal.project ; fi - if [ $((HCNUMVER >= 90000)) -ne 0 ] ; then echo "package hackage-cli" >> cabal.project ; fi - if [ $((HCNUMVER >= 90000)) -ne 0 ] ; then echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project ; fi + echo "package hackage-cli" >> cabal.project + echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project cat >> cabal.project <> cabal.project - fi - $HCPKG list --simple-output --names-only | perl -ne 'for (split /\s+/) { print "constraints: any.$_ installed\n" unless /^(Cabal|binary|hackage-cli)$/; }' >> cabal.project.local + $HCPKG list --simple-output --names-only | perl -ne 'for (split /\s+/) { print "constraints: any.$_ installed\n" unless /^(hackage-cli)$/; }' >> cabal.project.local cat cabal.project cat cabal.project.local - name: dump install plan @@ -258,7 +208,7 @@ jobs: $CABAL v2-build $ARG_COMPILER $ARG_TESTS $ARG_BENCH --dry-run all cabal-plan - name: restore cache - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 with: key: ${{ runner.os }}-${{ matrix.compiler }}-${{ github.sha }} path: ~/.cabal/store @@ -289,7 +239,7 @@ jobs: $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks all - name: save cache if: always() - uses: actions/cache/save@v4 + uses: actions/cache/save@v5 with: key: ${{ runner.os }}-${{ matrix.compiler }}-${{ github.sha }} path: ~/.cabal/store diff --git a/cabal.haskell-ci b/cabal.haskell-ci index ba995c2..1977761 100644 --- a/cabal.haskell-ci +++ b/cabal.haskell-ci @@ -2,6 +2,7 @@ branches: master -- By default `installed` constraints are used for packages -- in global db. We can modify which constraints are used. -installed: +all -binary -Cabal +-- 2026-04-18: For building with GHC 8, we'd need to unconstrain Cabal: +-- installed: +all -binary -Cabal apt: libbrotli-dev \ No newline at end of file diff --git a/hackage-cli.cabal b/hackage-cli.cabal index 25aed0f..271b347 100644 --- a/hackage-cli.cabal +++ b/hackage-cli.cabal @@ -19,18 +19,19 @@ build-type: Simple tested-with: -- Keep in descending order. GHC == 9.14.1 - GHC == 9.12.2 - GHC == 9.10.2 + GHC == 9.12.4 + GHC == 9.10.3 GHC == 9.8.4 GHC == 9.6.7 GHC == 9.4.8 GHC == 9.2.8 GHC == 9.0.2 - GHC == 8.10.7 - GHC == 8.8.4 - GHC == 8.6.5 - GHC == 8.4.4 - GHC == 8.2.2 + -- -- 2026-04-18: Stop testing GHC 8 on CI + -- GHC == 8.10.7 + -- GHC == 8.8.4 + -- GHC == 8.6.5 + -- GHC == 8.4.4 + -- GHC == 8.2.2 extra-doc-files: CHANGELOG.md From 2adf66b28452696b39c27eb4481662833603ba6a Mon Sep 17 00:00:00 2001 From: Andreas Abel Date: Sat, 18 Apr 2026 11:14:58 +0200 Subject: [PATCH 5/5] Stack CI: do not use system-ghc, let stack install GHC This combats the following error: https://github.com/hackage-trustees/hackage-cli/actions/runs/24601026158/job/71939628911?pr=80#step:9:20 WARNING: /Users/runner/.ghcup/ghc/9.8.4/lib/ghc-9.8.4/bin/./ghc-9.8.4 is loading libcrypto in an unsafe way The fix was suggested by Copilot and Google AI. [Storch] --- .github/workflows/stack.yml | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/.github/workflows/stack.yml b/.github/workflows/stack.yml index 2fcbef1..5f3824b 100644 --- a/.github/workflows/stack.yml +++ b/.github/workflows/stack.yml @@ -26,7 +26,8 @@ jobs: # ghc-ver: '9.10' env: - ARGS: "--stack-yaml=stack-${{ matrix.ghc-ver }}.yaml --no-terminal --system-ghc" + # ARGS: "--stack-yaml=stack-${{ matrix.ghc-ver }}.yaml --no-terminal --system-ghc" + ARGS: "--stack-yaml=stack-${{ matrix.ghc-ver }}.yaml --no-terminal" # Needed for Windows to make piping (... >> ...) and evaluation ( $(...) ) work. defaults: @@ -41,9 +42,15 @@ jobs: with: ghc-version: ${{ matrix.ghc-ver }} enable-stack: true + # Andreas, 2026-04-18 + # There have been problems with libcrypto on macOS with GHC 9.8.4 with --system-ghc + # so we let Stack install GHC itself. + stack-no-global: true - name: Set up the openssl library (MacOS) if: runner.os == 'macOS' + # Already installed: + # brew install openssl run: | echo "PKG_CONFIG_PATH=${PKG_CONFIG_PATH}" echo "PKG_CONFIG_PATH=$(brew --prefix)/opt/openssl/lib/pkgconfig" >> "${GITHUB_ENV}" @@ -68,11 +75,15 @@ jobs: - name: Cache dependencies (restore) uses: actions/cache/restore@v5 id: cache + env: + key: ${{ runner.os }}-stack-${{ steps.setup.outputs.stack-version }}-ghc-${{ matrix.ghc-ver }} + # ${{ steps.setup.outputs.ghc-version }} is empty with stack-no-global + # so we use plain ${{ matrix.ghc-ver }} with: path: ${{ steps.setup.outputs.stack-root }} # Use a unique primary key (always save new cache); works if caches aren't to big or too many... - key: ${{ runner.os }}-stack-${{ steps.setup.outputs.stack-version }}-ghc-${{ steps.setup.outputs.ghc-version }}-commit-${{ github.sha }} - restore-keys: ${{ runner.os }}-stack-${{ steps.setup.outputs.stack-version }}-ghc-${{ steps.setup.outputs.ghc-version }}- + key: ${{ env.key }}-commit-${{ github.sha }} + restore-keys: ${{ env.key }}- - name: Install dependencies # if: ${{ steps.cache.outputs.cache-hit != 'true' }}