11name : CI
2- on : [push, pull_request]
2+ on :
3+ push : { branches: [master] }
4+ pull_request :
5+
6+ concurrency :
7+ # Make sure that new pushes cancel running jobs
8+ group : ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
9+ cancel-in-progress : true
310
411env :
12+ CARGO_TERM_COLOR : always
513 RUSTDOCFLAGS : -Dwarnings
614 RUSTFLAGS : -Dwarnings
15+ RUST_BACKTRACE : full
716
817jobs :
918 test :
10- name : Test
11- runs-on : ${{ matrix.os }}
19+ name : Build and test
20+ timeout-minutes : 60
1221 strategy :
1322 fail-fast : false
1423 matrix :
1524 include :
1625 - target : aarch64-apple-darwin
1726 os : macos-latest
18- rust : nightly
1927 - target : aarch64-unknown-linux-gnu
20- os : ubuntu-latest
21- rust : nightly
28+ os : ubuntu-24.04-arm
2229 - target : aarch64-pc-windows-msvc
23- os : windows-latest
24- rust : nightly
30+ os : windows-2025
2531 test_verbatim : 1
26- no_std : 1
32+ build_only : 1
2733 - target : arm-unknown-linux-gnueabi
28- os : ubuntu-latest
29- rust : nightly
34+ os : ubuntu-24.04
3035 - target : arm-unknown-linux-gnueabihf
31- os : ubuntu-latest
32- rust : nightly
36+ os : ubuntu-24.04
37+ - target : armv7-unknown-linux-gnueabihf
38+ os : ubuntu-24.04
3339 - target : i586-unknown-linux-gnu
34- os : ubuntu-latest
35- rust : nightly
40+ os : ubuntu-24.04
3641 - target : i686-unknown-linux-gnu
37- os : ubuntu-latest
38- rust : nightly
42+ os : ubuntu-24.04
3943 - target : loongarch64-unknown-linux-gnu
40- os : ubuntu-latest
41- rust : nightly
42- # MIPS targets disabled since they are dropped to tier 3.
43- # See https://github.com/rust-lang/compiler-team/issues/648
44- # - target: mips-unknown-linux-gnu
45- # os: ubuntu-latest
46- # rust: nightly
47- # - target: mips64-unknown-linux-gnuabi64
48- # os: ubuntu-latest
49- # rust: nightly
50- # - target: mips64el-unknown-linux-gnuabi64
51- # os: ubuntu-latest
52- # rust: nightly
53- # - target: mipsel-unknown-linux-gnu
54- # os: ubuntu-latest
55- # rust: nightly
44+ os : ubuntu-24.04
5645 - target : powerpc-unknown-linux-gnu
57- os : ubuntu-latest
58- rust : nightly
46+ os : ubuntu-24.04
5947 - target : powerpc64-unknown-linux-gnu
60- os : ubuntu-latest
61- rust : nightly
48+ os : ubuntu-24.04
6249 - target : powerpc64le-unknown-linux-gnu
63- os : ubuntu-latest
64- rust : nightly
50+ os : ubuntu-24.04
6551 - target : riscv64gc-unknown-linux-gnu
66- os : ubuntu-latest
67- rust : nightly
52+ os : ubuntu-24.04
6853 - target : thumbv6m-none-eabi
69- os : ubuntu-latest
70- rust : nightly
54+ os : ubuntu-24.04
7155 - target : thumbv7em-none-eabi
72- os : ubuntu-latest
73- rust : nightly
56+ os : ubuntu-24.04
7457 - target : thumbv7em-none-eabihf
75- os : ubuntu-latest
76- rust : nightly
58+ os : ubuntu-24.04
7759 - target : thumbv7m-none-eabi
78- os : ubuntu-latest
79- rust : nightly
60+ os : ubuntu-24.04
8061 - target : wasm32-unknown-unknown
81- os : ubuntu-latest
82- rust : nightly
62+ os : ubuntu-24.04
8363 - target : x86_64-unknown-linux-gnu
84- os : ubuntu-latest
85- rust : nightly
64+ os : ubuntu-24.04
8665 - target : x86_64-apple-darwin
8766 os : macos-13
88- rust : nightly
8967 - target : i686-pc-windows-msvc
90- os : windows-latest
91- rust : nightly
68+ os : windows-2025
9269 test_verbatim : 1
9370 - target : x86_64-pc-windows-msvc
94- os : windows-latest
95- rust : nightly
71+ os : windows-2025
9672 test_verbatim : 1
9773 - target : i686-pc-windows-gnu
98- os : windows-latest
99- rust : nightly-i686-gnu
74+ os : windows-2025
10075 - target : x86_64-pc-windows-gnu
101- os : windows-latest
102- rust : nightly-x86_64-gnu
76+ os : windows-2025
77+ channel : nightly-x86_64-gnu
78+ runs-on : ${{ matrix.os }}
79+ env :
80+ BUILD_ONLY : ${{ matrix.build_only }}
81+ TEST_VERBATIM : ${{ matrix.test_verbatim }}
10382 steps :
10483 - name : Print runner information
10584 run : uname -a
10685 - uses : actions/checkout@v4
10786 with :
10887 submodules : true
10988 - name : Install Rust (rustup)
110- run : rustup update ${{ matrix.rust }} --no-self-update && rustup default ${{ matrix.rust }}
11189 shell : bash
112- - run : rustup target add ${{ matrix.target }}
113- - run : rustup component add llvm-tools-preview
90+ run : |
91+ channel="nightly"
92+ # Account for channels that have required components (MinGW)
93+ [ -n "${{ matrix.channel }}" ] && channel="${{ matrix.channel }}"
94+ rustup update "$channel" --no-self-update
95+ rustup default "$channel"
96+ rustup target add "${{ matrix.target }}"
97+ rustup component add llvm-tools-preview
11498 - uses : Swatinem/rust-cache@v2
11599 with :
116100 key : ${{ matrix.target }}
117101 - name : Cache Docker layers
118102 uses : actions/cache@v4
119- if : matrix.os == 'ubuntu-latest'
103+ if : matrix.os == 'ubuntu-24.04'
104+ with :
105+ path : /tmp/.buildx-cache
106+ key : ${{ matrix.target }}-buildx-${{ github.sha }}
107+ restore-keys : ${{ matrix.target }}-buildx-
108+ - name : Cache Docker layers
109+ uses : actions/cache@v4
110+ if : matrix.os == 'ubuntu-24.04'
120111 with :
121112 path : /tmp/.buildx-cache
122113 key : ${{ matrix.target }}-buildx-${{ github.sha }}
@@ -136,33 +127,49 @@ jobs:
136127 shell : bash
137128
138129 # Non-linux tests just use our raw script
139- - run : ./ci/run.sh ${{ matrix.target }}
140- if : matrix.os != 'ubuntu-latest'
130+ - name : Run locally
131+ if : matrix.os != 'ubuntu-24.04' || contains(matrix.target, 'wasm')
141132 shell : bash
142- env :
143- NO_STD : ${{ matrix.no_std }}
144- TEST_VERBATIM : ${{ matrix.test_verbatim }}
133+ run : ./ci/run.sh ${{ matrix.target }}
145134
146135 # Configure buildx to use Docker layer caching
147136 - uses : docker/setup-buildx-action@v3
148- if : matrix.os == 'ubuntu-latest '
137+ if : matrix.os == 'ubuntu-24.04 '
149138
150139 # Otherwise we use our docker containers to run builds
151- - run : cargo generate-lockfile && ./ci/run-docker.sh ${{ matrix.target }}
152- if : matrix.os == 'ubuntu-latest'
140+ - name : Run in Docker
141+ if : matrix.os == 'ubuntu-24.04' && !contains(matrix.target, 'wasm')
142+ run : cargo generate-lockfile && ./ci/run-docker.sh ${{ matrix.target }}
153143
154144 # Workaround to keep Docker cache smaller
155145 # https://github.com/docker/build-push-action/issues/252
156146 # https://github.com/moby/buildkit/issues/1896
157147 - name : Move Docker cache
158- if : matrix.os == 'ubuntu-latest '
148+ if : matrix.os == 'ubuntu-24.04 '
159149 run : |
160150 rm -rf /tmp/.buildx-cache
161151 mv /tmp/.buildx-cache-new /tmp/.buildx-cache
162152
153+ clippy :
154+ name : Clippy
155+ runs-on : ubuntu-24.04
156+ timeout-minutes : 10
157+ steps :
158+ - uses : actions/checkout@v4
159+ with :
160+ submodules : true
161+ # Unlike rustfmt, stable clippy does not work on code with nightly features.
162+ - name : Install nightly `clippy`
163+ run : |
164+ rustup set profile minimal
165+ rustup default nightly
166+ rustup component add clippy
167+ - uses : Swatinem/rust-cache@v2
168+ - run : cargo clippy -- -D clippy::all
169+
163170 miri :
164171 name : Miri
165- runs-on : ubuntu-latest
172+ runs-on : ubuntu-24.04
166173 steps :
167174 - uses : actions/checkout@v4
168175 with :
@@ -177,7 +184,7 @@ jobs:
177184
178185 rustfmt :
179186 name : Rustfmt
180- runs-on : ubuntu-latest
187+ runs-on : ubuntu-24.04
181188 steps :
182189 - uses : actions/checkout@v4
183190 with :
@@ -186,27 +193,13 @@ jobs:
186193 run : rustup set profile minimal && rustup default stable && rustup component add rustfmt
187194 - run : cargo fmt -- --check
188195
189- clippy :
190- name : Clippy
191- runs-on : ubuntu-latest
192- steps :
193- - uses : actions/checkout@v4
194- with :
195- submodules : true
196- # Unlike rustfmt, stable clippy does not work on code with nightly features.
197- - name : Install nightly `clippy`
198- run : |
199- rustup set profile minimal && rustup default nightly && rustup component add clippy
200- - uses : Swatinem/rust-cache@v2
201- - run : cargo clippy -- -D clippy::all
202-
203196 success :
204197 needs :
205198 - test
206199 - rustfmt
207200 - clippy
208201 - miri
209- runs-on : ubuntu-latest
202+ runs-on : ubuntu-24.04
210203 # GitHub branch protection is exceedingly silly and treats "jobs skipped because a dependency
211204 # failed" as success. So we have to do some contortions to ensure the job fails if any of its
212205 # dependencies fails.
0 commit comments