Cargo

Private GitLab-Repositorien einbinden

Öffentliche Git-Repositorien können wie folgt eingebunden werden:

[dependencies]
public-repo = {git = "https://gitlab.instance.io/project/public-repo.git", tag = "v1.0.0"}

Um ein privates Git-Repositorium bei lokalen Builds einzubinden, muss das Repositorium über ssh geklont werden:

[dependencies]
private-repo = {git = "ssh://git@gitlab.instance.io/project/private-repo.git", tag = "v1.0.0"}

Damit der private ssh-Schlüssel verwendet wird, muss zudem cargo entsprechend konfiguriert werden:

mkdir .cargo
cat > .cargo/config <<EOF
[net]
git-fetch-with-cli = true
EOF

Für die Nutzung in Gitlab-CI-Prozessen muss die Pipeline so eingestellt werden, dass sie das CI-Access-Token beim Zugriff auf das Repositorium verwendet (das funktioniert natürlich nur, wenn das private Repo in derselben Gruppe wie der CI-Prozess liegt).

In .gitlab-ci.yml zu ergänzen:

.git-access:
  before_script:
    - git config --global credential.helper store
    - echo "https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.instance.io" > ~/.git-credentials
    - git config --global url."https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.instance.io".insteadOf ssh://gitlab.instance.io

Damit wird eine Rewrite-Regel definiert, womit git bestimmte URLs ersetzen kann.

TODO: Docker / Podman-Integration (s. https://oliverjumpertz.com/blog/how-to-handle-private-gitlab-dependencies-with-cargo/)

Cargo-Erweiterungen

Alle mit cargo installierten Binaries ausgeben:

cargo install -list

cargo-audit

Audit Cargo.lock files for vulnerable crates

cargo-binutils

Cargo subcommands to invoke the LLVM tools shipped with the Rust toolchain

cargo-expand

Show the result of macro expansion

cargo-generate

cargo, make me a project

cargo-make

Rust task runner and build tool

cargo-outdated

Displays information about project dependency versions

cargo-release

Cargo subcommand for you to smooth your release process.

cargo-tarpaulin

Cargo-Tarpaulin is a tool to determine code coverage achieved via tests

cargo-tree

Display a tree visualization of a dependency graph

cargo-update

Update dependencies as recorded in the local lock file

cargo-watch

Watches over your Cargo project’s source

cargo-wizard

Cargo subcommand for applying Cargo profile templates

rustfilt

Demangles names generated by the rust compiler

Testing

Logging und Tracing

Performanz messen

  • flamegraph

evcxr

Ideen