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 }]