Skip to content
This repository was archived by the owner on Jul 22, 2024. It is now read-only.

Commit 0511707

Browse files
authored
ci: split test running into multiple jobs (#852)
* Split test running into multiple jobs * Remove old comment, and add NOTE + TODO * Add requirements.txt * Try removing pinned sub-dependencies * Rename some jobs * Add cache fetch in coverage job * Add swatinem cache * Use llvm-cov nextest * Save cache correctly
1 parent 3bbcf53 commit 0511707

File tree

3 files changed

+319
-47
lines changed

3 files changed

+319
-47
lines changed

.github/workflows/rust-tests.yml

+289-32
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,185 @@ env:
1212
RUST_TOOLCHAIN: 1.70.0
1313

1414
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+
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

Comments
 (0)