Files
sap-cli-skill/docs/RELEASING.md
T
吴让宇 c5905a5b1e refactor: 本仓升为唯一源(原 sap-cli 源码仓归档)
方向反转:此前 SKILL.md 是「模板渲染产物」、sap-cli 是源;现 sap-cli 归档,
sap-cli-skill 承接开发与分发,SKILL.md 回归手工维护的正本。

迁移(来自 sap-cli,共 104 文件):
- tests/           692 例测试(15 个文件的内联 sys.path 改指 assets/)
- openspec/        SDD 规格与归档变更(42 文件)
- docs/            开发文档与 ADT 原理(含 dev/CLAUDE.md、AGENTS.md)
- .claude/         rules 副本 + settings.json(供 Claude Code)
- .github/ .hermes/ .pre-commit-config.yaml .editorconfig CLAUDE.md
- scripts/ 保持仅 setup.py(pack_skill.py 已随旧仓归档,不迁)

修复(迁移暴露的真实缺陷):
- assets/pyproject.toml 的 build-backend 写作 `setuptools.backends._legacy:_Backend`,
  该模块在 setuptools 中不存在 → `pip install -e` 从来装不上。改为 build_meta。
  实测:临时 venv 安装成功,sap-cli --help 正常列出 31 个命令
- pyproject readme 指向不存在的 assets/README.md(editable 安装会失败)→ 改内联文本
- pyproject urls 改指 sap-cli-skill

机制调整:
- .github/workflows/ci.yml 适配 assets/ 布局;顶部注明该工作流仅 GitHub 执行,
  本仓在 Gitee 不会自动跑
- pre-commit 增本地测试门禁(Gitee 上真正生效的那道)
- .gitignore 合并旧仓完整规则(保留 log/ 下 md 知识库入库,只忽略运行日志)
- 大文件上限 100KB→1MB(架构图 512KB)

守卫测试 tests/unit/test_repo_guards.py(10 → 18 例):
- SKILL.md 须记录 parser 全部 CLI 命令 / 铁律 1-5 须为真实小节标题 / 示例不得违反铁律 5
- references/ 规则齐备;.claude/rules 与 references 必须一致(实测抓到一次真实漂移)
- VERSION == sapcli.__version__ == README 版本
- 仓内不得再出现 pack_skill.py / skill-src(防废弃流程回潮)

698 tests OK;editable 安装与 CLI 入口经临时 venv 实测通过。
docs/RELEASING.md 重写为单源开发流程。
2026-09-11 00:40:15 +08:00

98 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 开发与发布
## 本仓是唯一来源(2026-09-11 起)
`sap-cli-skill` 同时是**技能分发包**与**工具源码仓**,也是 SAP 相关实机操作的运行版。
`sap-cli` 源码仓已**归档**(只读留档),不再接受改动。
```
sap-cli-skill/
├── SKILL.md ← 技能文档(手工维护,AI Agent 使用指南)
├── INSTALL.md ← 完整安装指南(手工维护)
├── README.md ← 项目说明
├── VERSION ← 版本号(须与 assets/sapcli/__version__ 一致)
├── assets/ ← 工具源码与打包元数据(Python 包根)
│ ├── sapcli/ ← 工具源码
│ ├── main.py
│ ├── pyproject.toml ← 版本动态取自 sapcli.__version__
│ ├── requirements.txt
│ └── config.ini.example
├── references/ ← 规则正本(sap-tool-constraints / abap-coding-rules / error-handling
├── tests/ ← 单元测试与 E2E 夹具
├── log/ ← 错误知识库(LLM-WIKI 格式,md 入库)
├── docs/ ← 开发文档、ADT 原理文档
├── openspec/ ← SDD 规格
├── scripts/setup.py ← 安装脚本
├── .claude/rules/ ← 规则副本(供 Claude Code,须与 references/ 一致)
└── .github/workflows/ ← CI
```
> 目录语义说明:`assets/` 是**技能包**的载荷目录(Hermes / Claude Code 技能约定),
> 因此工具源码放在其中而非仓库根。安装与调用都指向 `assets/`。
## 日常开发
```bash
cd D:/Gitee/sap-cli-skill
# 装依赖(editable
pip install -e "./assets[dev]"
# 跑全量测试(692 例)
python -m unittest discover -s tests -p "test_*.py"
# 只跑单元测试(更快)
python -m unittest discover -s tests/unit -t .
```
改代码 → 改文档(需要时)→ 跑测试 → 提交。**未绿不提交。**
## 版本与发布
版本号权威源是 `assets/sapcli/__init__.py``__version__`
1.`assets/sapcli/__init__.py``__version__`
2. 同步 `VERSION` 文件(`test_repo_guards.py` 会断言二者一致,忘了会红)
3. 提交并打 tag
```bash
git add -A && git commit -m "chore: bump to vX.Y.Z"
git tag -a vX.Y.Z -m "sap-cli vX.Y.Z"
git push origin HEAD && git push origin vX.Y.Z
```
发布即推送本仓。Hermes 侧无需拷贝——`profiles/*/skills/productivity/sap-cli`
是指向本仓的 junction,专家下一轮即读到新内容。
## 规则文件:两处副本必须一致
`references/*.md` 是**正本**(随技能分发给专家、被 `SKILL.md` 引用);
`.claude/rules/*.md` 是供 Claude Code 读取的**副本**。
两者内容必须一致,由 `tests/unit/test_repo_guards.py` 的
`TestRuleCopiesInSync` 断言。改规则时**两处都要改**,只改一处测试会红。
## 两道守卫(提交前必过)
`tests/unit/test_repo_guards.py` 守住几类「静默失效」:
| 守卫 | 防的问题 |
|------|----------|
| SKILL.md 记录 parser **全部** CLI 命令 | 文档与代码脱节(曾只写 9 个而实际 31 个) |
| 铁律 1–5 是**真实小节标题** | 子串检查被正文交叉引用蒙过 |
| 示例不得出现 `--path ./src` | 违反铁律 5 的目录结构 |
| `references/` 规则齐备且含关键规则 | 规则静默丢失 |
| `VERSION` == `sapcli.__version__` == README 版本 | 版本漂移(曾 2.3.0 vs 2.5.1 |
| `.claude/rules/` == `references/` | 规则副本漂移 |
## 已废弃的做法(勿再使用)
- **`pack_skill.py` / `skill-src/SKILL.md.tmpl` 打包流程**——已随 sap-cli 归档。
现在 `SKILL.md` 是手工维护的正本,**没有构建步骤**,也就没有「构建覆盖手改」的风险。
不要再引入「模板渲染 → 覆盖仓库文档」这类机制。
- **`D:/Codespace/SAP-CLI-SKILL`**——早期开发副本,与分发仓同远端,2026-09-11 已删除。
- **向 `D:/Gitee/sap-cli` 提交改动**——已归档。
## Gitee 远程
https://gitee.com/markwury168/sap-cli-skill.git