stages: - check - build - test - docker - test-2 - release - deploy workflow: rules: - if: $CI_PIPELINE_SOURCE != 'push' || $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_TAG when: always - when: never .rust-default: image: registry.gitlab.com/tobip64/rust-gitlab-ci:latest cache: - key: $CI_COMMIT_REF paths: [ target/ ] - key: cargo paths: [ cargo/ ] interruptible: true timeout: 30m variables: CARGO_HOME: $CI_PROJECT_DIR/cargo CACHE_FALLBACK_KEY: $CI_DEFAULT_BRANCH parallel: matrix: - CHANNEL: [ stable ] rules: - if: $CHANNEL == "stable" allow_failure: false - allow_failure: true before_script: - rustup --version && rustc --version && cargo --version && echo $RUSTFLAGS && echo $CARGO_OPTS check:clippy: extends: .rust-default stage: check script: - 'cargo +$CHANNEL clippy --color always --verbose --all-targets --all-features --message-format=json $CARGO_OPTS | gitlab-report -p clippy > gl-code-quality-report.json' artifacts: when: always reports: codequality: gl-code-quality-report.json check:fmt: extends: .rust-default stage: check parallel: rules: - if: $RUN_RUST_FMT script: - cargo +stable fmt $CARGO_OPTS -- --check allow_failure: true build: extends: .rust-default stage: build needs: [ "check:clippy" ] timeout: 1h parallel: matrix: - CHANNEL: [ stable, beta, nightly ] PROFILE: [ debug, release ] TARGET: - x86_64-unknown-linux-musl - aarch64-unknown-linux-musl - mips64el-unknown-linux-muslabi64 - wasm32-wasi CARGO_OPTS: [ "--workspace --all-targets --all-features" ] script: - cargo +$CHANNEL build --verbose --color always --target $TARGET $([[ $PROFILE == "release" ]] && echo "--release" || echo "") $CARGO_OPTS artifacts: paths: - target/$TARGET/$PROFILE/* - Dockerfile # requires nightly .build:multiarch: extends: .rust-default stage: build needs: [ "check:clippy" ] timeout: 1h parallel: matrix: - CHANNEL: [ nightly ] PROFILE: [ debug, release ] CARGO_OPTS: [ "--workspace --all-targets --all-features" ] script: - '[[ $PROFILE == "debug" ]] && export RUSTFLAGS="$RUSTFLAGS -Zinstrument-coverage" || true' - 'cargo +$CHANNEL build $([[ $PROFILE == "release" ]] && echo "--release" || echo "") --verbose --color=always --target x86_64-unknown-linux-musl --target powerpc64le-unknown-linux-musl --target aarch64-unknown-linux-musl --target riscv64gc-unknown-linux-musl --target wasm32-wasi -Z multitarget -Z build-std $CARGO_OPTS' artifacts: paths: - target/*/$PROFILE/* - Dockerfile test:test: extends: .rust-default stage: test needs: [ build ] script: - 'LLVM_PROFILE_FILE="$CI_PROJECT_NAME-%p-%m.profraw" cargo +$CHANNEL test --verbose --color always --workspace --all-targets --all-features --no-fail-fast -- -Z unstable-options --format json $CARGO_OPTS | gitlab-report -p test > results.xml' after_script: - 'grcov . --binary-path ./target/x86_64-unknown-linux-musl/debug/ --source-dir . --output-type cobertura --output-path coverage.xml --branch --ignore-not-existing --ignore "/*"' - mkdir results/ - cp results.xml results/results.xml - allure generate -c results/ artifacts: when: always paths: - allure-report/ reports: junit: results.xml # - echo '' > public/index.html artifacts: paths: - public/ # test:bench: # extends: .rust-default # stage: test # needs: [ build ] # script: # - 'cargo +$CHANNEL bench # --verbose # --color always # --workspace # --all-targets # --all-features # $CARGO_OPTS # -- # -Z unstable-options # --format json # | gitlab-report -p bench > metrics.txt' # artifacts: # when: always # reports: # metrics: metrics.txt