@@ -35,11 +35,15 @@ jobs:
3535
3636 docs :
3737 name : Documentation
38+ needs : build
3839 runs-on : ubuntu-latest
3940 steps :
4041 - uses : actions/checkout@v6
4142 - uses : dtolnay/rust-toolchain@stable
4243 - uses : Swatinem/rust-cache@v2
44+ with :
45+ shared-key : " rust-cache-ubuntu-latest"
46+ save-if : false
4347 - name : Build documentation
4448 env :
4549 RUSTDOCFLAGS : -D warnings
5963 - name : Check all crates are assigned to test groups
6064 run : python .github/scripts/ci_config.py verify-groups
6165
66+ # Build job compiles all dependencies first, populating the cache for test jobs
67+ build :
68+ name : " build (${{ matrix.os }})"
69+ needs : verify-execution
70+ runs-on : ${{ matrix.os }}
71+ strategy :
72+ fail-fast : false
73+ matrix :
74+ os : [ubuntu-latest, ubuntu-22.04-arm, macos-latest, windows-latest]
75+ steps :
76+ - uses : actions/checkout@v6
77+ - uses : dtolnay/rust-toolchain@stable
78+ - uses : Swatinem/rust-cache@v2
79+ with :
80+ shared-key : " rust-cache-${{ matrix.os }}"
81+ cache-on-failure : true
82+ - name : Build workspace (populate cache)
83+ run : cargo build --workspace --all-targets --all-features
84+ if : matrix.os != 'windows-latest'
85+ - name : Build workspace (Windows, exclude dash-fuzz)
86+ run : cargo build --workspace --all-targets --all-features --exclude dash-fuzz
87+ if : matrix.os == 'windows-latest'
88+
6289 test :
6390 name : " test: ${{ matrix.group }} (${{ matrix.os }})"
64- needs : verify-execution
91+ needs : build
6592 runs-on : ${{ matrix.os }}
6693 strategy :
6794 fail-fast : false
73100 - uses : dtolnay/rust-toolchain@stable
74101 - uses : Swatinem/rust-cache@v2
75102 with :
76- shared-key : " rust-cache-${{ matrix.os }}-${{ matrix.group }}"
103+ shared-key : " rust-cache-${{ matrix.os }}"
104+ save-if : false
77105 - uses : actions/setup-python@v5
78106 with :
79107 python-version : " 3.12"
@@ -85,11 +113,15 @@ jobs:
85113
86114 no-std :
87115 name : No-std Checks
116+ needs : build
88117 runs-on : ubuntu-latest
89118 steps :
90119 - uses : actions/checkout@v6
91120 - uses : dtolnay/rust-toolchain@stable
92121 - uses : Swatinem/rust-cache@v2
122+ with :
123+ shared-key : " rust-cache-ubuntu-latest"
124+ save-if : false
93125 - uses : actions/setup-python@v5
94126 with :
95127 python-version : " 3.12"
0 commit comments