@@ -166,12 +166,18 @@ jobs:
166
166
. "$HOME/.cargo/env"
167
167
eatmydata rustup toolchain install ${{ inputs.rust-toolchain-name }} --allow-downgrade --profile minimal
168
168
eatmydata rustup default ${{ inputs.rust-toolchain-name }}
169
+ eatmydata rustup target add ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }}
169
170
if [ "${{ inputs.flavor }}" = "RustFmt" ]; then
170
171
eatmydata rustup component add rustfmt
171
172
elif [ "${{ inputs.flavor }}" = "doc" ]; then
172
173
/bin/true
173
- elif [ "${{ inputs.flavor }}" = "dev" ] || [ "${{ inputs.flavor }}" = "release" ]; then
174
+ elif [ "${{ inputs.flavor }}" = "dev" ] || [ "${{ inputs.flavor }}" = "release" ] || [ "${{ inputs.flavor }}" = "Miri" ]; then
175
+ if [ "${{ inputs.flavor }}" = "Miri" ]; then
176
+ eatmydata rustup component add miri
177
+ eatmydata rustup component add rust-src
178
+ else
174
179
eatmydata rustup component add clippy
180
+ fi
175
181
eatmydata apt install \
176
182
clang-${{ inputs.distro-LLVM }} \
177
183
lld-${{ inputs.distro-LLVM }} \
@@ -191,13 +197,12 @@ jobs:
191
197
else
192
198
exit 1
193
199
fi
194
- - name : Install necessary packages for cross-compilation
200
+ - name : Install necessary system packages for cross-compilation
195
201
timeout-minutes : 1
196
202
if : (inputs.flavor == 'dev' || inputs.flavor == 'release') && inputs.builder-host != inputs.builder-target
197
203
run : |
198
204
set -xe
199
205
. "$HOME/.cargo/env"
200
-
201
206
eatmydata apt install \
202
207
gcc-${{ env.GCC_ARCH }}-linux-${{ env.ABI }} \
203
208
libc6-dev-${{ env.LIBC6_ARCH }}-cross \
@@ -207,7 +212,6 @@ jobs:
207
212
ln -s /usr/local/bin/clang /usr/local/bin/${{ inputs.builder-target }}-unknown-linux-${{ env.ABI }}-clang
208
213
ln -s /usr/local/bin/clang++ /usr/local/bin/${{ inputs.builder-target }}-unknown-linux-${{ env.ABI }}-clang++
209
214
ln -s /usr/local/bin/ld /usr/local/bin/${{ inputs.builder-target }}-unknown-linux-${{ env.ABI }}-ld
210
- rustup target add ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }}
211
215
LINKER="${{ inputs.builder-target }}-unknown-linux-${{ env.ABI }}-clang"
212
216
if [ "${{ inputs.builder-target }}" = "powerpc64" ]; then
213
217
# LLD/clang does not support powerpc64 ELFv1 ABI
@@ -219,13 +223,20 @@ jobs:
219
223
runner = "qemu-${{ env.LIBC6_ARCH }} -L /usr/${{ env.GCC_ARCH }}-linux-${{ env.ABI }}"
220
224
EOT
221
225
- name : Install necessary packages for code coverage
222
- if : inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && (inputs.builder-host == inputs.builder-target || (env.ENDIANNESS == 'big' && inputs.builder-target != 's390x')) && (github.event_name == 'pull_request' || env.CODECOV_TOKEN_EXISTS == true)
226
+ if : inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && inputs.flavor != 'Miri' && (inputs.builder-host == inputs.builder-target || (env.ENDIANNESS == 'big' && inputs.builder-target != 's390x')) && (github.event_name == 'pull_request' || env.CODECOV_TOKEN_EXISTS == true)
223
227
timeout-minutes : 2
224
228
run : |
225
229
set -xe
226
230
. "$HOME/.cargo/env"
227
231
eatmydata rustup component add llvm-tools-preview
228
232
eatmydata cargo install cargo-llvm-cov
233
+ - name : Install cargo-nextest
234
+ if : inputs.flavor == 'Miri'
235
+ timeout-minutes : 3
236
+ run : |
237
+ set -xe
238
+ . "$HOME/.cargo/env"
239
+ eatmydata cargo install cargo-nextest
229
240
- name : Fetch/Checkout RawSpeed.RS git repo
230
241
timeout-minutes : 1
231
242
uses : actions/checkout@v4
@@ -267,39 +278,47 @@ jobs:
267
278
overwrite : true
268
279
- name : Run cargo check
269
280
timeout-minutes : 1
270
- if : inputs.flavor != 'RustFmt' && inputs.flavor != 'doc'
281
+ if : inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && inputs.flavor != 'Miri'
271
282
run : |
272
283
set -xe
273
284
. "$HOME/.cargo/env"
274
285
cd "$SRC_DIR"
275
286
cargo check --target ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }} --profile ${{ inputs.flavor }} --all-targets --all-features
276
287
- name : Run Clippy
277
288
timeout-minutes : 1
278
- if : inputs.flavor != 'RustFmt' && inputs.flavor != 'doc'
289
+ if : inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && inputs.flavor != 'Miri'
279
290
run : |
280
291
set -xe
281
292
. "$HOME/.cargo/env"
282
293
cd "$SRC_DIR"
283
294
cargo clippy --target ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }} --profile ${{ inputs.flavor }} --all-targets --all-features
284
295
- name : Build
285
296
timeout-minutes : 1
286
- if : inputs.flavor != 'RustFmt' && inputs.flavor != 'doc'
297
+ if : inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && inputs.flavor != 'Miri'
287
298
run : |
288
299
set -xe
289
300
. "$HOME/.cargo/env"
290
301
cd "$SRC_DIR"
291
302
cargo build --target ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }} --profile ${{ inputs.flavor }}
292
303
- name : Run tests
293
304
timeout-minutes : 1
294
- if : inputs.flavor != 'RustFmt' && inputs.flavor != 'doc'
305
+ if : inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && inputs.flavor != 'Miri'
295
306
run : |
296
307
set -xe
297
308
. "$HOME/.cargo/env"
298
309
cd "$SRC_DIR"
299
310
cargo test --target ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }} --profile ${{ inputs.flavor }}
311
+ - name : Run tests under Miri (nightly toolchain only)
312
+ timeout-minutes : 60
313
+ if : inputs.rust-toolchain-name == 'nightly' && inputs.flavor == 'Miri'
314
+ run : |
315
+ set -xe
316
+ . "$HOME/.cargo/env"
317
+ cd "$SRC_DIR"
318
+ cargo miri nextest run --target ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }}
300
319
- name : Run tests to collect code coverage
301
320
timeout-minutes : 1
302
- if : inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && (inputs.builder-host == inputs.builder-target || (env.ENDIANNESS == 'big' && inputs.builder-target != 's390x')) && (github.event_name == 'pull_request' || env.CODECOV_TOKEN_EXISTS == true)
321
+ if : inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && inputs.flavor != 'Miri' && (inputs.builder-host == inputs.builder-target || (env.ENDIANNESS == 'big' && inputs.builder-target != 's390x')) && (github.event_name == 'pull_request' || env.CODECOV_TOKEN_EXISTS == true)
303
322
env :
304
323
RUSTFLAGS : " -C instrument-coverage"
305
324
run : |
@@ -310,15 +329,15 @@ jobs:
310
329
cargo llvm-cov --no-report --target ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }} --profile ${{ inputs.flavor }}
311
330
- name : Aggregate code coverage
312
331
timeout-minutes : 1
313
- if : inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && (inputs.builder-host == inputs.builder-target || (env.ENDIANNESS == 'big' && inputs.builder-target != 's390x')) && (github.event_name == 'pull_request' || env.CODECOV_TOKEN_EXISTS == true)
332
+ if : inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && inputs.flavor != 'Miri' && (inputs.builder-host == inputs.builder-target || (env.ENDIANNESS == 'big' && inputs.builder-target != 's390x')) && (github.event_name == 'pull_request' || env.CODECOV_TOKEN_EXISTS == true)
314
333
run : |
315
334
set -xe
316
335
. "$HOME/.cargo/env"
317
336
cd "$SRC_DIR"
318
337
cargo llvm-cov report --codecov --output-path $SRC_DIR/codecov.json --target ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }} --profile ${{ inputs.flavor }}
319
338
- name : Upload coverage reports to Codecov
320
339
timeout-minutes : 1
321
- if : inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && (inputs.builder-host == inputs.builder-target || (env.ENDIANNESS == 'big' && inputs.builder-target != 's390x')) && (github.event_name == 'pull_request' || env.CODECOV_TOKEN_EXISTS == true)
340
+ if : inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && inputs.flavor != 'Miri' && (inputs.builder-host == inputs.builder-target || (env.ENDIANNESS == 'big' && inputs.builder-target != 's390x')) && (github.event_name == 'pull_request' || env.CODECOV_TOKEN_EXISTS == true)
322
341
uses : codecov/codecov-action@v5
323
342
env :
324
343
OS : ${{ inputs.os }}
0 commit comments