|- rustc --version|
|- cargo --version|
|- cargo test|
|- cargo install cargo-tarpaulin|
|- cargo tarpaulin --ignore-tests|
|- rustup component add clippy|
|- cargo clippy -- -D warnings|
|- rustup component add rustfmt|
|- cargo fmt -- --check|
|- cargo install cargo-audit|
|- cargo audit|
Oct 2, 2020
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.
Dec 29, 2020
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.
Dec 29, 2020
If anybody who knows GitLab CI wants to pitch in with a more optimised setup I am happy to edit the gist
Feb 6, 2021
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
Feb 6, 2021
Thanks - updated @devonh!
Jul 17, 2021
What else needs to be added to the Gitlab version to account for SQLX's compile time checks?
Jan 1, 2022
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)
Oct 12, 2022
$ cargo test
Compiling zero2prod v0.1.0 (/builds/SniffleEU/zero2prod)
clangnot found = note: No such file or directory (os error 2)
error: could not compile
zero2proddue to previous error
Cleaning up project directory and file based variables 00:01
ERROR: Job failed: exit code 1
In the test-code block.
As I've never tried gitlab CI before my workaround is crude, but changing from:
test-code: stage: test script: - cargo test - cargo install cargo-tarpaulin - cargo tarpaulin --ignore-tests
test-code: stage: test script: - apt update - apt install lld clang -y - cargo test - cargo install cargo-tarpaulin - cargo tarpaulin --ignore-tests
Fixes the issue and runs the block
Apr 20, 2023
@Arevjensen Gitlab CI runs in a docker container, in this case,
rust:latest as specified at the top of the file here. As you've discovered the rust container doesn't include lld or clang by default.
When doing it this way, you're installing these each and every time. I've gone ahead and bundled all the dependencies as of Chapter 1 into a single docker image.
If you'd like you can replace
image: "rust-latest" with
image: "aestusvitae/rust-ci:latest" and remove the installs (
rustup component add) from your CI scripts, and CI runs should be noticeably quicker.
You can even build the image yourself if you're so inclined. (or if I fail to keep mine up to date) The Dockerfile is very simple.
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?