@@ -3,13 +3,40 @@ name: CI
3
3
on : [push, pull_request]
4
4
5
5
jobs :
6
+ metadata :
7
+ name : Extract crate metadata
8
+ runs-on : ubuntu-latest
9
+ steps :
10
+ - uses : actions/checkout@v4
11
+ - uses : dtolnay/rust-toolchain@stable
12
+
13
+ - name : Extract crate metadata
14
+ id : metadata
15
+ run : |
16
+ cargo metadata --no-deps --format-version=1 \
17
+ | jq -r '.packages[0]
18
+ | {name, version, rust_version}
19
+ | to_entries
20
+ | map("\(.key)=\(.value)")
21
+ | join("\n")' \
22
+ | tee -a $GITHUB_OUTPUT
23
+ outputs :
24
+ name : ${{ steps.metadata.outputs.name }}
25
+ version : ${{ steps.metadata.outputs.version }}
26
+ rust_version : ${{ steps.metadata.outputs.rust_version }}
27
+
6
28
ci :
29
+ needs : [metadata]
7
30
runs-on : ubuntu-latest
8
31
strategy :
9
32
fail-fast : false
10
33
matrix :
11
- rust-toolchain : [nightly]
34
+ rust-toolchain : [nightly, "${{ needs.metadata.outputs.rust_version }}" ]
12
35
targets : [x86_64-unknown-linux-gnu, x86_64-unknown-none, riscv64gc-unknown-none-elf, aarch64-unknown-none-softfloat]
36
+ exclude :
37
+ # component 'rust-std' for target 'x86_64-unknown-none' is unavailable for channel '1.57'
38
+ - rust-toolchain : " ${{ needs.metadata.outputs.rust_version }}"
39
+ targets : x86_64-unknown-none
13
40
steps :
14
41
- uses : actions/checkout@v4
15
42
- uses : dtolnay/rust-toolchain@nightly
26
53
- name : Build
27
54
run : cargo build --target ${{ matrix.targets }} --all-features
28
55
- name : Unit test
29
- if : ${{ matrix.targets == 'x86_64-unknown-linux-gnu' }}
56
+ if : ${{ matrix.targets == 'x86_64-unknown-linux-gnu' && matrix.rust-toolchain != '${{ needs.metadata.outputs.rust_version }}' }}
30
57
run : cargo test --target ${{ matrix.targets }} -- --nocapture
31
58
32
59
doc :
0 commit comments