@@ -101,13 +101,19 @@ jobs:
101101 env :
102102 RUST_BACKTRACE : full
103103 name : Run rust tests
104+ needs : lalrpop
104105 runs-on : ${{ matrix.os }}
105106 strategy :
106107 matrix :
107108 os : [macos-latest, ubuntu-latest, windows-latest]
108109 fail-fast : false
109110 steps :
110111 - uses : actions/checkout@v2
112+ - name : Cache generated parser
113+ uses : actions/cache@v2
114+ with :
115+ path : parser/python.rs
116+ key : lalrpop-${{ hashFiles('parser/python.lalrpop') }}
111117 - uses : dtolnay/rust-toolchain@stable
112118 - name : Set up the Windows environment
113119 shell : bash
@@ -143,9 +149,15 @@ jobs:
143149
144150 exotic_targets :
145151 name : Ensure compilation on various targets
152+ needs : lalrpop
146153 runs-on : ubuntu-latest
147154 steps :
148155 - uses : actions/checkout@v2
156+ - name : Cache generated parser
157+ uses : actions/cache@v2
158+ with :
159+ path : parser/python.rs
160+ key : lalrpop-${{ hashFiles('parser/python.lalrpop') }}
149161
150162 - uses : dtolnay/rust-toolchain@stable
151163 with :
@@ -200,6 +212,7 @@ jobs:
200212 command : check
201213
202214 snippets_cpython :
215+ needs : lalrpop
203216 env :
204217 RUST_BACKTRACE : full
205218 name : Run snippets and cpython tests
@@ -210,6 +223,12 @@ jobs:
210223 fail-fast : false
211224 steps :
212225 - uses : actions/checkout@v2
226+ - name : Cache generated parser
227+ uses : actions/cache@v2
228+ with :
229+ path : parser/python.rs
230+ key : lalrpop-${{ hashFiles('parser/python.lalrpop') }}
231+
213232 - uses : dtolnay/rust-toolchain@stable
214233 - uses : actions/setup-python@v2
215234 with :
@@ -258,11 +277,45 @@ jobs:
258277 mkdir site-packages
259278 target/release/rustpython --install-pip ensurepip --user
260279
280+ lalrpop :
281+ name : Generate parser with lalrpop
282+ strategy :
283+ matrix :
284+ os : [ubuntu-latest, windows-latest]
285+ runs-on : ${{ matrix.os }}
286+ steps :
287+ - uses : actions/checkout@v2
288+ - name : Cache generated parser
289+ uses : actions/cache@v2
290+ with :
291+ path : parser/python.rs
292+ key : lalrpop-${{ hashFiles('parser/python.lalrpop') }}
293+ - name : Check if cached generated parser exists
294+ id : generated_parser
295+ uses : andstor/file-existence-action@v1
296+ with :
297+ files : " parser/python.rs"
298+ - name : Install lalrpop
299+ if : steps.generated_parser.outputs.files_exists == 'false'
300+ uses : baptiste0928/cargo-install@v1
301+ with :
302+ crate : lalrpop
303+ version : " 0.19.8"
304+ - name : Run lalpop
305+ if : steps.generated_parser.outputs.files_exists == 'false'
306+ run : lalrpop parser/python.lalrpop
307+
261308 lint :
262309 name : Check Rust code with rustfmt and clippy
310+ needs : lalrpop
263311 runs-on : ubuntu-latest
264312 steps :
265313 - uses : actions/checkout@v2
314+ - name : Cache generated parser
315+ uses : actions/cache@v2
316+ with :
317+ path : parser/python.rs
318+ key : lalrpop-${{ hashFiles('parser/python.lalrpop') }}
266319 - uses : dtolnay/rust-toolchain@stable
267320 with :
268321 components : rustfmt, clippy
@@ -284,11 +337,18 @@ jobs:
284337 - name : check wasm code with prettier
285338 # prettier doesn't handle ignore files very well: https://github.com/prettier/prettier/issues/8506
286339 run : cd wasm && git ls-files -z | xargs -0 prettier --check -u
340+
287341 miri :
288342 name : Run tests under miri
343+ needs : lalrpop
289344 runs-on : ubuntu-latest
290345 steps :
291346 - uses : actions/checkout@v2
347+ - name : Cache generated parser
348+ uses : actions/cache@v2
349+ with :
350+ path : parser/python.rs
351+ key : lalrpop-${{ hashFiles('parser/python.lalrpop') }}
292352 - uses : dtolnay/rust-toolchain@master
293353 with :
294354 toolchain : nightly
@@ -304,6 +364,11 @@ jobs:
304364 runs-on : ubuntu-latest
305365 steps :
306366 - uses : actions/checkout@v2
367+ - name : Cache generated parser
368+ uses : actions/cache@v2
369+ with :
370+ path : parser/python.rs
371+ key : lalrpop-${{ hashFiles('parser/python.lalrpop') }}
307372 - uses : dtolnay/rust-toolchain@stable
308373 - uses : Swatinem/rust-cache@v1
309374 - name : install wasm-pack
@@ -343,9 +408,15 @@ jobs:
343408
344409 wasm-wasi :
345410 name : Run snippets and cpython tests on wasm-wasi
411+ needs : lalrpop
346412 runs-on : ubuntu-latest
347413 steps :
348414 - uses : actions/checkout@v2
415+ - name : Cache generated parser
416+ uses : actions/cache@v2
417+ with :
418+ path : parser/python.rs
419+ key : lalrpop-${{ hashFiles('parser/python.lalrpop') }}
349420 - uses : dtolnay/rust-toolchain@stable
350421 with :
351422 target : wasm32-wasi
0 commit comments