diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..98579a2 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,68 @@ +stages: + - check + - build + +variables: + CARGO_TERM_COLOR: always + RUST_BACKTRACE: "1" + +cache: + key: + files: + - Cargo.lock + prefix: cargo + paths: + - target/ + +fmt: + stage: check + image: rust:latest + script: + - rustup component add rustfmt + - cargo fmt --check + rules: + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + +clippy: + stage: check + image: rust:latest + before_script: + - rustup component add clippy + script: + - cargo clippy --all-targets -- --deny warnings + rules: + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + allow_failure: true + +test: + stage: check + image: rust:latest + script: + - cargo test --locked + rules: + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + +build: + stage: build + image: rust:latest + script: + - cargo build --release --locked + artifacts: + name: "brokecream-linux-x86_64" + paths: + - target/release/brokecrew + expire_in: 30 days + +# Only on tags, so routine pushes don't eat the free CI minutes. +release: + stage: build + image: rust:latest + rules: + - if: $CI_COMMIT_TAG + script: + - cargo build --release --locked + artifacts: + name: "brokecrew-$CI_COMMIT_TAG" + paths: + - target/release/brokecrew + expire_in: 90 days