-
Notifications
You must be signed in to change notification settings - Fork 0
134 lines (116 loc) · 4.42 KB
/
build.yml
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
name: Build and Test
on:
push:
paths-ignore:
- '**.md'
# only one build per branch
concurrency:
group: build-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
name: GHC ${{ matrix.ghc-version }} on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
ghc-version: ['9.10.1']
steps:
- uses: actions/checkout@v4
- name: Install system dependencies - Linux
if: runner.os == 'Linux'
run: |
set -x
sudo apt-get update
sudo apt-get install libpcre3-dev
sudo apt-get install libmysqlclient-dev
sudo apt-get install libmysqlclient21
sudo apt list --installed
- name: Install system dependencies - Windows
if: runner.os == 'Windows'
run: |
C:\msys64\usr\bin\pacman.exe -Ss pcre
- name: Install system dependencies - MacOS
if: runner.os == 'macOS'
run: |
set -x
brew install pcre2
brew install pcre
brew install mysql-connector-c
export LDFLAGS="-L/opt/homebrew/opt/mysql-client/lib"
export CPPFLAGS="-I/opt/homebrew/opt/mysql-client/include"
cat <<EOF >cabal.project.local
ignore-project: False
package pcre-light
extra-include-dirs: /opt/homebrew/include
extra-lib-dirs: /opt/homebrew/lib
extra-prog-path: /opt/homebrew/lib
package mysql
extra-include-dirs: /opt/homebrew/include
extra-lib-dirs: /opt/homebrew/lib
extra-prog-path: /opt/homebrew/lib
EOF
cat caba.project.local
ls -la /opt/homebrew/include
- name: Setup - PostgreSQL
id: postgres-setup
uses: ikalnytskyi/action-setup-postgres@v7
with:
postgres-version: "16"
database: 'postgres'
username: 'postgres'
password: 'postgres'
- name: Setup - MySQL
uses: shogo82148/actions-setup-mysql@v1
- name: Show mysql contents
if: runner.os == 'Linux'
run: |
sudo apt-get install tree
tree /opt/hostedtoolcache/mysql
- name: Setup - 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: Build - Configure
run: |
LD_DEBUG=libs cabal configure --enable-tests --enable-benchmarks --disable-documentation
LD_DEBUG=libs cabal build all --dry-run
# The last step generates dist-newstyle/cache/plan.json for the cache key.
- name: Build - Restore cached dependencies
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('**/plan.json') }}
restore-keys: ${{ env.key }}-
- name: Build - Install dependencies
# If we had an exact cache hit, the dependencies will be up to date.
if: steps.cache.outputs.cache-hit != 'true'
run: LD_DEBUG=libs cabal build all --only-dependencies
# Cache dependencies already here, so that we do not have to rebuild them should the subsequent steps fail.
- name: Build - Save dependencies to 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: LD_DEBUG=libs cabal build all
- name: Test
run: |
export LDFLAGS="-L/opt/hostedtoolcache/mysql/9.1.0/x64/lib"
export CPPFLAGS="-I/opt/hostedtoolcache/mysql/9.1.0/x64/include"
LD_DEBUG=libs cabal run --verbose emulator-tests -- +RTS -N
# We run this only when a PR is merged so we can see how things are performing
# on the GH actions machines.
- name: Benchmark
if: github.ref == 'refs/heads/main'
run: cabal run emulator-tests -- +RTS -N