image: 'rust:latest' stages: - check - lint - test variables: CARGO_HOME: $CI_PROJECT_DIR/cargo_cache DEBIAN_BINARY: "debian-x86_64-${CI_COMMIT_TAG}.tar.bz2" PACKAGE_REGISTRY_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/gitlab-clippy/${CI_COMMIT_TAG}" .common: interruptible: true cache: key: files: - Cargo.lock paths: # https://doc.rust-lang.org/cargo/guide/cargo-home.html#caching-the-cargo-home-in-ci - cargo_cache/bin - cargo_cache/registry/index - cargo_cache/registry/cache - cargo_cache/git/db policy: pull .recreate_cache: cache: policy: pull-push check: stage: check needs: [] extends: - .common - .recreate_cache script: - cargo check --workspace fmt: stage: lint extends: .common needs: - job: check artifacts: false before_script: - rustup component add rustfmt script: - cargo fmt --all -- --check clippy-cli: stage: lint before_script: - rustup component add clippy - cargo install --path . script: - cargo clippy after_script: - cargo clippy --message-format=json | $CARGO_HOME/bin/gitlab-clippy > gl-code-quality-report.json artifacts: reports: codequality: gl-code-quality-report.json expire_in: 1 week rules: - if: '$CODE_QUALITY_DISABLED' when: never - if: '$CI_PIPELINE_SOURCE == "push"' clippy-be: stage: lint extends: .common needs: - job: check artifacts: false before_script: - rustup component add clippy script: - cargo clippy after_script: - cargo clippy --message-format=json &> clippy.txt || true - curl -X POST "https://gitlab-cq-rust.herokuapp.com/clippy" --data-binary @clippy.txt --output report.json artifacts: reports: codequality: report.json expire_in: 1 week rules: - if: '$CODE_QUALITY_DISABLED' when: never - if: '$CI_PIPELINE_SOURCE == "push"' test: stage: test extends: .common needs: - job: check artifacts: false before_script: - rustup component add clippy script: - cargo test --all coverage: image: 'rustlang/rust:nightly-bullseye' stage: test extends: .common needs: - job: check artifacts: false variables: RUSTFLAGS: "-Zinstrument-coverage" LLVM_PROFILE_FILE: "coverage-%p-%m.profraw" before_script: - rustup component add llvm-tools-preview - curl -L https://github.com/mozilla/grcov/releases/latest/download/grcov-x86_64-unknown-linux-gnu.tar.bz2 | tar jxf - script: - cargo +nightly test - ./grcov . --binary-path ./target/debug/ -s . -t cobertura --branch --ignore-not-existing --ignore "*cargo*" -o coverage.xml - grep -Eo 'line-rate="[^"]+"' coverage.xml | head -n 1 | grep -Eo '[0-9.]+' | awk '{ print "Coverage:", $1 * 100 }' coverage: '/Coverage: \d+\.\d+/' artifacts: name: ${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA} expire_in: 2 days reports: cobertura: coverage.xml