diff --git a/ci/04-crates-allow.sh b/ci/04-crates-allow.sh new file mode 100644 index 0000000000000000000000000000000000000000..8cc8ecf15be40b9564ce9ada1906de4c8dd93e35 --- /dev/null +++ b/ci/04-crates-allow.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +source $SCRIPT_DIR/common_function + +#获取allow crates +ALLOWED_CRATES=$(cat $SCRIPT_DIR/crates.allow | grep -e "^-" | cut -d ':' -f 1 | cut -d '-' -f 2) + +# 提取Cargo.lock中新增的依赖项 +DEPS=$(git diff origin/master --name-only | grep \.lock$ | xargs -i git diff {} | grep -e "^+name =" | cut -d '=' -f 2) + +# 检查每个依赖项 +for DEP in $DEPS; do + if ! grep -q "^$DEP$" <<< "$ALLOWED_CRATES"; then + echo "非法crate被发现: $DEP" + exit 1 + fi +done + +echo "所有依赖项都是允许的。" diff --git a/ci/crates.allow b/ci/crates.allow new file mode 100644 index 0000000000000000000000000000000000000000..3c1ade6e50de85a1da4ad646c1373da90bd4d610 --- /dev/null +++ b/ci/crates.allow @@ -0,0 +1,30 @@ +### 基本库 +- nix +- libc + +### 系统和配置 + +- clap: 用于命令行参数解析。 + +### 网络和并发 + +- tokio: 异步运行时。 +- reqwest: HTTP 客户端。 + +### 文件和 IO 操作 + +- serde: 通用的序列化/反序列化框架。 + +### 日志 + +- log: 日志接口。 + +### 安全性 + +- openssl: 安全通信。 +- ring: 加密算法。 + +### 其他常用库 + +- one_cell: 编译时初始化的静态变量。 +- regex: 正则表达式。 diff --git a/libs.md b/libs.md new file mode 100644 index 0000000000000000000000000000000000000000..ad82b75f4adc455fb09cbbfb44a9eb41b06fc47b --- /dev/null +++ b/libs.md @@ -0,0 +1,48 @@ +在你的 Rust 项目中,明确地管理依赖是很重要的,特别是在一个涉及底层系统操作的项目中。为此,你可以在仓库中指定一份清单,包含推荐或必须使用的 crate。对于超出这些推荐范围的 crate,实施一个评审过程以确保代码质量和安全性。以下是你可能会在 README.md 文件中包含的内容: + +--- + +## 推荐 Rust Crates 清单 + +为了保证项目的安全性、效率和一致性,以下列出的是我们推荐的 crate 列表。**开发时请优先考虑使用这些自研的 crate, 门禁适当时候, 会阻止使用其他 libs crate 的使用**。 + +### 系统和配置 + +- clap: 用于命令行参数解析。 + +### 网络和并发 + +- tokio: 异步运行时。 +- reqwest: HTTP 客户端。 + +### 文件和 IO 操作 + +- serde: 通用的序列化/反序列化框架。 + +### 日志 + +- log: 日志接口。 + +### 安全性 + +- openssl: 安全通信。 +- ring: 加密算法。 + +### 其他常用库 + +- one_cell: 编译时初始化的静态变量。 +- regex: 正则表达式。 + +--- + +## Crates 评审流程 + +为了保证项目的质量和安全性,任何超出推荐列表的 crate 需要经过以下评审流程: + +- 提出请求: 在项目的 issue 跟踪器中创建一个新的 issue,说明为什么需要这个 crate,包括其功能、用途和为什么推荐的 crate 不足以满足需求。**建议使用依赖少,使用多,更新频繁的 crate** +- 安全与兼容性评估: 团队将对 crate 进行安全性、维护状态、许可证和社区支持等方面的评估。 +- 讨论和决定: 团队成员将讨论此请求,并最终做出是否接受这个新 crate 的决定。 +- 文档化: 接受的 crate 将被添加到[推荐清单](ci/crates.allow)中,并记录评审过程和结果。 + 遵循这一流程有助于维护项目的健康和安全,确保所有依赖都是经过审查和认可的。 + +请根据实际情况调整这些内容,确保它们适合你的项目和团队的需求。