43
43
env :
44
44
DEBIAN_FRONTEND : noninteractive
45
45
RUSTFLAGS : " -Dwarnings"
46
+ WITH_MIRI : ${{ inputs.rust-toolchain-name == 'nightly' && inputs.flavor == 'dev' && inputs.builder-target != 'riscv64' }}
46
47
SRC_DIR : ${{ github.workspace }}/rawspeed.rs
47
48
CODECOV_TOKEN_EXISTS : ${{ secrets.CODECOV_TOKEN != '' }}
48
49
CODE_COVERAGE_SUPPORTED : ${{ inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && (inputs.target-os != 'windows' || inputs.rust-toolchain-abi == 'msvc') }}
61
62
timeout-minutes : 1
62
63
run : |
63
64
set -xe
65
+ WITH_CODE_COVERAGE=${{ env.CODE_COVERAGE_SUPPORTED == 'true' && (inputs.builder-host == inputs.builder-target || (env.ENDIANNESS == 'big' && inputs.builder-target != 's390x')) && (github.event_name == 'pull_request' || env.CODECOV_TOKEN_EXISTS == 'true') }}
66
+ echo "WITH_CODE_COVERAGE=$(echo ${WITH_CODE_COVERAGE})" >> $GITHUB_ENV
64
67
if [ "${{ inputs.builder-target }}" = "x86_64" ] \
65
68
|| [ "${{ inputs.builder-target }}" = "aarch64" ] \
66
69
|| [ "${{ inputs.builder-target }}" = "i686" ] \
@@ -271,32 +274,53 @@ jobs:
271
274
eatmydata apt install ${{ env.PACKAGES }}
272
275
eatmydata apt clean
273
276
rm -rf /var/lib/apt/lists/*
274
- - name : Install Rust toolchain and targets
275
- timeout-minutes : 1
277
+ - name : Install Rust toolchain and targets and crates
278
+ timeout-minutes : 4
276
279
run : |
277
280
set -xe
281
+ RUST_COMPONENTS=""
282
+ RUST_CRATES=""
278
283
eatmydata curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --default-toolchain none -y
279
284
. "$HOME/.cargo/env"
280
285
eatmydata rustup toolchain install ${{ inputs.rust-toolchain-name }} --allow-downgrade --profile minimal
281
286
eatmydata rustup default ${{ inputs.rust-toolchain-name }}
282
287
eatmydata rustup target add ${{ env.RUST_TARGET }}
283
288
if [ "${{ inputs.flavor }}" = "RustFmt" ]; then
284
- eatmydata rustup component add rustfmt
289
+ RUST_COMPONENTS="${RUST_COMPONENTS} \
290
+ rustfmt \
291
+ "
285
292
elif [ "${{ inputs.flavor }}" = "doc" ]; then
286
293
/bin/true
287
294
elif [ "${{ inputs.flavor }}" = "dev" ] || [ "${{ inputs.flavor }}" = "release" ]; then
288
- eatmydata rustup component add clippy
295
+ RUST_COMPONENTS="${RUST_COMPONENTS} \
296
+ clippy \
297
+ "
289
298
else
290
299
exit 1
291
300
fi
292
- - name : Install necessary Rust packages for code coverage
293
- if : env.CODE_COVERAGE_SUPPORTED == 'true' && (inputs.builder-host == inputs.builder-target || (env.ENDIANNESS == 'big' && inputs.builder-target != 's390x')) && (github.event_name == 'pull_request' || env.CODECOV_TOKEN_EXISTS == 'true')
294
- timeout-minutes : 2
295
- run : |
296
- set -xe
297
- . "$HOME/.cargo/env"
298
- eatmydata rustup component add llvm-tools-preview
299
- eatmydata cargo install cargo-llvm-cov
301
+ if [ "${{ env.WITH_CODE_COVERAGE }}" = "true" ]; then
302
+ RUST_COMPONENTS="${RUST_COMPONENTS} \
303
+ llvm-tools-preview \
304
+ "
305
+ RUST_CRATES="${RUST_CRATES} \
306
+ cargo-llvm-cov \
307
+ "
308
+ fi
309
+ if [ "${{ env.WITH_MIRI }}" = "true" ]; then
310
+ RUST_COMPONENTS="${RUST_COMPONENTS} \
311
+ rust-src \
312
+ miri \
313
+ "
314
+ RUST_CRATES="${RUST_CRATES} \
315
+ cargo-nextest \
316
+ "
317
+ fi
318
+ if [ "${RUST_COMPONENTS}" != "" ]; then
319
+ eatmydata rustup component add ${RUST_COMPONENTS}
320
+ fi
321
+ if [ "${RUST_CRATES}" != "" ]; then
322
+ eatmydata cargo install ${RUST_CRATES}
323
+ fi
300
324
- name : Fetch/Checkout msvc-wine git repo
301
325
timeout-minutes : 1
302
326
if : inputs.target-os == 'windows' && inputs.rust-toolchain-abi == 'msvc'
@@ -400,7 +424,7 @@ jobs:
400
424
cargo test --target ${{ env.RUST_TARGET }} --profile ${{ inputs.flavor }}
401
425
- name : Run tests to collect code coverage
402
426
timeout-minutes : 2
403
- if : env.CODE_COVERAGE_SUPPORTED == 'true' && (inputs.builder-host == inputs.builder-target || (env.ENDIANNESS == 'big' && inputs.builder-target != 's390x')) && (github.event_name == 'pull_request' || env.CODECOV_TOKEN_EXISTS == 'true')
427
+ if : env.WITH_CODE_COVERAGE == 'true'
404
428
env :
405
429
RUSTFLAGS : " -C instrument-coverage"
406
430
run : |
@@ -411,15 +435,15 @@ jobs:
411
435
cargo llvm-cov --no-report --target ${{ env.RUST_TARGET }} --profile ${{ inputs.flavor }}
412
436
- name : Aggregate code coverage
413
437
timeout-minutes : 1
414
- if : env.CODE_COVERAGE_SUPPORTED == 'true' && (inputs.builder-host == inputs.builder-target || (env.ENDIANNESS == 'big' && inputs.builder-target != 's390x')) && (github.event_name == 'pull_request' || env.CODECOV_TOKEN_EXISTS == 'true')
438
+ if : env.WITH_CODE_COVERAGE == 'true'
415
439
run : |
416
440
set -xe
417
441
. "$HOME/.cargo/env"
418
442
cd "$SRC_DIR"
419
443
cargo llvm-cov report --codecov --output-path $SRC_DIR/codecov.json --target ${{ env.RUST_TARGET }} --profile ${{ inputs.flavor }}
420
444
- name : Upload coverage reports to Codecov
421
445
timeout-minutes : 1
422
- if : env.CODE_COVERAGE_SUPPORTED == 'true' && (inputs.builder-host == inputs.builder-target || (env.ENDIANNESS == 'big' && inputs.builder-target != 's390x')) && (github.event_name == 'pull_request' || env.CODECOV_TOKEN_EXISTS == 'true')
446
+ if : env.WITH_CODE_COVERAGE == 'true'
423
447
uses : codecov/codecov-action@v5
424
448
env :
425
449
OS : ${{ inputs.os }}
@@ -435,6 +459,14 @@ jobs:
435
459
files : ${{ env.SRC_DIR }}/codecov.json
436
460
root_dir : ${{ env.SRC_DIR }}
437
461
fail_ci_if_error : true
462
+ - name : Run tests under Miri
463
+ timeout-minutes : 10
464
+ if : env.WITH_MIRI == 'true'
465
+ run : |
466
+ set -xe
467
+ . "$HOME/.cargo/env"
468
+ cd "$SRC_DIR"
469
+ cargo miri nextest run --target ${{ env.RUST_TARGET }}
438
470
- name : Build docs
439
471
timeout-minutes : 1
440
472
if : inputs.flavor == 'doc'
0 commit comments