before_script:
- apt-get update -yqq
- export CARGO_HOME=.cargo-cache
- rustc --version
- cargo --version
.only_settings: &only_settings
- merge_requests
- branches@utils/rust-gitlab
- tags@utils/rust-gitlab
.cargo_update: &cargo_update
- touch Cargo.lock
- cargo update $GENERATE_LOCKFILE_ARGS
- cargo fetch --locked
- mkdir .cargo
- cargo vendor > .cargo/config
.cargo_clippy: &cargo_clippy
- .gitlab/ci/sccache.sh && export RUSTC_WRAPPER=$PWD/.gitlab/sccache
- rustup component add clippy
- cargo clippy --frozen --tests --all --verbose -- -D warnings
- ".gitlab/sccache --show-stats || :"
.cargo_build: &cargo_build
- .gitlab/ci/sccache.sh && export RUSTC_WRAPPER=$PWD/.gitlab/sccache
- cargo build $CARGO_FEATURES --frozen --all --verbose
- cargo test $CARGO_FEATURES --frozen --all --no-run --verbose
- ".gitlab/sccache --show-stats || :"
.cargo_test: &cargo_test
- cargo test $CARGO_FEATURES --frozen --all --verbose
.cargo_tarpaulin_build: &cargo_tarpaulin_build
- .gitlab/ci/sccache.sh && export RUSTC_WRAPPER=$PWD/.gitlab/sccache
- .gitlab/ci/tarpaulin.sh
- export PATH=$PWD/.gitlab:$PATH
- cargo tarpaulin --no-run --frozen $CARGO_FEATURES --exclude-files vendor --ignore-panics --all --verbose
- ".gitlab/sccache --show-stats || :"
.cargo_tarpaulin_test: &cargo_tarpaulin_test
- .gitlab/ci/tarpaulin.sh
- export PATH=$PWD/.gitlab:$PATH
- cargo tarpaulin --frozen $CARGO_FEATURES --exclude-files vendor --ignore-panics --all --verbose --out Html
.rust_minimum: &rust_minimum
image: "rust:1.40.0"
variables:
CARGO_UPDATE_POLICY: newest
GIT_CLONE_PATH: $CI_BUILDS_DIR/rust
.rust_minimum_no_default_features: &rust_minimum_no_default_features
extends: .rust_minimum
variables:
CARGO_FEATURES: --no-default-features
.rust_stable: &rust_stable
image: "rust:latest"
variables:
CARGO_UPDATE_POLICY: newest
GIT_CLONE_PATH: $CI_BUILDS_DIR/rust
.rust_stable_no_default_features: &rust_stable_no_default_features
extends: .rust_stable
variables:
CARGO_FEATURES: --no-default-features
.rust_nightly: &rust_nightly
extends: .rust_stable
image: "rustlang/rust:nightly"
.rust_nightly_no_default_features: &rust_nightly_no_default_features
extends: .rust_nightly
variables:
CARGO_FEATURES: --no-default-features
.cargo_fetch_job: &cargo_fetch_job
stage: prepare
only: *only_settings
tags:
- build
- docker
- linux
script: *cargo_update
artifacts:
expire_in: 60m
paths:
- vendor
- .cargo
- Cargo.lock
cache:
key: cargo-cache-$CARGO_UPDATE_POLICY
paths:
- .cargo-cache
interruptible: true
.cargo_clippy_job: &cargo_clippy_job
stage: build
only: *only_settings
tags:
- build
- docker
- linux
script: *cargo_clippy
interruptible: true
.cargo_build_job: &cargo_build_job
stage: build
only: *only_settings
tags:
- build
- docker
- linux
script: *cargo_build
artifacts:
expire_in: 60m
paths:
- vendor
- .cargo
- Cargo.lock
- target
interruptible: true
.cargo_test_job: &cargo_test_job
stage: test
only: *only_settings
tags:
- build
- docker
- linux
script: *cargo_test
interruptible: true
.cargo_tarpaulin_build_job: &cargo_tarpaulin_build_job
stage: build
only: *only_settings
tags:
- build
- docker
- linux
script: *cargo_tarpaulin_build
artifacts:
expire_in: 60m
paths:
- vendor
- .cargo
- Cargo.lock
- target
interruptible: true
.cargo_tarpaulin_test_job: &cargo_tarpaulin_test_job
stage: test
only: *only_settings
tags:
- docker
- linux
- privileged
artifacts:
expose_as: "Coverage report"
expire_in: 1 week
paths:
- tarpaulin-report.html
script: *cargo_tarpaulin_test
coverage: '/\d+.\d+% coverage, \d+\/\d+ lines covered/'
interruptible: true
stages:
- prepare
- build
- test
prepare:cargo-cache-newest:
<<:
- *cargo_fetch_job
- *rust_stable
.cargo_cache_newest: &cargo_cache_newest
dependencies:
- prepare:cargo-cache-newest
needs:
- prepare:cargo-cache-newest
build:cargo-clippy:
<<:
- *cargo_clippy_job
- *rust_stable
- *cargo_cache_newest
build:cargo-minimum:
<<:
- *cargo_build_job
- *rust_minimum
- *cargo_cache_newest
test:cargo-minimum:
<<:
- *cargo_test_job
- *rust_minimum
dependencies:
- build:cargo-minimum
needs:
- build:cargo-minimum
build:cargo-minimum-no-default-features:
<<:
- *cargo_build_job
- *rust_minimum_no_default_features
- *cargo_cache_newest
test:cargo-minimum-no-default-features:
<<:
- *cargo_test_job
- *rust_minimum_no_default_features
dependencies:
- build:cargo-minimum-no-default-features
needs:
- build:cargo-minimum-no-default-features
build:cargo-stable:
<<:
- *cargo_build_job
- *rust_stable
- *cargo_cache_newest
test:cargo-stable:
<<:
- *cargo_test_job
- *rust_stable
dependencies:
- build:cargo-stable
needs:
- build:cargo-stable
build:cargo-stable-no-default-features:
<<:
- *cargo_build_job
- *rust_stable_no_default_features
- *cargo_cache_newest
test:cargo-stable-no-default-features:
<<:
- *cargo_test_job
- *rust_stable_no_default_features
dependencies:
- build:cargo-stable-no-default-features
needs:
- build:cargo-stable-no-default-features
build:cargo-tarpaulin:
<<:
- *cargo_tarpaulin_build_job
- *rust_stable
- *cargo_cache_newest
test:cargo-tarpaulin:
<<:
- *cargo_tarpaulin_test_job
- *rust_stable
dependencies:
- build:cargo-tarpaulin
needs:
- build:cargo-tarpaulin
build:cargo-nightly:
<<:
- *cargo_build_job
- *rust_nightly
- *cargo_cache_newest
test:cargo-nightly:
<<:
- *cargo_test_job
- *rust_nightly
dependencies:
- build:cargo-nightly
needs:
- build:cargo-nightly
build:cargo-nightly-no-default-features:
<<:
- *cargo_build_job
- *rust_nightly_no_default_features
- *cargo_cache_newest
test:cargo-nightly-no-default-features:
<<:
- *cargo_test_job
- *rust_nightly_no_default_features
dependencies:
- build:cargo-nightly-no-default-features
needs:
- build:cargo-nightly-no-default-features