メインコンテンツまでスキップ

Cargo Deny

cargo-denyは、プロジェクトの依存関係グラフをリントし、すべての依存関係が期待と要求を満たしていることを確認するcargoプラグインです。ライセンスポリシーの施行、安全でないまたは望まれていない依存関係の検出と防止、およびRustプロジェクトのコード品質の維持に役立ちます。

クイックスタート

cargo-denyを使用するには、まずインストールする必要があります。次のコマンドをターミナルで実行して行います:

cargo install --locked cargo-deny

プロジェクトをデフォルト設定で初期化し、プロジェクトに対してすべてのチェックを実行します。

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

コマンドラインインターフェース

initコマンド(cargo deny init)

cargo-denyの設定は少し複雑なので、プロジェクトのリント方法を設定する出発点として、テンプレートから設定ファイルを作成するinitコマンドを提供しています。

initコマンドは、デフォルトのcwd/deny.tomlの代わりに設定のパスとして使用するパスを引数として取ることができます。

cargo deny init

または

cargo deny init path/to/deny.toml

checkコマンド(cargo deny check)

checkコマンドは、cargo-denyの主要なサブコマンドで、プロジェクトのすべてのクレートを実際に実行し、設定に対してチェックします。

使用法: cargo-deny check [OPTIONS] [WHICH]...

引数

advisories

アドバイザリーチェックは、アドバイザリーデータベースを見てクレートの問題を検出するために使用されます。

cargo deny check advisories

bans

bansチェックは、特定のクレートを拒否(または許可)し、同じクレートの複数のバージョンを検出して処理するために使用されます。

cargo deny check bans

licenses

ライセンスチェックは、使用するすべてのクレートが受け入れ可能なライセンス条件を持っていることを確認するために使用されます。cargo-denyは、各クレートによって指定されたライセンス要件を指定した設定と照らし合わせて評価し、プロジェクトがそのクレートのライセンス要件を満たしているかどうかを判断します。

cargo deny check licenses

sources

sourcesチェックは、クレートが信頼できるソースからのみ来ることを確認します。

cargo deny check sources

オプション

-A, --allow

リント許可を設定

--audit-compatible-output cargo-auditからcargo-denyへの移行を容易にするために、このフラグはcargo-denyにcargo-auditと同じ出力を行い、cargo-auditと同様にstderrではなくstdoutに出力させます。

このフラグは出力フォーマットがJSONの場合にのみ適用されること、およびcargo-denyが複数のアドバイザリーデータベースをサポートしているため、単一のJSONオブジェクトではなく、ユニークなアドバイザリーデータベースごとに1つがあることに注意してください。

-c, --config 使用する設定のパス

指定されていない場合はcwd/deny.tomlがデフォルトになります

-d, --disable-fetch アドバイザリーデータベースのフェッチを無効にする

アドバイザリーチェックを実行するとき、設定されたアドバイザリーデータベースがフェッチされ開かれます。このフラグが渡されると、データベースはフェッチされませんが、ローカルにすでに存在しない場合はエラーが発生します。

このオプションは、グローバルオプションで--offlineフラグが使用されている場合にも設定されます。

--exclude-dev trueに設定されている場合、ワークスペースのクレートでさえも、すべての開発依存関係は、チェックに使用されるクレートグラフに含まれません。

-D, --deny リント拒否を設定

--feature-depth 包含グラフに機能エッジが追加される深さを指定

-g, --graph グラフ出力のルートディレクトリへのパス

設定されている場合、同じクレートの複数のバージョンが検出されるたびにdotvizグラフが作成されます。

--hide-inclusion-graph クレートの情報を出力するときに包含グラフを隠す

デフォルトでは、診断メッセージが特定のクレートに関連している場合、cargo-denyはプロジェクトにそのクレートがどのように取り込まれたかを示すために逆依存グラフを診断に追加します。

ある診断メッセージ

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

-s, --show-stats ログレベルに関係なく、すべてのチェックの統計を表示する

-W, --warn リント警告を設定

FAQ

パッケージの任意のライセンスを受け入れることを許可

  • 質問一: クレートに対して有効なライセンス表現を取得できませんでした。 エラー情報:
error[L003]: ring = 0.16.20 はライセンスがありません
┌─ ring 0.16.20 (registry+https://github.com/rust-lang/crates.io-index):2:9

2 │ name = "ring"
│ ^^^^ クレートに対して有効なライセンス表現を取得できませんでした
3 │ version = "0.16.20"
4 │ license = ""
│ - ライセンス表現が指定されていません
5 │ license-files = [
6 │ { path = "LICENSE", hash = 0xbd0eed23, score = 0.67, license = "OpenSSL" },

解決方法は? deny.tomlファイルに以下の情報を追加します:

[[licenses.clarify]]
name = "ring"
# SPDXは、OpenSSLがOpenSSLとSSLeayの両方のライセンスを含むと考えています
# https://spdx.org/licenses/OpenSSL.html
# ISC - BoringSSLとringはこれをそれぞれの新しいファイルに使用しています
# MIT - "third_party/内のファイルにはそれぞれ独自のライセンスがあります。MIT
# ライセンスは、他のthird_partyディレクトリとは異なり、
# テスト以外のライブラリにコンパイルされるthird_party/fiat用に以下に含まれています。"
# OpenSSL - 明らかに
expression = "ISC AND MIT AND OpenSSL"
license-files = [{ path = "LICENSE", hash = 0xbd0eed23 }]