1212 RUST_TOOLCHAIN : 1.70.0
1313
1414jobs :
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+
15191 build :
192+ name : Build with release profile
193+ needs : merge-caches
16194 runs-on : ubuntu-22.04
17195 steps :
18196 - name : Install Rust
@@ -25,15 +203,26 @@ jobs:
25203 cache-on-failure : true
26204 - name : Checkout
27205 uses : actions/checkout@v3
28- - uses : actions/setup-python@v2
206+ - name : Fetch programs
207+ uses : actions/cache/restore@v3
29208 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+
33220 - name : Build
34- run : make build
221+ run : cargo build --release --workspace
35222
36- format :
223+ lint :
224+ name : Lint with fmt and clippy
225+ needs : merge-caches
37226 runs-on : ubuntu-22.04
38227 steps :
39228 - name : Install Rust
@@ -46,17 +235,32 @@ jobs:
46235 cache-on-failure : true
47236 - name : Checkout
48237 uses : actions/checkout@v3
49- - uses : actions/setup-python@v2
238+ - name : Fetch programs
239+ uses : actions/cache/restore@v3
50240 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+
54252 - name : Format
55253 run : cargo fmt --all -- --check
56254 - name : Run clippy
57- run : make clippy
255+ run : cargo clippy --workspace --all-targets -- -D warnings
58256
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
60264 runs-on : ubuntu-22.04
61265 steps :
62266 - name : Install Rust
@@ -69,35 +273,88 @@ jobs:
69273 cache-on-failure : true
70274 - name : Checkout
71275 uses : actions/checkout@v3
72- - uses : actions/setup-python@v2
276+
277+ - name : Fetch programs
278+ uses : actions/cache/restore@v3
73279 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 }}
81300
82- # 28.06.2023: This job uses unmaintained actions-rs because dtolnay is giving linking errors with nightly
83301 coverage :
302+ needs : merge-caches
303+ name : Generate and upload coverage report
84304 runs-on : ubuntu-22.04
85305 steps :
86306 - name : Checkout
87307 uses : actions/checkout@v3
88- - uses : actions/setup-python@v2
89- with :
90- python-version : ' 3.9'
91- - name : Deps
92- run : make deps
93308 - name : Install Rust
94- uses : actions-rs/ toolchain@v1
309+ uses : dtolnay/rust- toolchain@nightly
95310 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+
101358 - name : Upload coverage to codecov.io
102359 uses : codecov/codecov-action@v3
103360 with :
0 commit comments