.script:
cargo-check: &script-cargo-check
before_script:
- rustc --version && cargo --version
script:
- cargo check --tests
.script-cargo-build: &script-cargo-build
before_script:
- rustc --version && cargo --version
script:
- cargo build --tests
.script-cargo-test: &script-cargo-test
before_script:
- rustc --version && cargo --version
script:
- cargo test --verbose
.cache-cargo-registry: &cache-cargo-registry
key: cargo-registry
policy: pull
paths:
- .cargo/registry/index
- .cargo/registry/cache
- target/debug/deps
.cache-cargo-build: &cache-cargo-build
key: rustbuild-${RUST_CACHE_KEY}
policy: pull-push
paths:
- target/debug/deps
- target/debug/build
.cache-cargo-semver-check: &cache-cargo-semver-check
key: cargo-semver-checks
policy: pull-push
paths:
- target/semver-checks/cache
.rules.never-without-branch:
rules: &rules-never-without-branch
- if: '$CI_COMMIT_BRANCH == null'
when: never
.rules:always-master-otherwise-manual:
rules: &rules-always-master-otherwise-manual
- if: '$CI_COMMIT_BRANCH == "master"'
when: always
- if: '$CI_COMMIT_BRANCH == null'
when: never
- when: manual
cache:
- <<: *cache-cargo-registry
- <<: *cache-cargo-build
variables:
CARGO_HOME: ${CI_PROJECT_DIR}/.cargo
CARGO_NET_GIT_FETCH_WITH_CLI: 'true'
stages:
- check
- build
- test
- deploy
cargo:check:
stage: check
image: akubera/rust:stable
cache:
- <<: *cache-cargo-registry
policy: pull-push
- <<: *cache-cargo-build
variables:
RUST_CACHE_KEY: "stable"
<<: *script-cargo-check
script:
- scripts/bigdecimal-property-tests cargo check --tests
cargo:clippy:
stage: check
image: "akubera/rust:stable"
needs:
- cargo:check
allow_failure: true
variables:
RUST_CACHE_KEY: "stable"
before_script:
- rustc --version && cargo --version && cargo clippy --version
script:
- cargo clippy -- -Dclippy::{dbg_macro,todo}
cargo:semver-checks:
stage: check
image: "akubera/rust:stable"
needs:
- cargo:check
allow_failure: true
cache:
- <<: *cache-cargo-registry
- <<: *cache-cargo-semver-check
before_script:
- rustc --version && cargo --version && cargo semver-checks --version
script:
- cargo semver-checks
cargo:build-stable:
stage: build
image: akubera/rust:stable
needs:
- cargo:check
variables:
RUST_CACHE_KEY: "stable"
<<: *script-cargo-build
script:
- scripts/bigdecimal-property-tests cargo build --tests
cargo:test-stable:
stage: test
image: akubera/rust:stable
needs:
- "cargo:build-stable"
variables:
RUST_CACHE_KEY: "stable"
<<: *script-cargo-test
script:
- scripts/bigdecimal-property-tests cargo test
cargo:build:no-std:
stage: build
image: akubera/rust:stable
needs:
- cargo:check
variables:
RUST_CACHE_KEY: "stable+no_std"
<<: *script-cargo-build
script:
- cargo build --no-default-features --lib
cargo:test:no-std:
stage: test
image: akubera/rust:stable
needs:
- "cargo:build:no-std"
variables:
RUST_CACHE_KEY: "stable+no_std"
<<: *script-cargo-test
script:
- cargo test --no-default-features --lib
cargo:build-nightly:
stage: build
image: rustlang/rust:nightly
allow_failure: true
variables:
RUST_CACHE_KEY: "nightly"
<<: *script-cargo-build
cargo:test-nightly:
stage: test
image: rustlang/rust:nightly
needs:
- cargo:build-nightly
allow_failure: true
variables:
RUST_CACHE_KEY: "nightly"
<<: *script-cargo-test
cargo:check-1.43:
stage: check
image: "akubera/rust-kcov:1.43.1-buster"
variables:
RUST_CACHE_KEY: "1.43"
<<: *script-cargo-check
cargo:build-1.43:
stage: build
image: "akubera/rust-kcov:1.43.1-buster"
needs:
- "cargo:check-1.43"
variables:
RUST_CACHE_KEY: "1.43"
<<: *script-cargo-build
cargo:test-1.43:
stage: test
needs:
- "cargo:build-1.43"
image: "akubera/rust-kcov:1.43.1-buster"
variables:
RUST_CACHE_KEY: "1.43"
<<: *script-cargo-test
cargo:check-1.54:
stage: check
image: "akubera/rust-kcov:1.54.0-bullseye"
rules:
*rules-always-master-otherwise-manual
variables:
RUST_CACHE_KEY: "1.54"
<<: *script-cargo-check
cargo:build-1.54:
stage: build
image: "akubera/rust-kcov:1.54.0-bullseye"
needs:
- "cargo:check-1.54"
variables:
RUST_CACHE_KEY: "1.54"
<<: *script-cargo-build
cargo:test-1.54:
stage: test
needs:
- "cargo:build-1.54"
image: "akubera/rust-kcov:1.54.0-bullseye"
variables:
RUST_CACHE_KEY: "1.54"
<<: *script-cargo-test
cargo:check-1.70:
stage: check
image: "akubera/rust-grcov:1.70.0-bullseye"
rules:
*rules-always-master-otherwise-manual
variables:
RUST_CACHE_KEY: "1.70"
<<: *script-cargo-check
cargo:build-1.70:
stage: build
image: "akubera/rust-grcov:1.70.0-bullseye"
needs:
- "cargo:check-1.70"
variables:
RUST_CACHE_KEY: "1.70"
<<: *script-cargo-build
cargo:test-1.70:
stage: test
needs:
- "cargo:build-1.70"
image: "akubera/rust-grcov:1.70.0-bullseye"
variables:
RUST_CACHE_KEY: "1.70"
<<: *script-cargo-test
coverage-test:
stage: test
needs:
- "cargo:test-1.70"
image: "akubera/rust-grcov:1.70.0-bullseye"
variables:
RUST_CACHE_KEY: "1.70"
CARGO_NET_GIT_FETCH_WITH_CLI: 'true'
LLVM_PROFILE_FILE: "target/coverage/%p-%m.profraw"
RUSTFLAGS: "-Cinstrument-coverage -Ccodegen-units=1 -Copt-level=0 -Clink-dead-code -Coverflow-checks=off "
CARGO_INCREMENTAL: "0"
coverage: '/Code Coverage: \d+\.\d+/'
before_script:
- rustc --version && cargo --version
script:
- cargo test
- ls -l target/coverage
- grcov target/coverage --binary-path target/debug -s . --keep-only 'src/*' -tcobertura -o cobertura.xml
- >
grep -m1 -o 'line-rate="[^"]*' cobertura.xml
| sed 's/[^0-9.]*//'
| awk '{ print "Code Coverage: " $0 * 100 }'
artifacts:
reports:
coverage_report:
coverage_format: cobertura
path: cobertura.xml
cargo:benchmark:
stage: test
needs:
- "cargo:test-1.70"
image: "akubera/bigdecimal-benchmark-base:1.70.0-bullseye"
when: manual
allow_failure: true
cache: []
variables:
RUST_CACHE_KEY: "1.70"
CARGO_HOME: /usr/local/cargo
BENCHMARK_EXTRAS: "1"
script:
- scripts/benchmark-bigdecimal
artifacts:
paths:
- target/criterion
- "*.html"
cargo-publish:
stage: deploy
image: "rust:latest"
when: manual
only:
- master
allow_failure: true
cache: []
variables:
CARGO_HOME: /usr/local/cargo
script:
- cargo publish