- build.py: 移除 --obfuscate 参数,默认混淆模式;从 git config 读取 author,动态注入 SKILL.md - publish.py: 新增发布脚本,自动 clone 目标仓库、同步 build/ 内容、git commit+push - publish.sh: 新增一键构建+发布脚本 - skill-publishing spec: 新增发布规范 - skill-packaging spec: 更新构建规范
110 lines
4.1 KiB
Markdown
110 lines
4.1 KiB
Markdown
## Purpose
|
||
|
||
提供自动化的 skill 打包能力,将 skill/SKILL.md 和 scripts/ 目录打包到 build/ 目录,便于 skill 分发。
|
||
|
||
## Requirements
|
||
|
||
### Requirement: build.py 一键打包
|
||
系统 SHALL 提供 build.py 脚本,运行后完成 skill 的完整打包流程。
|
||
|
||
#### Scenario: 运行 build.py 成功
|
||
- **WHEN** 用户执行 `uv run --with pyarmor python build.py`
|
||
- **THEN** 脚本完成所有打包步骤并输出成功信息
|
||
|
||
### Requirement: 构建目录清理重建
|
||
系统 SHALL 在每次构建前删除整个 build 目录,然后重建空的 build 目录。
|
||
|
||
#### Scenario: 删除并重建 build 目录
|
||
- **WHEN** 构建开始
|
||
- **THEN** 脚本删除整个 build 目录(如有),然后创建新的空 build 目录
|
||
|
||
### Requirement: SKILL.md 动态生成
|
||
系统 SHALL 读取 SKILL.md 模板,动态注入 version 和 author 字段后写入 build/SKILL.md。
|
||
|
||
#### Scenario: SKILL.md 包含动态元数据
|
||
- **WHEN** 构建执行
|
||
- **THEN** build/SKILL.md 的 metadata 包含 version 和 author 字段
|
||
|
||
#### Scenario: version 是时间戳
|
||
- **WHEN** 构建在 2026年3月11日 14点30分22秒执行
|
||
- **THEN** build/SKILL.md 中 `metadata.version` 值为 "20260311_143022"
|
||
|
||
#### Scenario: author 来自 git 配置
|
||
- **WHEN** git config user.name 是 "Your Name",git config user.email 是 "your@email.com"
|
||
- **THEN** build/SKILL.md 中 `metadata.author` 值为 "Your Name <your@email.com>"
|
||
|
||
### Requirement: git 配置读取
|
||
系统 SHALL 从 git config 读取 user.name 和 user.email。
|
||
|
||
#### Scenario: git config 读取成功
|
||
- **WHEN** git config 已设置 user.name 和 user.email
|
||
- **THEN** 系统读取到正确的值
|
||
|
||
#### Scenario: git config 未设置
|
||
- **WHEN** git config user.name 或 user.email 未设置
|
||
- **THEN** 系统显示错误信息并退出
|
||
|
||
### Requirement: 时间戳版本号
|
||
系统 SHALL 生成 YYYYMMDD_HHMMSS 格式的时间戳作为构建版本标识。
|
||
|
||
#### Scenario: 时间戳格式正确
|
||
- **WHEN** 构建在 2025年3月9日 14点30分22秒执行
|
||
- **THEN** 生成的版本号为 20250309_143022
|
||
|
||
### Requirement: 输出构建信息
|
||
系统 SHALL 在构建完成后打印版本号和构建结果信息。
|
||
|
||
#### Scenario: 显示构建信息
|
||
- **WHEN** 构建成功完成
|
||
- **THEN** 控制台输出版本号和作者信息
|
||
|
||
### Requirement: 仅混淆构建
|
||
系统 SHALL 仅提供混淆构建模式,移除非混淆选项。
|
||
|
||
#### Scenario: build.py 始终混淆
|
||
- **WHEN** 用户执行 `uv run --with pyarmor python build.py`
|
||
- **THEN** 系统使用 PyArmor 混淆 scripts 目录代码
|
||
|
||
#### Scenario: 无 --obfuscate 参数
|
||
- **WHEN** 用户运行 build.py
|
||
- **THEN** 系统不需要 --obfuscate 参数,直接执行混淆构建
|
||
|
||
### Requirement: PyArmor 混淆执行
|
||
系统 SHALL 调用 PyArmor 工具对 scripts 目录进行混淆。
|
||
|
||
#### Scenario: PyArmor 成功执行
|
||
- **WHEN** PyArmor 可用
|
||
- **THEN** 系统执行 pyarmor gen --recursive 命令
|
||
|
||
#### Scenario: 混淆后文件输出
|
||
- **WHEN** PyArmor 混淆完成
|
||
- **THEN** build/ 目录包含混淆后的文件和 pyarmor_runtime 子目录
|
||
|
||
### Requirement: PyArmor 未安装友好提示
|
||
系统 SHALL 在 PyArmor 未安装时提供清晰的错误提示,引导用户正确使用 `uv run --with pyarmor`。
|
||
|
||
#### Scenario: PyArmor ImportError
|
||
- **WHEN** 未通过 --with pyarmor 加载
|
||
- **THEN** 系统显示友好错误信息,提示正确命令
|
||
|
||
### Requirement: SKILL.md 保持明文
|
||
系统 SHALL 在混淆模式下仍然将 SKILL.md 作为明文文件复制,不进行混淆。
|
||
|
||
#### Scenario: SKILL.md 保持明文
|
||
- **WHEN** 启用混淆执行构建
|
||
- **THEN** build/SKILL.md 文件为明文,内容包含动态注入的元数据
|
||
|
||
### Requirement: 混淆错误处理
|
||
系统 SHALL 在 PyArmor 混淆失败时捕获错误并显示详细信息。
|
||
|
||
#### Scenario: PyArmor 命令失败
|
||
- **WHEN** pyarmor 命令执行返回非零退出码
|
||
- **THEN** 系统显示退出码、标准输出和错误输出信息
|
||
|
||
### Requirement: 一键发布脚本
|
||
系统 SHALL 提供 publish.sh 脚本,一键执行混淆构建并发布。
|
||
|
||
#### Scenario: publish.sh 执行成功
|
||
- **WHEN** 用户执行 `./publish.sh`
|
||
- **THEN** 系统依次执行混淆构建和发布
|