Add GitLab CI pipeline

Runs fmt, clippy, and tests on the default branch, then builds release
artifacts. Tag builds attach binaries to a release. Same shape as the
GitHub Actions workflow, ported to shared runners.
This commit is contained in:
katR 2026-09-27 20:52:56 +05:30
parent 7d6fd2d84f
commit 147d3fb481

68
.gitlab-ci.yml Normal file
View file

@ -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