本部落格所有文章除特別宣告外,均採用CC BY-NC-SA 4.0許可協議。轉載請註明來自 唯你
簡介
cargo deny 是一個 Rust 工具,用於檢查專案依賴項的許可證、安全性和其他合規性問題。在 Rust CI(持續整合)中,cargo deny 扮演著重要角色:
- 許可證檢查:確保專案使用的所有依賴項的許可證都符合專案的許可政策。
- 安全漏洞掃描:檢查依賴項是否存在已知的安全漏洞。
- 依賴項合規性:驗證依賴項是否符合專案的其他要求,如版本限制或來源限制。
- 禁用特定依賴項:允許明確禁止使用某些依賴項。
在 CI 流程中,cargo deny 通常作為一個檢查步驟執行,以確保專案在構建和部署之前滿足所有合規性要求。這有助於維護專案的質量、安全性和法律合規性。
一句話:cargo deny 讓你合法合規放心使用第三方依賴
使用
- 地址:Cargo deny
- 安裝命令:
cargo install --locked cargo-deny && cargo deny init && cargo deny check
常見錯誤
使用 cargo-deny 報錯 failed to open advisory database
Installed package `cargo-deny v0.16.1` (executable `cargo-deny.exe`)
PS E:\Rust\easy-publish> cargo deny check
2024-11-11 02:07:34 [ERROR] failed to fetch advisory database https://github.com/RustSec/advisory-db: An IO error occurred when talking to the server: error sending request for url (https://github.com/RustSec/advisory-db/info/refs?service=git-upload-pack)
方案一: 可以嘗試:
1. 刪除 ~/.cargo/advisory-db/ 目錄,然後使用 cargo deny fetch / cargo deny check 重新下載它。多試幾次?
2. 在 deny.toml 配置中的 git 地址修改為 gitee 上的映象地址:https://gitee.com/tyr-rust-bootcamp-mirror/advisory-db.git
3. 刪掉 deny.toml,執行 cargo deny init 重新生成一個,然後按照你的需要修改。
4. 檢查你的網路,想辦法~
方案二:可以嘗試透過執行:cargo deny check advisories 解決
升級最新版本,大量 this key has been removed
解決辦法:
- 先刪除原專案下的 deny.toml 配置檔案
- 在專案根目錄下執行命令列
cargo deny init
重新生成一份新版本 deny.toml 檔案 - 在 deny.toml 中找到 allow 然後將原來 allow 中許可證,類似如下程式碼,複製到新 deny.toml 中即可
allow = [
"MIT",
"Apache-2.0",
"Apache-2.0 WITH LLVM-exception",
"Unicode-DFS-2016",
"MPL-2.0",
"BSD-2-Clause",
"BSD-3-Clause",
"ISC",
"CC0-1.0",
"OpenSSL",
]
- 執行
cargo deny check
重新檢測一波,是否正常