liyun6666/moonseal
GitHub: liyun6666/moonseal
MoonSeal 是一个 MoonBit 原生的发布就绪审计与 CycloneDX SBOM 生成工具,解决通用扫描工具无法解析 MoonBit 模块格式和包坐标的问题。
Stars: 0 | Forks: 0
# MoonSeal
MoonSeal 是一个原生的 MoonBit 发布就绪审计工具和 CycloneDX SBOM
生成器。它能够解析 MoonBit 清单文件和 Mooncakes 包坐标,
将仓库元数据转化为可操作的审计发现和标准的软件物料清单。
**中文简介:** MoonSeal 是面向 MoonBit 项目的软件供应链清单与开源合规
工具。它可以检查项目发布条件、许可证声明和依赖信息,并生成 CycloneDX
1.6 SBOM。
## 为什么选择 MoonSeal?
通用扫描工具无法理解 MoonBit 当前的 `moon.mod` 格式、
其旧版的 `moon.mod.json` 格式,或是 `pkg:mooncakes` 包 URL。MoonSeal
提供了一个轻量、确定性的核心库,以及专为 MoonBit 仓库和 CI 流水线
设计的实用 CLI。
当前功能:
- 解析当前及旧版 MoonBit 模块清单。
- 提取模块元数据和 Mooncakes 依赖。
- 验证常见的 SPDX 标识符和复合表达式。
- 检测常见的许可证文本及声明不匹配问题。
- 检查 README、LICENSE、仓库 URL、CI、更新日志及源码是否存在。
- 强制执行 `moonseal-policy.json` 中的仓库特定策略。
- 分析依赖锁定、坐标、重复项及版本冲突。
- 生成文本、JSON、Markdown 和 SARIF 审计报告。
- 生成确定性的 CycloneDX 1.6 SBOM 文档。
- 对比审计基线并识别回归问题。
- 生成 in-toto/SLSA 来源声明。
- 在 WebAssembly 后端上运行;在可用的情况下支持原生构建。
## 快速开始
安装 [MoonBit 工具链](https://www.moonbitlang.com/download),克隆本
仓库,然后运行:
```
moon update
moon run cmd/main scan .
```
示例输出:
```
MoonSeal audit: liyun6666/moonseal
Score: 100/100
Source: 4362 MoonBit lines | 0 errors | 0 warnings
READY No release-readiness issues found.
```
生成 CycloneDX SBOM:
```
moon run cmd/main sbom . -o moonseal.cdx.json
```
有关从此仓库生成并经过 schema 验证的示例,请参阅
[`examples/moonseal.cdx.json`](examples/moonseal.cdx.json)。
将 MoonSeal 用作阻塞性 CI 检查:
```
moon run cmd/main check .
```
获取机器可读报告:
```
moon run cmd/main scan . --json
```
生成 Markdown 构建摘要:
```
moon run cmd/main scan . --markdown
```
为代码扫描平台生成 SARIF 报告:
```
moon run cmd/main scan . --sarif
```
分析直接的 Mooncakes 依赖:
```
moon run cmd/main dependencies .
```
强制执行已提交的仓库策略:
```
moon run cmd/main policy . --policy moonseal-policy.json
```
## 命令
| 命令 | 用途 |
| --- | --- |
| `moonseal scan [PATH] [--json \| --markdown \| --sarif]` | 审计项目并打印发现的问题 |
| `moonseal check [PATH]` | 审计并在存在阻塞性发现时报错退出 |
| `moonseal sbom [PATH] [-o FILE]` | 生成 CycloneDX 1.6 SBOM |
| `moonseal dependencies [PATH] [--json]` | 分析依赖元数据 |
| `moonseal policy [PATH] [--policy FILE] [--json]` | 强制执行仓库策略 |
| `moonseal help` | 显示命令帮助 |
在开发过程中,请使用 `moon run cmd/main` 替代 `moonseal`。
## 审计规则
| 代码 | 严重程度 | 检查项 |
| --- | --- | --- |
| MS001 | Error | 模块名称是否存在 |
| MS002 | Error | 模块版本是否存在 |
| MS003 | Error | SPDX 许可证声明是否存在 |
| MS004 | Error | SPDX 表达式是否被识别 |
| MS005 | Warning | 仓库 URL 是否存在 |
| MS006 | Error | License 文件是否存在 |
| MS007 | Error | README 是否存在 |
| MS008 | Warning | GitHub Actions 工作流是否存在 |
| MS009 | Warning | 更新日志是否存在 |
| MS010 | Info | `.gitignore` 是否存在 |
| MS011 | Error | 声明的与检测到的许可证是否一致 |
| MS012 | Warning | 许可证文本能否被识别 |
| MS013 | Error | MoonBit 源码是否存在 |
| MS014 | Warning | 仓库 URL 是否使用受认可的 Git 传输协议 |
MoonSeal 提供的是工程层面的信号,而非法律建议。通过的审计报告
不能替代法律审查。
## 库 API
核心包没有文件系统副作用。其主要公开函数包括:
- `parse_manifest(path, text)`
- `normalize_license(identifier)`
- `valid_spdx(expression)`
- `detect_license(text)`
- `audit(facts)`
- `evaluate_policy(policy, facts, report)`
- `analyze_dependencies(project)`
- `render_text(report)`, `render_json(report)`, 和 `render_sarif(report)`
- `cyclonedx(project)` 和 `cyclonedx_string(project)`
- `compare_reports(previous, current)`
- `provenance(project, options)`
有关包边界的说明,请参阅[架构指南](docs/ARCHITECTURE.md)。
## 开发与测试
```
moon fmt
moon check --target wasm -d
moon test --target wasm
moon build --target wasm --release
moon run --target wasm cmd/main check .
```
测试涵盖了两种清单格式、依赖提取、SPDX 验证、
许可证检测、审计评分、报告生成和 CycloneDX 输出。
有关当前的交付边界,请参阅 [MVP 状态与复现检查清单](docs/MVP_STATUS.md)。
## 竞赛
MoonSeal 是为 2026 MoonBit 国产基础软件生态开源大赛
8 月黑客松 开发的。单页中文申报书可在
[`docs/PROJECT_PROPOSAL.md`](docs/PROJECT_PROPOSAL.md) 中查看。
## 许可证
Apache-2.0。请参阅 [LICENSE](LICENSE)。
标签:AI工具, CycloneDX, MoonBit, SBOM生成, 云安全监控, 开源合规, 知识图谱, 聊天机器人, 静态分析