image: "rust:latest" variables: CARGO_HOME: $CI_PROJECT_DIR/.cargo cache: paths: - target - .cargo default: before_script: - rustc --version - cargo version stages: - lint - cache-cleanup - build-base - build - version - test # TEMPLATES .cargo-cleanup: stage: cache-cleanup allow_failure: true only: refs: - branches - tags changes: - "/src/**/*" - .gitlab-ci.yml script: - cargo install cargo-sweep - cargo sweep -i .cargo-build-base: stage: build-base only: refs: - branches - tags changes: - "/src/**/*" - .gitlab-ci.yml script: cargo build --locked .cargo-build: extends: .cargo-build-base stage: build parallel: matrix: - FEATURES: - xdg-mime-backend - infer-backend - multi-threaded xdg-mime-backend - multi-threaded infer-backend script: cargo build --no-default-features --locked --features="json $FEATURES" .cargo-test: extends: .cargo-build stage: test script: cargo test --no-default-features --locked --verbose --features="json $FEATURES" # LINT clippy: stage: lint only: refs: - branches - tags changes: - "/src/**/*" - .gitlab-ci.yml script: - rustup component add clippy - cargo clippy --version - ./clippy.sh ci # CACHE CLEANUP cleanup-stable: extends: .cargo-cleanup cleanup-msrv: extends: cleanup-stable image: "rust:1.43.0" cache: key: msrv paths: - target - .cargo cleanup-nightly: extends: cleanup-stable image: "rustlang/rust:nightly" cache: key: nightly paths: - target - .cargo # BUILD BASE build-base-stable: extends: .cargo-build-base needs: ["cleanup-stable"] build-base-msrv: extends: build-base-stable needs: ["cleanup-msrv"] image: "rust:1.43.0" cache: key: msrv paths: - target - .cargo build-base-nightly: extends: build-base-stable needs: ["cleanup-nightly"] image: "rustlang/rust:nightly" cache: key: nightly paths: - target - .cargo # BUILD build-stable: extends: .cargo-build needs: ["build-base-stable"] build-msrv: extends: build-stable needs: ["build-base-msrv"] image: "rust:1.43.0" cache: key: msrv paths: - target - .cargo build-nightly: extends: build-stable needs: ["build-base-nightly"] image: "rustlang/rust:nightly" cache: key: nightly paths: - target - .cargo # VERSION fif-version: stage: version needs: ["build-stable"] script: cargo run -- -V # TEST test-stable: extends: .cargo-test needs: ["build-stable"] test-msrv: extends: test-stable image: "rust:1.43.0" needs: ["build-msrv"] cache: key: msrv paths: - target - .cargo test-nightly: extends: test-stable image: "rustlang/rust:nightly" needs: ["build-nightly"] cache: key: nightly paths: - target - .cargo