62
62
timeout-minutes : 1
63
63
run : |
64
64
set -xe
65
+ 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" ] ]]; then
66
+ WITH_CODE_COVERAGE=true
67
+ else
68
+ WITH_CODE_COVERAGE=false
69
+ fi
70
+ echo "WITH_CODE_COVERAGE=$(echo ${WITH_CODE_COVERAGE})" >> $GITHUB_ENV
65
71
if [ "${{ inputs.builder-target }}" = "x86_64" ] \
66
72
|| [ "${{ inputs.builder-target }}" = "aarch64" ] \
67
73
|| [ "${{ inputs.builder-target }}" = "i686" ] \
@@ -272,36 +278,51 @@ jobs:
272
278
eatmydata apt install ${{ env.PACKAGES }}
273
279
eatmydata apt clean
274
280
rm -rf /var/lib/apt/lists/*
275
- - name : Install Rust toolchain and targets
276
- timeout-minutes : 1
281
+ - name : Install Rust toolchain and targets and crates
282
+ timeout-minutes : 3
277
283
run : |
278
284
set -xe
285
+ RUST_COMPONENTS=""
286
+ RUST_CRATES=""
279
287
eatmydata curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --default-toolchain none -y
280
288
. "$HOME/.cargo/env"
281
289
eatmydata rustup toolchain install ${{ inputs.rust-toolchain-name }} --allow-downgrade --profile minimal
282
290
eatmydata rustup default ${{ inputs.rust-toolchain-name }}
283
291
eatmydata rustup target add ${{ env.RUST_TARGET }}
284
292
if [ "${{ inputs.flavor }}" = "RustFmt" ]; then
285
- eatmydata rustup component add rustfmt
293
+ RUST_COMPONENTS="${RUST_COMPONENTS} \
294
+ rustfmt \
295
+ "
286
296
elif [ "${{ inputs.flavor }}" = "doc" ]; then
287
297
/bin/true
288
298
elif [ "${{ inputs.flavor }}" = "dev" ] || [ "${{ inputs.flavor }}" = "release" ]; then
289
- eatmydata rustup component add clippy
299
+ RUST_COMPONENTS="${RUST_COMPONENTS} \
300
+ clippy \
301
+ "
290
302
else
291
303
exit 1
292
304
fi
293
305
if [ "${{ env.WITH_MIRI }}" = "true" ]; then
294
- eatmydata rustup component add miri
295
- eatmydata rustup component add rust-src
306
+ RUST_COMPONENTS="${RUST_COMPONENTS} \
307
+ rust-src \
308
+ miri \
309
+ "
310
+ RUST_CRATES="${RUST_CRATES} \
311
+ cargo-nextest \
312
+ "
313
+ fi
314
+ if [ "${{ env.WITH_CODE_COVERAGE }}" = "true" ]; then
315
+ RUST_COMPONENTS="${RUST_COMPONENTS} \
316
+ llvm-tools-preview \
317
+ "
318
+ RUST_CRATES="${RUST_CRATES} \
319
+ cargo-llvm-cov \
320
+ "
321
+ fi
322
+ eatmydata rustup component add ${RUST_COMPONENTS}
323
+ if [ "${RUST_CRATES}" != "" ]; then
324
+ eatmydata cargo install ${RUST_CRATES}
296
325
fi
297
- - name : Install necessary Rust packages for code coverage
298
- 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')
299
- timeout-minutes : 2
300
- run : |
301
- set -xe
302
- . "$HOME/.cargo/env"
303
- eatmydata rustup component add llvm-tools-preview
304
- eatmydata cargo install cargo-llvm-cov
305
326
- name : Fetch/Checkout msvc-wine git repo
306
327
timeout-minutes : 1
307
328
if : inputs.target-os == 'windows' && inputs.rust-toolchain-abi == 'msvc'
@@ -405,7 +426,7 @@ jobs:
405
426
cargo test --target ${{ env.RUST_TARGET }} --profile ${{ inputs.flavor }}
406
427
- name : Run tests to collect code coverage
407
428
timeout-minutes : 2
408
- 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')
429
+ if : env.WITH_CODE_COVERAGE == 'true'
409
430
env :
410
431
RUSTFLAGS : " -C instrument-coverage"
411
432
run : |
@@ -416,15 +437,15 @@ jobs:
416
437
cargo llvm-cov --no-report --target ${{ env.RUST_TARGET }} --profile ${{ inputs.flavor }}
417
438
- name : Aggregate code coverage
418
439
timeout-minutes : 1
419
- 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')
440
+ if : env.WITH_CODE_COVERAGE == 'true'
420
441
run : |
421
442
set -xe
422
443
. "$HOME/.cargo/env"
423
444
cd "$SRC_DIR"
424
445
cargo llvm-cov report --codecov --output-path $SRC_DIR/codecov.json --target ${{ env.RUST_TARGET }} --profile ${{ inputs.flavor }}
425
446
- name : Upload coverage reports to Codecov
426
447
timeout-minutes : 1
427
- 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')
448
+ if : env.WITH_CODE_COVERAGE == 'true'
428
449
uses : codecov/codecov-action@v5
429
450
env :
430
451
OS : ${{ inputs.os }}
@@ -441,13 +462,13 @@ jobs:
441
462
root_dir : ${{ env.SRC_DIR }}
442
463
fail_ci_if_error : true
443
464
- name : Run tests under Miri
444
- timeout-minutes : 5
465
+ timeout-minutes : 60
445
466
if : env.WITH_MIRI == 'true'
446
467
run : |
447
468
set -xe
448
469
. "$HOME/.cargo/env"
449
470
cd "$SRC_DIR"
450
- cargo miri test --target ${{ env.RUST_TARGET }}
471
+ cargo miri nextest run --target ${{ env.RUST_TARGET }}
451
472
- name : Build docs
452
473
timeout-minutes : 1
453
474
if : inputs.flavor == 'doc'
0 commit comments