image: "rust:latest" | |
default: | |
before_script: | |
- rustc --version | |
- cargo --version | |
stages: | |
- test | |
test-code: | |
stage: test | |
script: | |
- cargo test | |
- cargo install cargo-tarpaulin | |
- cargo tarpaulin --ignore-tests | |
lint-code: | |
stage: test | |
script: | |
- rustup component add clippy | |
- cargo clippy -- -D warnings | |
format-code: | |
stage: test | |
script: | |
- rustup component add rustfmt | |
- cargo fmt -- --check | |
audit-code: | |
stage: test | |
script: | |
- cargo install cargo-audit | |
- cargo audit |
This is very short and neat compared to the github actions version, which I assume is because the actions version has many more bells and whistles (scheduling, toolchain specification etc). Does anyone know how would a feature-matched gitlab-ci yaml file compare?
The big difference with the GitHub actions version is caching and parallelism - I am not a GitLab user, but I'd be happy to host a more optimised version if provided.
This could, and probably should, be broken into separate steps instead of everything being done in a single step. At least attempt to parallelize things that could be done at the same time.
If anybody who knows GitLab CI wants to pitch in with a more optimised setup I am happy to edit the gist
Hey! To parallelize things you could update this to something like the following:
image: "rust:latest"
default:
before_script:
- rustc --version
- cargo --version
stages:
- test
test-code:
stage: test
script:
- cargo test
- cargo install cargo-tarpaulin
- cargo tarpaulin --ignore-tests
lint-code:
stage: test
script:
- rustup component add rustfmt
- cargo fmt -- --check
- rustup component add clippy
- cargo clippy -- -D warnings
audit-code:
stage: test
script:
- cargo install cargo-audit
- cargo audit
Thanks - updated @devonh!
What else needs to be added to the Gitlab version to account for SQLX's compile time checks?
To consider coverage in Merge Requests, the test-code
job should be:
test-code:
stage: test
artifacts:
when: always
reports:
cobertura: "cobertura.xml"
coverage: '/\d+\.\d+% coverage, /'
script:
- cargo test
- cargo install cargo-tarpaulin
- cargo tarpaulin --ignore-tests --out Xml
image
can be moved under the default
part, to allow individual jobs to use different images (for example, if you want to compile in different Rust versions), leaving it like this:
default:
image: rust:latest
before_script:
- rustc --version
- cargo --version
To add caching, you can use the following on top of the file:
cache:
paths:
- target/
I don't know if Rust requires to cache any other directory, but you can easily add any other directory under the paths
piece (or exclude directories if it may be a problem)
Courtesy of Alan Faloon.