image: rust:latest # Use shallow clone to reduce checkout size variables: GIT_DEPTH: "1" # Put cargo home and target under project dir so we can clean them easily CARGO_HOME: "$CI_PROJECT_DIR/.cargo" CARGO_TARGET_DIR: "$CI_PROJECT_DIR/ci-target" GIT_SUBMODULE_STRATEGY: normal # Cache only cargo registries/git metadata to speed dependency fetches. # Avoid caching compiled `target` artifacts which are large and easily fill disk. .rust_cache: &rust_cache cache: key: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG" paths: - .cargo/registry - .cargo/git before_script: - df -h - echo "Cleaning stale targets to free space if present" - rm -rf "$CI_PROJECT_DIR/target" "$CI_PROJECT_DIR/ci-target" || true - apt-get update -qq && apt-get install -y -qq libudev-dev libgtk-3-dev grep llvm clang libclang-dev libsdl2-dev libsdl2-gfx-dev stages: - format - check - test - release - deploy format: except: - tags <<: *rust_cache script: - rustup component add rustfmt || true - cargo fmt --check after_script: - du -sh "$CI_PROJECT_DIR/ci-target" || true - rm -rf "$CI_PROJECT_DIR/ci-target" || true check: except: - tags <<: *rust_cache script: - rustup component add clippy || true - cargo check --locked --workspace # deny currently catches too much #- cargo install cargo-deny && cargo deny - cargo install cargo-cranky && cargo cranky after_script: - rm -rf "$CI_PROJECT_DIR/ci-target" || true test: except: - tags <<: *rust_cache script: - mkdir -p .git/hooks > /dev/null - cargo test --locked --all after_script: - rm -rf "$CI_PROJECT_DIR/ci-target" || true release: only: - tags <<: *rust_cache script: - cargo install cargo-vendor-filterer - cargo fetch - make FROZEN=1 && make vendor artifacts: paths: - vendor_asusctl*.tar.xz - cargo-config expire_in: 1 week after_script: - rm -rf vendor vendor_asusctl*.tar.xz "$CI_PROJECT_DIR/ci-target" || true pages: stage: deploy only: - tags <<: *rust_cache script: - cargo doc --locked --document-private-items --no-deps --workspace - rm -rf public - mkdir public - cp -R ci-target/doc/* public - cp extra/index.html public artifacts: paths: - public expire_in: 1 week after_script: - rm -rf "$CI_PROJECT_DIR/ci-target" || true