cargo-deny是由EmbarkStudios开发的一个Rust工具,托管在GitHub上(EmbarkStudios/cargo-deny)。它是一个Cargo插件,旨在帮助开发者管理Rust项目的依赖,确保依赖符合特定的要求和期望。
cargo-deny
是由 Embark Studios 开发的一个 Rust 工具,托管在 GitHub 上(EmbarkStudios/cargo-deny)。它是一个 Cargo 插件,旨在帮助开发者管理 Rust 项目的依赖,确保依赖符合特定的要求和期望。Rust 生态以其丰富的 crates(库)而著称,但随着项目规模扩大,依赖管理变得复杂,cargo-deny
应运而生,提供了依赖审查和 Lint 功能。
该工具最初是为 Embark Studios 内部使用设计的,后来开源并得到了社区的支持。它特别适合需要关注依赖安全性、许可证合规性或代码质量的开发者,是 Rust 项目持续集成 (CI) 流水线中的理想选择。
cargo-deny
提供了以下几个主要检查功能,分别对应不同的依赖管理需求:
这些功能通过配置文件 deny.toml
进行定制,使其灵活适应不同项目的需求。
安装 cargo-deny
需要 Rust 环境已就绪,然后运行以下命令:
cargo install --locked cargo-deny
安装完成后,验证是否成功:
cargo deny --version
若显示版本号,安装即完成。
cargo-deny
的核心命令是 cargo deny check
,用于执行检查。以下是基本用法:
首次使用时,运行以下命令生成默认配置文件 deny.toml
:
cargo deny init
这会创建一个模板配置文件,你可以根据需求修改。
在项目根目录运行:
cargo deny check
这会依次执行许可证、禁令、安全建议和来源检查,并输出结果。
如果只想运行某项检查,可以指定参数:
cargo deny check licenses # 检查许可证
cargo deny check bans # 检查禁令
cargo deny check advisories # 检查安全建议
列出项目中所有依赖的许可证:
cargo deny list
deny.toml
是 cargo-deny
的核心配置文件,以下是常见配置项示例:
[licenses]
unlicensed = "deny" # 未指定许可证的 crate 报错
allow = ["MIT", "Apache-2.0"] # 允许的许可证
deny = ["GPL-3.0"] # 禁止的许可证
[bans]
multiple-versions = "warn" # 检测到多版本时警告
deny = [{ crate = "openssl", reason = "use rustls instead" }] # 禁止特定 crate
[advisories]
ignore = ["RUSTSEC-2020-0001"] # 忽略特定安全建议
[sources]
unknown-registry = "deny" # 禁止未知注册表的依赖
allow-registry = ["https://github.com/rust-lang/crates.io-index"] # 允许的注册表
cargo-deny
非常适合集成到 CI 流程中。例如,在 GitHub Actions 中:
name: CI
on: [push, pull_request]
jobs:
cargo-deny:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: EmbarkStudios/cargo-deny-action@v1
with:
command: check
如果某个 crate 未正确声明许可证,可以手动澄清:
[[licenses.clarify]]
crate = "ring"
expression = "ISC"
license-files = [{ path = "LICENSE", hash = 0x001c7e6c }]
cargo install --force cargo-deny
更新到最新版本,以获取新功能和修复。cargo-audit
或 cargo-outdated
使用,全面管理依赖。假设你想检查一个项目的许可证合规性:
cargo install --locked cargo-deny
cargo deny init
deny.toml
,只允许 MIT 许可证:[licenses]
allow = ["MIT"]
cargo deny check licenses
如果有非 MIT 许可证的依赖,工具会报错并提示依赖路径。
cargo-deny
是一个功能强大且易用的 Rust 依赖管理工具,通过检查许可证、安全性、禁令和来源,帮助开发者维护项目质量。它的配置灵活,集成方便,非常适合个人项目和团队开发。希望这份文档能为你的 Rust 开发之旅提供便利
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!