Skip to content

Commit

Permalink
Update workflow file
Browse files Browse the repository at this point in the history
  • Loading branch information
jorisdral committed Apr 23, 2024
1 parent 30aef1f commit 8f019a9
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 46 deletions.
7 changes: 0 additions & 7 deletions .github/workflows/cabal.project.local.haskell

This file was deleted.

116 changes: 77 additions & 39 deletions .github/workflows/haskell.yml
Original file line number Diff line number Diff line change
@@ -1,56 +1,58 @@
name: Haskell CI

# Limit concurrent runs of this workflow within a single PR
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

on:
push:
branches: [ "main" ]
pull_request:
merge_group:

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true


permissions:
contents: read

jobs:
# Build and test
build:

runs-on: ${{ matrix.os }}

strategy:
fail-fast: false
matrix:
ghc: ["8.10.7", "9.2.8", "9.4.8", "9.6.3", "9.8.1"]
cabal: ["3.10.2.0"]
ghc: ["8.10.7", "9.2.8", "9.4.8", "9.6.4", "9.8.2"]
cabal: ["3.10.3.0"]
os: [ubuntu-latest, windows-latest, macOS-latest]

timeout-minutes: 60

steps:
- name: Checkout repository
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Setup Haskell
id: setup-haskell
uses: haskell-actions/setup@v2
with:
ghc-version: ${{ matrix.ghc }}
cabal-version: ${{ matrix.cabal }}
cabal-update: false
cabal-update: true

- name: "Configure cabal.project.local"
- name: Configure the build
run: |
cp .github/workflows/cabal.project.local.haskell cabal.project.local
- name: Cabal update
run: cabal update
cabal configure --enable-tests --enable-benchmark --ghc-options="-Werror" --ghc-options="-fno-ignore-asserts"
cat cabal.project.local
- name: Record cabal dependencies
id: record-deps
run: |
cabal build all --dry-run
- name: Cache cabal store
uses: actions/cache@v3
- name: "Restore cache"
uses: actions/cache/restore@v4
id: restore-cabal-cache
env:
cache-name: cache-cabal-build
with:
Expand All @@ -62,13 +64,38 @@ jobs:
${{ runner.os }}-${{ matrix.ghc }}-${{ env.cache-name }}-
- name: Install cabal dependencies
id: build-dependencies
run: cabal build --only-dependencies --enable-tests --enable-benchmarks all

- name: "Save cache"
uses: actions/cache/save@v4
id: save-cabal-cache
# Note: cache-hit will be set to true only when cache hit occurs for the
# exact key match. For a partial key match via restore-keys or a cache
# miss, it will be set to false.
if: steps.build-dependencies.outcome == 'success' && steps.restore-cabal-cache.outputs.cache-hit != 'true'
with:
path: ${{ steps.setup-haskell.outputs.cabal-store }}
key: ${{ steps.restore-cabal-cache.outputs.cache-primary-key }}

- name: Build
run: cabal build --enable-tests --enable-benchmarks all
run: cabal build all

# https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#setting-an-environment-variable
- name: Set test timeout (Unix)
if: ${{ startsWith(matrix.os, 'ubuntu') || startsWith(matrix.os, 'macOS') }}
run: |
echo "TASTY_TIMEOUT=5m" >> "$GITHUB_ENV"
# https://github.com/actions/runner/issues/2281#issuecomment-1326748709
- name: Set test timeout (Windows)
if: ${{ startsWith(matrix.os, 'windows') }}
run: |
echo "TASTY_TIMEOUT=5m" >> "$env:GITHUB_ENV"
- name: Run tests
run: cabal test all
run: |
cabal test --test-show-details=direct all
# Check formatting for Haskell files
stylish-haskell:
Expand All @@ -77,13 +104,23 @@ jobs:
strategy:
fail-fast: false
matrix:
ghc: ["9.2.8"]
cabal: ["3.10.2.0"]
ghc: ["9.6.4"]
cabal: ["3.10.3.0"]
os: [ubuntu-latest]

# Fix the index-state so we can get proper caching effects. Change this to a
# more recent time if you want to use a newer version of stylish-haskell, or
# if you want stylish-haskell to use updated dependencies.
#
# We use this environment variable in the primary key of our caches, and as
# an argument to cabal install. This ensures that we never rebuild
# dependencies because of newly uploaded packages unless we want to.
env:
hackage-index-state: "2024-04-10T14:36:07Z"

steps:
- name: Checkout repository
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Install system dependencies (apt-get)
run: |
Expand All @@ -105,19 +142,17 @@ jobs:
run: echo "$HOME/.cabal/bin" >> $GITHUB_PATH

- name: Cache cabal store
uses: actions/cache@v3
uses: actions/cache@v4
env:
cache-name: cache-cabal-stylish
with:
path: ${{ steps.setup-haskell.outputs.cabal-store }}
key: ${{ runner.os }}-${{ matrix.ghc }}-${{ env.cache-name }}-${{ hashFiles('**/*.cabal') }}-${{ hashFiles('**/cabal.project') }}
key: ${{ runner.os }}-${{ matrix.ghc }}-${{ env.cache-name }}-${{ env.hackage-index-state }}
restore-keys: |
${{ runner.os }}-${{ matrix.ghc }}-${{ env.cache-name }}-${{ hashFiles('**/*.cabal') }}-${{ hashFiles('**/cabal.project') }}
${{ runner.os }}-${{ matrix.ghc }}-${{ env.cache-name }}-${{ hashFiles('**/*.cabal') }}-
${{ runner.os }}-${{ matrix.ghc }}-${{ env.cache-name }}-
- name: Install stylish-haskell
run: cabal install stylish-haskell --constraint 'stylish-haskell == 0.14.4.0'
run: cabal install --ignore-project --index-state="${{ env.hackage-index-state }}" stylish-haskell --constraint 'stylish-haskell == 0.14.6.0'

- name: Record stylish-haskell version
run: |
Expand All @@ -126,7 +161,7 @@ jobs:
- name: Run stylish-haskell
run: |
./scripts/format-stylish.sh -p . -d
./scripts/format-stylish.sh
git diff --exit-code
# Check formatting for cabal files
Expand All @@ -136,13 +171,18 @@ jobs:
strategy:
fail-fast: false
matrix:
ghc: ["9.2.8"]
cabal: ["3.10.2.0"]
ghc: ["9.6.4"]
cabal: ["3.10.3.0"]
os: [ubuntu-latest]

# See the comment on the hackage-index-state environment variable for the
# stylish-haskell job.
env:
hackage-index-state: "2024-04-10T14:36:07Z"

steps:
- name: Checkout repository
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Install system dependencies (apt-get)
run: |
Expand All @@ -164,19 +204,17 @@ jobs:
run: echo "$HOME/.cabal/bin" >> $GITHUB_PATH

- name: Cache cabal store
uses: actions/cache@v3
uses: actions/cache@v4
env:
cache-name: cache-cabal-cabal-fmt
with:
path: ${{ steps.setup-haskell.outputs.cabal-store }}
key: ${{ runner.os }}-${{ matrix.ghc }}-${{ env.cache-name }}-${{ hashFiles('**/*.cabal') }}-${{ hashFiles('**/cabal.project') }}
key: ${{ runner.os }}-${{ matrix.ghc }}-${{ env.cache-name }}-${{ env.hackage-index-state }}
restore-keys: |
${{ runner.os }}-${{ matrix.ghc }}-${{ env.cache-name }}-${{ hashFiles('**/*.cabal') }}-${{ hashFiles('**/cabal.project') }}
${{ runner.os }}-${{ matrix.ghc }}-${{ env.cache-name }}-${{ hashFiles('**/*.cabal') }}-
${{ runner.os }}-${{ matrix.ghc }}-${{ env.cache-name }}-
- name: Install cabal-fmt
run: cabal install cabal-fmt --constraint 'cabal-fmt == 0.1.6'
run: cabal install --ignore-project cabal-fmt --index-state="${{ env.hackage-index-state }}" --constraint 'cabal-fmt == 0.1.11'

- name: Record cabal-fmt version
run: |
Expand All @@ -195,13 +233,13 @@ jobs:
strategy:
fail-fast: false
matrix:
ghc: ["9.2.8"]
cabal: ["3.10.2.0"]
ghc: ["9.6.4"]
cabal: ["3.10.3.0"]
os: [ubuntu-latest]

steps:
- name: Checkout repository
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Setup Haskell
id: setup-haskell
Expand Down

0 comments on commit 8f019a9

Please sign in to comment.