-
Notifications
You must be signed in to change notification settings - Fork 87
182 lines (147 loc) · 5.86 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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
name: Haskell CI
on:
pull_request:
push:
branches:
- 'staging'
- 'trying'
jobs:
check-cabal-files:
runs-on: ubuntu-latest
steps:
- name: Install Haskell
uses: input-output-hk/setup-haskell@v1
id: setup-haskell
with:
cabal-version: "3.10.1.0"
- uses: actions/checkout@v3
- name: Cabal check
run: ./scripts/ci/check-cabal-files.sh
build:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
ghc: ["8.10.7", "9.2.5"]
os: [ubuntu-latest, windows-latest]
env:
# Modify this value to "invalidate" the cabal cache.
CABAL_CACHE_VERSION: "2022-12-30"
# current ref from: 27.02.2022
SECP256K1_REF: ac83be33d0956faf6b7f61a60ab524ef7d6a473a
SECP_CACHE_VERSION: "2022-12-30"
steps:
- name: Install Haskell
uses: input-output-hk/setup-haskell@v1
id: setup-haskell
with:
ghc-version: ${{ matrix.ghc }}
cabal-version: "3.8.1.0"
pacman-packages: >
mingw-w64-x86_64-pkg-config
mingw-w64-x86_64-libsodium
mingw-w64-x86_64-openssl
base-devel
autoconf-wrapper
autoconf
automake
libtool
make
- name: "[OUTPUT] cache keys: version, weeknum"
id: cache-keys
shell: bash
run: |
echo "weeknum=$(/usr/bin/date -u "+%W")" >> $GITHUB_OUTPUT
echo "CACHE_VERSION=20220919" >> $GITHUB_OUTPUT
echo "DIST_CACHE_VERSION=20221122" >> $GITHUB_OUTPUT
- name: "LINUX: Install build environment (apt-get)"
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get -y install libsodium23 libsodium-dev
sudo apt-get -y install libsystemd0 libsystemd-dev
sudo apt-get -y remove --purge software-properties-common
sudo apt-get -y autoremove
- name: "LINUX: Install build environment (for secp256k1)"
if: runner.os == 'Linux'
run: sudo apt-get -y install autoconf automake libtool
- uses: actions/checkout@v3
- name: Install secp256k1
uses: input-output-hk/setup-secp256k1@v1
with:
git-ref: ${{ env.SECP256K1_REF }}
cache-version: ${{ env.SECP_CACHE_VERSION }}
- name: "Configure cabal.project.local"
if: runner.os != 'Windows'
run: |
cp .github/workflows/cabal.project.local.Linux cabal.project.local
- name: "Configure cabal.project.local Windows"
if: runner.os == 'Windows'
run: |
cp .github/workflows/cabal.project.local.Windows cabal.project.local
- name: Update Hackage and CHaP
run: cabal update
- name: Record dependencies
id: record-deps
run: cabal build all --dry-run
cat dist-newstyle/cache/plan.json | jq -r '."install-plan"[].id' | sort | uniq > dependencies.txt
- uses: actions/cache@v3
name: "Cache `cabal store`"
with:
path: ${{ steps.setup-haskell.outputs.cabal-store }}
key: cache-dependencies-${{ env.CABAL_CACHE_VERSION }}-${{ steps.cache-keys.outputs.CACHE_VERSION }}-${{ runner.os }}-${{ matrix.ghc }}-${{ hashFiles('dependencies.txt') }}
restore-keys: cache-dependencies-${{ env.CABAL_CACHE_VERSION }}-${{ steps.cache-keys.outputs.CACHE_VERSION }}-${{ runner.os }}-${{ matrix.ghc }}
- uses: actions/cache@v3
name: "Cache `dist-newstyle`"
with:
path: |
dist-newstyle
!dist-newstyle/**/.git
key: cache-dist-${{ env.CABAL_CACHE_VERSION }}-${{ steps.cache-keys.outputs.DIST_CACHE_VERSION }}-${{ runner.os }}-${{ matrix.ghc }}-${{ steps.cache-keys.outputs.weeknum }}
restore-keys: cache-dist-${{ env.CABAL_CACHE_VERSION }}-${{ steps.cache-keys.outputs.DIST_CACHE_VERSION }}-${{ runner.os }}-${{ matrix.ghc }}
- name: Update PATH on windows
if: runner.os == 'Windows'
run: |
$env:PATH=("C:\msys64\mingw64\bin;{0}" -f $env:PATH)
echo "PATH=$env:PATH" >> $env:GITHUB_ENV
- name: Build dependencies
run: cabal build --only-dependencies all -j
- name: Build projects [build]
run: cabal build all -j
# Test network packages
- name: ntp-client [test]
run: cabal run ntp-client:test
- name: network-mux [test]
run: cabal run network-mux:test
- name: ourobors-network-testing [test]
run: cabal run ouroboros-network-testing:test
- name: ourobors-network-framework [test]
run: cabal run ouroboros-network-framework:test
- name: ouroboros-network-protocols [test]
run: cabal run ouroboros-network-protocols:test
# We don't run cddl in GitHub actions (only on Hydra).
# - name: ouroboros-network-protocols [cddl]
# run: |
# # The tests call out to msys2 commands. We generally do not want to mix toolchains, so
# # we are very deliberate about only adding msys64 to the path where absolutely necessary.
# ${{ (runner.os == 'Windows' && '$env:PATH=("C:\msys64\mingw64\bin;{0}" -f $env:PATH)') || '' }}
# cabal run ouroboros-network-protocols-test:cddl
- name: ouroboros-network [test]
run: cabal run ouroboros-network:test
# Consensus tests take too long on GitHub's Azure machines
# Uncomment the following back in for debugging. Remember to launch a `pwsh` from
# the tmux session to debug `pwsh` issues. And be reminded that the `/msys2` and
# `/msys2/mingw64` paths are not in PATH by default for the workflow, but tmate
# will put them in.
# You may also want to run
#
# $env:PATH=("C:\Program Files\PowerShell\7;{0}" -f $env:ORIGINAL_PATH)
#
# to restore the original path. Do note that some test might need msys2
# and will silently fail if msys2 is not in path. See the "Run tests" step.
#
# - name: Setup tmate session
# if: ${{ failure() }}
# uses: mxschmitt/action-tmate@v3
# with:
# limit-access-to-actor: true