Cargo Deny
cargo-deny est un plugin cargo qui vous permet de vérifier le graphe des dépendances de votre projet pour vous assurer que toutes vos dépendances sont conformes à vos attentes et exigences. Il vous aide à appliquer des politiques de licence, à détecter et prévenir les dépendances non sécurisées ou indésirables, et à maintenir la qualité du code dans vos projets Rust.
Démarrage rapide
Pour utiliser cargo-deny, vous devez d'abord l'installer. Vous pouvez le faire en exécutant la commande suivante dans votre terminal :
cargo install --locked cargo-deny
initialise votre projet avec une configuration par défaut, puis exécute tous les contrôles sur votre projet.
cargo-deny && cargo deny init && cargo deny check
Interface de ligne de commande
La commande init (cargo deny init)
La configuration de cargo-deny est un peu compliquée, donc nous fournissons la commande init pour créer un fichier de configuration à partir d'un modèle afin de vous donner un point de départ pour configurer la façon dont vous voulez que cargo-deny vérifie votre projet.
La commande init peut prendre un chemin comme argument pour l'utiliser comme chemin de la configuration au lieu de celui par défaut qui est cwd
/deny.toml.
cargo deny init
ou
cargo deny init path/to/deny.toml
La commande check (cargo deny check)
La commande check est la sous-commande principale de cargo-deny car c'est elle qui passe réellement en revue toutes les crates de votre projet et les vérifie par rapport à votre configuration.
Utilisation : cargo-deny check [OPTIONS] [QUOI]...
Arguments
advisories
Le contrôle advisories est utilisé pour détecter des problèmes pour les crates en consultant une base de données d'avis.
cargo deny check advisories
bans
Le contrôle bans est utilisé pour refuser (ou autoriser) des crates spécifiques, ainsi que pour détecter et gérer plusieurs versions de la même crate.
cargo deny check bans
licences
Le contrôle licences est utilisé pour vérifier que chaque crate que vous utilisez a des termes de licence que vous trouvez acceptables. cargo-deny fait cela en évaluant les exigences de licence spécifiées par chaque crate par rapport à la configuration que vous avez spécifiée, pour déterminer si votre projet répond aux exigences de licence de cette crate.
cargo deny check licenses
sources
Le contrôle sources assure que les crates proviennent uniquement de sources en lesquelles vous avez confiance.
cargo deny check sources
Options
-A, --allow
Définir lint permis
--audit-compatible-output Pour faciliter la transition de cargo-audit à cargo-deny, ce drapeau indiquera à cargo-deny de produire exactement la même sortie que cargo-audit, sur stdout au lieu de stderr, tout comme avec cargo-audit.
Notez que ce drapeau ne s'applique que lorsque le format de sortie est JSON, et notez que puisque cargo-deny prend en charge plusieurs bases de données consultatives, au lieu d'un seul objet JSON, il y en aura 1 pour chaque base de données consultative unique.
-c, --config Chemin vers la config à utiliser
Par défaut à cwd/deny.toml si non spécifié
-d, --disable-fetch Désactiver la récupération de la base de données consultative
Lors de l'exécution du contrôle advisories, la base de données consultative configurée sera récupérée et ouverte. Si ce drapeau est passé, la base de données ne sera pas récupérée, mais une erreur se produira si elle n'existe pas déjà localement.
Cette option est également définie si le drapeau --offline est utilisé dans les options globales.
--exclude-dev Si défini sur vrai, toutes les dépendances de développement, même celle pour les crates d'espace de travail, ne sont pas incluses dans le graphe des crates utilisé pour aucun des contrôles.
-D, --deny Définir lint refusé
--feature-depth Spécifie la profondeur à laquelle les bords de fonctionnalité sont ajoutés dans les graphes d'inclusion
-g, --graph Chemin vers le répertoire racine de sortie du graphe
Si défini, un graphe dotviz sera créé chaque fois que plusieurs versions de la même crate sont détectées.
--hide-inclusion-graph Cache le graphe d'inclusion lors de l'impression des infos pour une crate
Par défaut, si un message de diagnostic concerne une crate spécifique, cargo-deny appendra un graphe de dépendance inverse au diagnostic pour vous montrer comment cette crate a été intégrée dans votre projet.
quelque message de diagnostic
the-crate
├── a-crate
└── b-crate
└── c-crate
-s, --show-stats Afficher les statistiques pour tous les contrôles, quel que soit le niveau de journal
-W, --warn Définir des avertissements lint
FAQ
Autoriser l'acceptation de toute licence d'un paquet
- Question un : une expression de licence valide n'a pas pu être récupérée pour la crate. informations sur l'erreur :
error[L003]: ring = 0.16.20 est sans licence
┌─ ring 0.16.20 (registre+https://github.com/rust-lang/crates.io-index):2:9
│
2 │ nom = "ring"
│ ^^^^ une expression de licence valide n'a pas pu être récupérée pour la crate
3 │ version = "0.16.20"
4 │ licence = ""
│ - expression de licence non spécifiée
5 │ fichiers de licence = [
6 │ { chemin = "LICENCE", hash = 0xbd0eed23, score = 0.67, licence = "OpenSSL" },
Comment résoudre ? Dans le fichier deny.toml, ajoutez les informations suivantes :
[[licenses.clarify]]
nom = "ring"
# SPDX considère que OpenSSL englobe à la fois les licences OpenSSL et SSLeay
# https://spdx.org/licenses/OpenSSL.html
# ISC - BoringSSL et ring utilisent tous deux cela pour leurs nouveaux fichiers
# MIT - "Les fichiers dans third_party/ ont leurs propres licences, tel que décrit en eux. La licence MIT,
# pour third_party/fiat, qui, contrairement à d'autres répertoires third_party, est
# compilée dans des bibliothèques non-test, est incluse ci-dessous."
# OpenSSL - Évidemment
expression = "ISC ET MIT ET OpenSSL"
fichiers de licence = [{ chemin = "LICENCE", hash = 0xbd0eed23 }]