mstykow/provenant
GitHub: mstykow/provenant
Rust 重写的 ScanCode 兼容代码扫描工具,用于高效检测许可证合规性、提取包元数据并生成多种行业标准格式的合规报告。
Stars: 12 | Forks: 2
# Provenant
一个使用 Rust 重写的 [ScanCode Toolkit](https://github.com/aboutcode-org/scancode-toolkit),用于扫描代码库的许可证、包元数据、文件元数据以及相关的来源数据。
## 概述
`Provenant` 被构建为一个与 ScanCode 兼容的替代方案,非常注重正确性、功能对等以及安全的静态解析。
目前,该代码仓库涵盖了以下高级扫描工作流:
- 许可证检测以及 ScanCode 风格的许可证结果输出
- 跨多种生态系统的包和依赖元数据提取
- 关联 manifest 和 lockfile 的包组装
- 文件元数据和扫描环境元数据
- 可选的版权、持有者和作者检测
- 可选的 email 和 URL 提取
- 多种输出格式,包括 ScanCode 风格的 JSON、YAML、JSON Lines、SPDX、CycloneDX、HTML、Debian copyright 和自定义模板
有关架构、支持的格式、测试和贡献者指南,请从 [文档索引](docs/DOCUMENTATION_INDEX.md) 开始。
## 功能
- 单个独立的二进制文件
- 具有原生并发性的并行扫描
- 与 ScanCode 兼容的 JSON 输出和广泛的输出格式支持
- 跨多种生态系统的广泛包 manifest 和 lockfile 覆盖
- 针对同级、嵌套和工作区风格输入的包组装
- 包含和排除过滤、路径规范化以及扫描结果过滤
- 用于重复运行的持久化扫描缓存控制
- 安全优先的解析,具有明确的保障措施,并在必要时进行侧重于兼容性的权衡
## 安装说明
### 从 Crates.io 安装
在 `crates.io` 上以 `provenant-cli` 的 crate 名称安装 Provenant 包:
```
cargo install provenant-cli
```
这将安装 `provenant` 二进制文件。
### 下载预编译二进制文件
从 [GitHub Releases](https://github.com/mstykow/provenant/releases) 页面下载适用于您平台的发布归档文件。
解压归档文件并将二进制文件放置在您的 `PATH` 路径中的某个位置。
在 Linux 和 macOS 上:
```
tar xzf provenant-*.tar.gz
sudo mv provenant /usr/local/bin/
```
在 Windows 上,解压 `.zip` 发布文件并将 `provenant.exe` 添加到您的 `PATH` 中。
### 从源码构建
对于常规的源码构建,您只需要 Rust 工具链:
```
git clone https://github.com/mstykow/provenant.git
cd provenant
cargo build --release
```
Cargo 会将编译好的二进制文件放置在 `target/release/` 目录下。
## 用法
```
provenant --json-pp [OPTIONS] ...
```
至少需要一个输出选项。
要查看完整的 CLI 用法,请运行:
```
provenant --help
```
有关引导式工作流和重要的标志组合,请参阅 [CLI 指南](docs/CLI_GUIDE.md)。
### 示例
```
provenant --json-pp scan-results.json --license --package ~/projects/my-codebase --ignore "*.git*" --ignore "target/*" --ignore "node_modules/*"
```
使用 `-` 作为 `FILE` 将输出流写入标准输出,例如 `--json-pp -`。
在单次运行中可以使用多个输出标志,这与 ScanCode CLI 的行为相匹配。
当使用 `--from-json` 时,您可以传入多个 JSON 输入。原生目录扫描也支持多个输入路径,这与 ScanCode 的公共前缀行为相匹配。
持久化缓存是可选的。使用 `--cache scan-results` 可启用扫描结果缓存。还可以通过 `PROVENANT_CACHE` 环境变量或 `--cache-dir` 来控制缓存根目录。
有关生成的包格式支持矩阵,请参阅 [支持的格式](docs/SUPPORTED_FORMATS.md)。
## 性能
`Provenant` 专为高效的原生扫描和并行处理而设计。有关实现细节,请参阅 [架构:性能特征](docs/ARCHITECTURE.md#performance-characteristics)。
## 输出格式
已实现的输出格式包括:
- JSON,包括与 ScanCode 兼容的输出
- YAML
- JSON Lines
- Debian copyright
- SPDX,Tag-Value 和 RDF/XML
- CycloneDX,JSON 和 XML
- HTML 报告
- 自定义模板渲染
输出架构和兼容性方法记录在以下文档中:
- [架构](docs/ARCHITECTURE.md)
- [测试策略](docs/TESTING_STRATEGY.md)
## 文档
- **[文档索引](docs/DOCUMENTATION_INDEX.md)** - 浏览文档的最佳起点
- **[CLI 指南](docs/CLI_GUIDE.md)** - 常见工作流和重要的标志组合
- **[架构](docs/ARCHITECTURE.md)** - 系统设计、处理流水线和设计决策
- **[支持的格式](docs/SUPPORTED_FORMATS.md)** - 生成的包生态系统和文件格式支持矩阵
- **[如何添加解析器](docs/HOW_TO_ADD_A_PARSER.md)** - 添加新解析器的分步指南
- **[测试策略](docs/TESTING_STRATEGY.md)** - 测试方法和准则
- **[ADRs](docs/adr/)** - 架构决策记录
- **[超越对等的改进](docs/improvements/)** - Rust 超越原始 Python 版本的功能
```
cargo run --manifest-path xtask/Cargo.toml --bin generate-index-artifact
```
对于常规的本地开发,`npm run setup` 是一键式启动路径。如果您需要手动重新安装钩子,可以使用 `npm run hooks:install`。这些设置和辅助命令目前是面向 shell 的,因此 Windows 贡献者最好在 WSL2 中运行它们。
## 致谢
`Provenant` 是 [ScanCode Toolkit](https://github.com/aboutcode-org/scancode-toolkit) 的一个独立 Rust 重写版本。它使用 nexB Inc. 和 AboutCode 社区的上游 ScanCode Toolkit 项目作为兼容性、行为和一致性验证的参考。我们感谢 nexB Inc. 和 AboutCode 社区提供的参考实现及其背后广泛的许可证和版权研究。请参阅 [`NOTICE`](NOTICE) 以了解适用于本代码仓库中包含的材料以及包含 ScanCode 派生数据的发行版的保留上游归属声明。
## 许可证
Copyright (c) 2026 Provenant contributors.
Provenant 项目代码根据 [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0) 获得许可。有关包含的 ScanCode Toolkit 材料的保留上游归属声明,请参阅 [`NOTICE`](NOTICE)。
标签:CycloneDX, DevSecOps, Provenant, Rust, ScanCode, SPDX, WebSocket, 上游代理, 云安全监控, 代码安全, 依赖分析, 元数据提取, 包管理, 可视化界面, 威胁情报, 安全扫描, 并行处理, 开发者工具, 开源协议, 时序注入, 漏洞枚举, 网络流量审计, 聊天机器人, 许可证检测, 进程保护, 通知系统, 静态分析