方向反转:此前 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 重写为单源开发流程。
98 lines
4.0 KiB
Markdown
98 lines
4.0 KiB
Markdown
# 开发与发布
|
||
|
||
## 本仓是唯一来源(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
|