-
Notifications
You must be signed in to change notification settings - Fork 4
115 lines (98 loc) · 3.33 KB
/
simulation.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
name: "simulation"
on:
pull_request:
paths:
- "cabal.project"
- "data/**"
- "simulation/**"
push:
branches:
- main
paths:
- "cabal.project"
- "data/**"
- "simulation/**"
jobs:
simulation-test:
name:
"simulation: Test on ${{ matrix.os }} with GHC ${{ matrix.ghc-version }}"
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [macos-13, macos-14, ubuntu-22.04]
ghc-version: ["9.8"]
steps:
- name: 📥 Checkout repository
uses: actions/checkout@v4
- name: 🛠️ Install GHC ${{ matrix.ghc-version }}
uses: haskell-actions/setup@v2
id: setup
with:
ghc-version: ${{ matrix.ghc-version }}
# Defaults, added for clarity:
cabal-version: "latest"
cabal-update: true
- name: 🛠️ Install system dependencies (Linux)
if: runner.os == 'Linux'
run: sudo apt-get install -y graphviz libpango1.0-dev libgtk-3-dev
- name: 🛠️ Install system dependencies (macOS)
if: runner.os == 'macOS'
run: brew install graphviz gtk+3 pango
- name: 🛠️ Configure
run: |
cabal configure --enable-tests --enable-benchmarks --disable-documentation
cabal build all --dry-run
# The last step generates dist-newstyle/cache/plan.json for the cache key.
- name: 💾➤ Restore dependency cache
uses: actions/cache/restore@v4
id: cache
env:
key:
${{ runner.os }}-ghc-${{ steps.setup.outputs.ghc-version
}}-cabal-${{ steps.setup.outputs.cabal-version }}
with:
path: ${{ steps.setup.outputs.cabal-store }}
key:
${{ env.key }}-plan-${{ hashFiles('dist-newstyle/cache/plan.json')
}}
restore-keys: ${{ env.key }}-
- name: 🛠️ Install Cabal dependencies
# If we had an exact cache hit, the dependencies will be up to date.
if: steps.cache.outputs.cache-hit != 'true'
run: cabal build all --only-dependencies
# Cache dependencies already here, so that we do not have to rebuild them should the subsequent steps fail.
- name: ➤💾 Save dependency cache
uses: actions/cache/save@v4
# If we had an exact cache hit, trying to save the cache would error because of key clash.
if: steps.cache.outputs.cache-hit != 'true'
with:
path: ${{ steps.setup.outputs.cabal-store }}
key: ${{ steps.cache.outputs.cache-primary-key }}
- name: 🏗️ Build
run: cabal build all
- name: 🏗️ Test
run: cabal test all
simulation-hlint:
name: "Check with HLint"
runs-on: ubuntu-22.04
steps:
- name: 📥 Checkout repository
uses: actions/checkout@v4
- name: 🛠️ Set up HLint
uses: haskell-actions/hlint-setup@v2
- name: 🛠️ Run HLint
uses: haskell-actions/hlint-run@v2
with:
path: simulation/
fail-on: warning
simulation-fourmolu:
name: "Check with fourmolu"
runs-on: ubuntu-22.04
steps:
- name: 📥 Checkout repository
uses: actions/checkout@v4
- name: 🛠️ Run fourmolu
uses: haskell-actions/run-fourmolu@v11
with:
version: "0.15.0.0"