6767 fail-fast : false
6868 matrix :
6969 rust :
70+ - name : MSRV
71+ toolchain : stable
72+ nightly : false
7073 - name : Stable
7174 toolchain : stable
7275 nightly : false
@@ -79,19 +82,34 @@ jobs:
7982 os : [ubuntu-latest, windows-latest, macOS-latest]
8083 steps :
8184 - uses : actions/checkout@v4
85+ # on non-msrv runs, just download rust
8286 - uses : dtolnay/rust-toolchain@master
8387 with :
8488 toolchain : ${{matrix.rust.toolchain}}
8589 id : rust-toolchain
90+ if : matrix.rust.name != 'MSRV'
91+ # on msrv runs, use stable to generate Cargo.lock then downgrade
92+ - uses : dtolnay/rust-toolchain@stable
93+ if : matrix.rust.name == 'MSRV'
94+ - run : cargo --config 'resolver.incompatible-rust-versions="fallback"' update
95+ - run : echo "rust-version=$(tomlq -r '.workspace.package."rust-version"' Cargo.toml)" >>$GITHUB_OUTPUT
96+ id : msrv
97+ if : matrix.rust.name == 'MSRV'
98+ - uses : dtolnay/rust-toolchain@master
99+ with :
100+ toolchain : ${{steps.msrv.outputs.rust-version}}
101+ id : rust-toolchain
102+ if : matrix.rust.name == 'MSRV'
103+ # the rest is independent of whether msrv is used
86104 - uses : actions/cache@v4
87105 with :
88106 path : |
89107 ~/.cargo/git
90108 ~/.cargo/registry
91109 target
92- key : " ${{matrix.rust.toolchain}} on ${{ runner.os}} Rust ${{steps.rust-toolchain.outputs.cachekey}}"
93- - run : cargo test --lib
94- - run : cargo test --doc
110+ key : " ${{runner.os}} Rust ${{steps.rust-toolchain.outputs.cachekey}}"
111+ - run : cargo test --lib --locked
112+ - run : cargo test --doc --locked
95113
96114 # this tests that all integration tests are successful
97115 integration_tests :
0 commit comments