12
12
RUST_TOOLCHAIN : 1.70.0
13
13
14
14
jobs :
15
+ build-programs :
16
+ strategy :
17
+ matrix :
18
+ program-target : [
19
+ compile-cairo,
20
+ compile-starknet,
21
+ compile-cairo-1-casm,
22
+ compile-cairo-1-sierra,
23
+ compile-cairo-2-casm,
24
+ compile-cairo-2-sierra,
25
+ ]
26
+ name : Build Cairo programs
27
+ runs-on : ubuntu-22.04
28
+ steps :
29
+ - name : Checkout
30
+ uses : actions/checkout@v3
31
+ with :
32
+ fetch-depth : 0
33
+
34
+ - name : Fetch from cache
35
+ uses : actions/cache@v3
36
+ id : cache-programs
37
+ with :
38
+ path : |
39
+ cairo_programs/**/*.casm
40
+ cairo_programs/**/*.sierra
41
+ cairo_programs/**/*.json
42
+ starknet_programs/**/*.casm
43
+ starknet_programs/**/*.sierra
44
+ starknet_programs/**/*.json
45
+ !starknet_programs/raw_contract_classes/*
46
+ key : ${{ matrix.program-target }}-cache-${{ hashFiles('cairo_programs/**/*.cairo', 'starknet_programs/**/*.cairo') }}
47
+ restore-keys : ${{ matrix.program-target }}-cache-
48
+
49
+ # This is not pretty, but we need `make` to see the compiled programs are
50
+ # actually newer than the sources, otherwise it will try to rebuild them
51
+ - name : Restore timestamps
52
+ uses : chetan/git-restore-mtime-action@v1
53
+
54
+ - name : Python3 Build
55
+ if : ${{ steps.cache-programs.outputs.cache-hit != 'true' }}
56
+ uses : actions/setup-python@v4
57
+ with :
58
+ python-version : ' 3.9'
59
+ cache : ' pip'
60
+
61
+ - name : Install deps
62
+ if : ${{ steps.cache-programs.outputs.cache-hit != 'true' }}
63
+ run : make deps
64
+
65
+ - name : Build programs
66
+ if : ${{ steps.cache-programs.outputs.cache-hit != 'true' }}
67
+ run : make -j ${{ matrix.program-target }}
68
+
69
+ # NOTE: used to reduce the amount of cache steps we need in later jobs
70
+ # TODO: remove this cache once the workflow finishes
71
+ merge-caches :
72
+ name : Merge Cairo programs cache
73
+ runs-on : ubuntu-22.04
74
+ needs : build-programs
75
+ steps :
76
+ - name : Checkout
77
+ uses : actions/checkout@v3
78
+
79
+ - name : Fetch from cache (compile-cairo)
80
+ uses : actions/cache/restore@v3
81
+ id : cache-programs
82
+ with :
83
+ path : |
84
+ cairo_programs/**/*.casm
85
+ cairo_programs/**/*.sierra
86
+ cairo_programs/**/*.json
87
+ starknet_programs/**/*.casm
88
+ starknet_programs/**/*.sierra
89
+ starknet_programs/**/*.json
90
+ !starknet_programs/raw_contract_classes/*
91
+ key : compile-cairo-cache-${{ hashFiles('cairo_programs/**/*.cairo', 'starknet_programs/**/*.cairo') }}
92
+ fail-on-cache-miss : true
93
+
94
+ - name : Fetch from cache (compile-starknet)
95
+ uses : actions/cache/restore@v3
96
+ with :
97
+ path : |
98
+ cairo_programs/**/*.casm
99
+ cairo_programs/**/*.sierra
100
+ cairo_programs/**/*.json
101
+ starknet_programs/**/*.casm
102
+ starknet_programs/**/*.sierra
103
+ starknet_programs/**/*.json
104
+ !starknet_programs/raw_contract_classes/*
105
+ key : compile-starknet-cache-${{ hashFiles('cairo_programs/**/*.cairo', 'starknet_programs/**/*.cairo') }}
106
+ fail-on-cache-miss : true
107
+
108
+ - name : Fetch from cache (compile-cairo-1-casm)
109
+ uses : actions/cache/restore@v3
110
+ with :
111
+ path : |
112
+ cairo_programs/**/*.casm
113
+ cairo_programs/**/*.sierra
114
+ cairo_programs/**/*.json
115
+ starknet_programs/**/*.casm
116
+ starknet_programs/**/*.sierra
117
+ starknet_programs/**/*.json
118
+ !starknet_programs/raw_contract_classes/*
119
+ key : compile-cairo-1-casm-cache-${{ hashFiles('cairo_programs/**/*.cairo', 'starknet_programs/**/*.cairo') }}
120
+ fail-on-cache-miss : true
121
+
122
+ - name : Fetch from cache (compile-cairo-1-sierra)
123
+ uses : actions/cache/restore@v3
124
+ with :
125
+ path : |
126
+ cairo_programs/**/*.casm
127
+ cairo_programs/**/*.sierra
128
+ cairo_programs/**/*.json
129
+ starknet_programs/**/*.casm
130
+ starknet_programs/**/*.sierra
131
+ starknet_programs/**/*.json
132
+ !starknet_programs/raw_contract_classes/*
133
+ key : compile-cairo-1-sierra-cache-${{ hashFiles('cairo_programs/**/*.cairo', 'starknet_programs/**/*.cairo') }}
134
+ fail-on-cache-miss : true
135
+
136
+ - name : Fetch from cache (compile-cairo-2-casm)
137
+ uses : actions/cache/restore@v3
138
+ with :
139
+ path : |
140
+ cairo_programs/**/*.casm
141
+ cairo_programs/**/*.sierra
142
+ cairo_programs/**/*.json
143
+ starknet_programs/**/*.casm
144
+ starknet_programs/**/*.sierra
145
+ starknet_programs/**/*.json
146
+ !starknet_programs/raw_contract_classes/*
147
+ key : compile-cairo-2-casm-cache-${{ hashFiles('cairo_programs/**/*.cairo', 'starknet_programs/**/*.cairo') }}
148
+ fail-on-cache-miss : true
149
+
150
+ - name : Fetch from cache (compile-cairo-2-sierra)
151
+ uses : actions/cache/restore@v3
152
+ with :
153
+ path : |
154
+ cairo_programs/**/*.casm
155
+ cairo_programs/**/*.sierra
156
+ cairo_programs/**/*.json
157
+ starknet_programs/**/*.casm
158
+ starknet_programs/**/*.sierra
159
+ starknet_programs/**/*.json
160
+ !starknet_programs/raw_contract_classes/*
161
+ key : compile-cairo-2-sierra-cache-${{ hashFiles('cairo_programs/**/*.cairo', 'starknet_programs/**/*.cairo') }}
162
+ fail-on-cache-miss : true
163
+
164
+ - name : Fetch from cache (compile-cairo-2-sierra)
165
+ uses : actions/cache/restore@v3
166
+ with :
167
+ path : |
168
+ cairo_programs/**/*.casm
169
+ cairo_programs/**/*.sierra
170
+ cairo_programs/**/*.json
171
+ starknet_programs/**/*.casm
172
+ starknet_programs/**/*.sierra
173
+ starknet_programs/**/*.json
174
+ !starknet_programs/raw_contract_classes/*
175
+ key : compile-cairo-2-sierra-cache-${{ hashFiles('cairo_programs/**/*.cairo', 'starknet_programs/**/*.cairo') }}
176
+ fail-on-cache-miss : true
177
+
178
+ - name : Merge caches
179
+ uses : actions/cache/save@v3
180
+ with :
181
+ path : |
182
+ cairo_programs/**/*.casm
183
+ cairo_programs/**/*.sierra
184
+ cairo_programs/**/*.json
185
+ starknet_programs/**/*.casm
186
+ starknet_programs/**/*.sierra
187
+ starknet_programs/**/*.json
188
+ !starknet_programs/raw_contract_classes/*
189
+ key : all-programs-cache-${{ hashFiles('cairo_programs/**/*.cairo', 'starknet_programs/**/*.cairo') }}
190
+
15
191
build :
192
+ name : Build with release profile
193
+ needs : merge-caches
16
194
runs-on : ubuntu-22.04
17
195
steps :
18
196
- name : Install Rust
@@ -25,15 +203,26 @@ jobs:
25
203
cache-on-failure : true
26
204
- name : Checkout
27
205
uses : actions/checkout@v3
28
- - uses : actions/setup-python@v2
206
+ - name : Fetch programs
207
+ uses : actions/cache/restore@v3
29
208
with :
30
- python-version : ' 3.9'
31
- - name : Deps
32
- run : make deps
209
+ path : |
210
+ cairo_programs/**/*.casm
211
+ cairo_programs/**/*.sierra
212
+ cairo_programs/**/*.json
213
+ starknet_programs/**/*.casm
214
+ starknet_programs/**/*.sierra
215
+ starknet_programs/**/*.json
216
+ !starknet_programs/raw_contract_classes/*
217
+ key : all-programs-cache-${{ hashFiles('cairo_programs/**/*.cairo', 'starknet_programs/**/*.cairo') }}
218
+ fail-on-cache-miss : true
219
+
33
220
- name : Build
34
- run : make build
221
+ run : cargo build --release --workspace
35
222
36
- format :
223
+ lint :
224
+ name : Lint with fmt and clippy
225
+ needs : merge-caches
37
226
runs-on : ubuntu-22.04
38
227
steps :
39
228
- name : Install Rust
@@ -46,17 +235,32 @@ jobs:
46
235
cache-on-failure : true
47
236
- name : Checkout
48
237
uses : actions/checkout@v3
49
- - uses : actions/setup-python@v2
238
+ - name : Fetch programs
239
+ uses : actions/cache/restore@v3
50
240
with :
51
- python-version : ' 3.9'
52
- - name : Deps
53
- run : make deps
241
+ path : |
242
+ cairo_programs/**/*.casm
243
+ cairo_programs/**/*.sierra
244
+ cairo_programs/**/*.json
245
+ starknet_programs/**/*.casm
246
+ starknet_programs/**/*.sierra
247
+ starknet_programs/**/*.json
248
+ !starknet_programs/raw_contract_classes/*
249
+ key : all-programs-cache-${{ hashFiles('cairo_programs/**/*.cairo', 'starknet_programs/**/*.cairo') }}
250
+ fail-on-cache-miss : true
251
+
54
252
- name : Format
55
253
run : cargo fmt --all -- --check
56
254
- name : Run clippy
57
- run : make clippy
255
+ run : cargo clippy --workspace --all-targets -- -D warnings
58
256
59
- test :
257
+ tests :
258
+ strategy :
259
+ fail-fast : false
260
+ matrix :
261
+ target : [ test-cairo-1, test-cairo-2, test-doctests ]
262
+ name : Run tests
263
+ needs : merge-caches
60
264
runs-on : ubuntu-22.04
61
265
steps :
62
266
- name : Install Rust
@@ -69,35 +273,88 @@ jobs:
69
273
cache-on-failure : true
70
274
- name : Checkout
71
275
uses : actions/checkout@v3
72
- - uses : actions/setup-python@v2
276
+
277
+ - name : Fetch programs
278
+ uses : actions/cache/restore@v3
73
279
with :
74
- python-version : ' 3.9'
75
- - name : Deps
76
- run : make deps
77
- - name : Run tests
78
- run : make test
79
- - name : Run doctests
80
- run : cargo test --workspace --doc
280
+ path : |
281
+ cairo_programs/**/*.casm
282
+ cairo_programs/**/*.sierra
283
+ cairo_programs/**/*.json
284
+ starknet_programs/**/*.casm
285
+ starknet_programs/**/*.sierra
286
+ starknet_programs/**/*.json
287
+ !starknet_programs/raw_contract_classes/*
288
+ key : all-programs-cache-${{ hashFiles('cairo_programs/**/*.cairo', 'starknet_programs/**/*.cairo') }}
289
+ fail-on-cache-miss : true
290
+
291
+ - name : Install testing tools
292
+ # TODO: remove `if` when nextest adds doctests support
293
+ if : ${{ matrix.target != 'test-doctests' }}
294
+ uses : taiki-e/install-action@v2
295
+ with :
296
+ tool : cargo-nextest
297
+
298
+ - name : Run tests (${{ matrix.target }})
299
+ run : make ${{ matrix.target }}
81
300
82
- # 28.06.2023: This job uses unmaintained actions-rs because dtolnay is giving linking errors with nightly
83
301
coverage :
302
+ needs : merge-caches
303
+ name : Generate and upload coverage report
84
304
runs-on : ubuntu-22.04
85
305
steps :
86
306
- name : Checkout
87
307
uses : actions/checkout@v3
88
- - uses : actions/setup-python@v2
89
- with :
90
- python-version : ' 3.9'
91
- - name : Deps
92
- run : make deps
93
308
- name : Install Rust
94
- uses : actions-rs/ toolchain@v1
309
+ uses : dtolnay/rust- toolchain@nightly
95
310
with :
96
- toolchain : nightly
97
- override : true
98
- components : rustfmt, clippy
99
- - name : Coverage
100
- run : make coverage
311
+ toolchain : ${{ env.RUST_TOOLCHAIN }}
312
+
313
+ - name : Set nightly as default
314
+ run : rustup default nightly
315
+
316
+ - name : Install testing tools
317
+ uses : taiki-e/install-action@v2
318
+ with :
319
+ tool : cargo-nextest,cargo-llvm-cov
320
+
321
+ - uses : Swatinem/rust-cache@v2
322
+ with :
323
+ cache-on-failure : true
324
+
325
+ - name : Cache coverage report
326
+ id : restore-report
327
+ uses : actions/cache/restore@v3
328
+ with :
329
+ path : lcov.info
330
+ key : coverage-cache-${{ github.sha }}
331
+
332
+ - name : Fetch programs
333
+ if : steps.restore-report.outputs.cache-hit != 'true'
334
+ uses : actions/cache/restore@v3
335
+ with :
336
+ path : |
337
+ cairo_programs/**/*.casm
338
+ cairo_programs/**/*.sierra
339
+ cairo_programs/**/*.json
340
+ starknet_programs/**/*.casm
341
+ starknet_programs/**/*.sierra
342
+ starknet_programs/**/*.json
343
+ !starknet_programs/raw_contract_classes/*
344
+ key : all-programs-cache-${{ hashFiles('cairo_programs/**/*.cairo', 'starknet_programs/**/*.cairo') }}
345
+ fail-on-cache-miss : true
346
+
347
+ - name : Generate coverage report
348
+ if : steps.restore-report.outputs.cache-hit != 'true'
349
+ run : make coverage-report
350
+
351
+ - name : Save coverage report
352
+ if : steps.restore-report.outputs.cache-hit != 'true'
353
+ uses : actions/cache/save@v3
354
+ with :
355
+ path : lcov.info
356
+ key : coverage-cache-${{ github.sha }}
357
+
101
358
- name : Upload coverage to codecov.io
102
359
uses : codecov/codecov-action@v3
103
360
with :
0 commit comments