diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8422ff64f95..2d5127d311f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -187,6 +187,53 @@ spellcheck: cargo spellcheck check -vvv --cfg=.config/cargo_spellcheck.toml --checkers hunspell --code 1 examples/delegator/${contract}/; done +codecov: + stage: workspace + <<: *docker-env + <<: *test-refs + needs: + - job: check-std + artifacts: false + variables: + # For codecov it's sufficient to run the fuzz tests only once. + QUICKCHECK_TESTS: 1 + # Now we're using the MIR source-based Rust test coverage, the setup assumes that default + # toolchain is nightly and both `grcov` and `rustup component add llvm-tools-preview` are + # installed on it. + RUSTFLAGS: "-Zinstrument-coverage" + LLVM_PROFILE_FILE: "llvmcoveragedata-%p-%m.profraw" + CARGO_INCREMENTAL: 0 + # The `cargo-taurpalin` coverage reporting tool seems to have better code instrumentation and thus + # produces better results for Rust codebases in general. However, unlike `grcov` it requires + # running docker with `--security-opt seccomp=unconfined` which is why we use `grcov` instead. + before_script: + - *rust-info-script + # RUSTFLAGS are the cause target cache can't be used here + # FIXME: cust-covfix doesn't support the external target dir + # https://github.com/Kogia-sima/rust-covfix/issues/7 + - unset "CARGO_TARGET_DIR" + - cargo clean + # make sure there's no stale coverage artifacts + - find . -name "*.profraw" -type f -delete + script: + - cargo build --verbose --all-features --workspace + - cargo test --verbose --all-features --no-fail-fast --workspace + # Just needed as long as we have the `ink-experimental-engine` feature. + # We must additionally run the coverage without `--all-features` here -- this + # would imply the feature `ink-experimental-engine`. So in order to still run + # the tests without the experimental engine feature we need this command. + - cargo test --verbose --features std --no-fail-fast --workspace + # coverage with branches + - grcov . --binary-path ./target/debug/ --source-dir . --output-type lcov --llvm --branch + --ignore-not-existing --ignore "/*" --ignore "tests/*" --output-path lcov-w-branch.info + - rust-covfix lcov-w-branch.info --output lcov-w-branch-fixed.info + - codecov --token "$CODECOV_P_TOKEN" --file lcov-w-branch-fixed.info --nonZero + # lines coverage + - grcov . --binary-path ./target/debug/ --source-dir . --output-type lcov --llvm + --ignore-not-existing --ignore "/*" --ignore "tests/*" --output-path lcov-lines.info + - rust-covfix lcov-lines.info --output lcov-lines-fixed.info + - codecov --token "$CODECOV_TOKEN" --file lcov-lines-fixed.info --nonZero + clippy-std: stage: workspace <<: *docker-env