Zum Hauptinhalt springen

Cargo Deny

cargo-deny ist ein Cargo-Plugin, das es Ihnen ermöglicht, Ihr Projekt's Abhängigkeitsgraph zu linten, um sicherzustellen, dass alle Ihre Abhängigkeiten Ihren Erwartungen und Anforderungen entsprechen.Es hilft Ihnen, Lizenzrichtlinien durchzusetzen, unsichere oder unerwünschte Abhängigkeiten zu erkennen und zu verhindern und die Codequalität in Ihren Rust-Projekten zu erhalten.

Schnellstart

Um cargo-deny zu verwenden, müssen Sie es zuerst installieren. Dies können Sie tun, indem Sie den folgenden Befehl in Ihrem Terminal ausführen:

cargo install --locked cargo-deny

initialisiert Ihr Projekt mit einer Standardkonfiguration und führt dann alle Checks gegen Ihr Projekt aus.

cargo-deny && cargo deny init && cargo deny check

Command Line Interface

Der init-Befehl (cargo deny init)

Die Konfiguration von cargo-deny ist etwas kompliziert, daher bieten wir den init-Befehl an, um eine Konfigurationsdatei aus einer Vorlage für Sie zu erstellen, um Ihnen einen Ausgangspunkt für die Konfiguration zu geben, wie Sie möchten, dass cargo-deny Ihr Projekt lintet.

Der init-Befehl kann einen Pfad als Argument nehmen, um als Pfad der Konfiguration anstelle des Standards zu verwenden, der cwd/deny.toml ist.

cargo deny init

oder

cargo deny init path/to/deny.toml

Der check-Befehl (cargo deny check)

Der check-Befehl ist der primäre Unterbefehl von cargo-deny, da er tatsächlich alle Crates in Ihrem Projekt durchläuft und sie gegen Ihre Konfiguration prüft.

Verwendung: cargo-deny check [OPTIONEN] [WELCHE]...

Argumente

advisories

Der advisories-Check wird verwendet, um Probleme für Crates zu erkennen, indem in einer Advisory-Datenbank gesucht wird.

cargo deny check advisories

bans

Der bans-Check wird verwendet, um bestimmte Crates zu verbieten (oder zu erlauben), sowie um mehrere Versionen derselben Crate zu erkennen und zu behandeln.

cargo deny check bans

licenses

Der licenses-Check wird verwendet, um zu überprüfen, ob jede von Ihnen verwendete Crate Lizenzbedingungen hat, die Sie akzeptieren finden. cargo-deny macht dies, indem es die von jeder Crate angegebenen Lizenzanforderungen gegen die von Ihnen festgelegte Konfiguration auswertet, um festzustellen, ob Ihr Projekt die Lizenzanforderungen dieser Crate erfüllt.

cargo deny check licenses

sources

Der sources-Check stellt sicher, dass Crates nur aus Quellen kommen, denen Sie vertrauen.

cargo deny check sources

Optionen

-A, --allow

Setzen Sie Lint erlaubt

--audit-compatible-output Um den Übergang von cargo-audit zu cargo-deny zu erleichtern, wird durch diese Flagge cargo-deny angewiesen, die exakt gleiche Ausgabe wie cargo-audit zu erstellen, und zwar auf stdout anstelle von stderr, genau wie bei cargo-audit.

Beachten Sie, dass diese Flagge nur gilt, wenn das Ausgabeformat JSON ist, und beachten Sie, dass da cargo-deny mehrere Advisory-Datenbanken unterstützt, anstelle eines einzigen JSON-Objekts, wird es eines für jede einzigartige Advisory-Datenbank geben.

-c, --config Pfad zur zu verwendenden Konfiguration

Standardmäßig auf cwd/deny.toml eingestellt, wenn nicht anders angegeben

-d, --disable-fetch Deaktiviert das Fetchen der Advisory-Datenbank

Beim Ausführen des advisories-Checks wird die konfigurierte Advisory-Datenbank abgerufen und geöffnet. Wenn diese Flagge übergeben wird, wird die Datenbank nicht abgerufen, aber ein Fehler wird auftreten, wenn sie nicht bereits lokal existiert.

Diese Option wird auch gesetzt, wenn die --offline-Flagge in den globalen Optionen verwendet wird.

--exclude-dev Wenn auf true gesetzt, werden alle Entwicklungsabhängigkeiten, auch solche für Workspace-Crates, nicht in den Crate-Graph aufgenommen, der für einen der Checks verwendet wird.

-D, --deny Setzen Sie Lint verweigert

--feature-depth Gibt die Tiefe an, in der Feature-Kanten in Inklusionsgrafiken hinzugefügt werden

-g, --graph Pfad zum graph_output-Stammverzeichnis

Wenn gesetzt, wird ein dotviz-Graph erstellt, wann immer mehrere Versionen derselben Crate erkannt werden.

--hide-inclusion-graph Verbirgt den Inklusionsgraphen beim Ausdrucken von Informationen für eine Crate

Standardmäßig, wenn eine Diagnose-Nachricht eine bestimmte Crate betrifft, fügt cargo-deny einen inversen Abhängigkeitsgraphen an die Diagnose an, um Ihnen zu zeigen, wie diese Crate in Ihr Projekt eingezogen wurde.

irgendeine Diagnose-Nachricht

the-crate
├── a-crate
└── b-crate
└── c-crate

-s, --show-stats Zeigen Sie Statistiken für alle Checks an, unabhängig vom Log-Level

-W, --warn Setzen Sie Lint Warnungen

FAQ

Erlauben Sie, jede Lizenz eines Pakets zu akzeptieren

  • Frage eins: ein gültiger Lizenzausdruck konnte nicht für die Crate abgerufen werden. Fehlerinfo:
error[L003]: ring = 0.16.20 ist unlizenziert
┌─ ring 0.16.20 (registry+https://github.com/rust-lang/crates.io-index):2:9

2 │ name = "ring"
│ ^^^^ ein gültiger Lizenzausdruck konnte nicht für die Crate abgerufen werden
3 │ version = "0.16.20"
4 │ license = ""
│ - Lizenzausdruck wurde nicht festgelegt
5 │ license-files = [
6 │ { path = "LICENSE", hash = 0xbd0eed23, score = 0.67, license = "OpenSSL" },

Wie kann es gelöst werden? In der deny.toml-Datei, fügen Sie die folgenden Informationen hinzu:

[[licenses.clarify]]
name = "ring"
# SPDX betrachtet OpenSSL als umfassend für die Lizenzen OpenSSL und SSLeay
# https://spdx.org/licenses/OpenSSL.html
# ISC - Sowohl BoringSSL als auch ring verwenden dies für ihre neuen Dateien
# MIT - "Dateien in third_party/ haben ihre eigenen Lizenzen, wie dort beschrieben. Die MIT-Lizenz, für third_party/fiat, die, im Gegensatz zu anderen third_party-Verzeichnissen, in Nicht-Test-Bibliotheken kompiliert wird, ist unten aufgeführt."
# OpenSSL - Offensichtlich
expression = "ISC AND MIT AND OpenSSL"
license-files = [{ path = "LICENSE", hash = 0xbd0eed23 }]