feat: add skill init/check and isolate builder makefile
Give ack, builder, and deployer an explicit init/check mode that reports missing project config instead of failing mid-work. Point builder at makefile.builder so its contract targets do not collide with an existing Makefile.
This commit is contained in:
@@ -7,6 +7,15 @@ builder 脚本只做发布,不做项目特定的构建逻辑。
|
||||
分工原则:**make 管构建(项目内、确定性),skill 脚本管发布(跨项目 SSOT),
|
||||
Agent 只保留授权判断和歧义处理。**
|
||||
|
||||
契约文件固定为项目根 `makefile.builder`,调用方式:
|
||||
|
||||
```bash
|
||||
make -f makefile.builder <target>
|
||||
```
|
||||
|
||||
不要把 builder 目标写进用户的 `Makefile` 或 `makefile`。`check.py` 只读
|
||||
`makefile.builder`。
|
||||
|
||||
## 1. Make 目标
|
||||
|
||||
### 必备目标(所有项目)
|
||||
@@ -30,7 +39,7 @@ Agent 只保留授权判断和歧义处理。**
|
||||
|
||||
规则:
|
||||
|
||||
1. 项目有 DEB 产物的判据:Makefile 配方引用 `dpkg-deb`/`debuild` 或产出 `.deb`。
|
||||
1. 项目有 DEB 产物的判据:`makefile.builder` 配方引用 `dpkg-deb`/`debuild` 或产出 `.deb`。
|
||||
有镜像的判据:项目根存在 `Dockerfile`。
|
||||
2. 双产物项目必须拆 `push-deb`/`push-docker`,`push` 依序聚合两者;单产物项目一个
|
||||
`push` 即可。
|
||||
@@ -49,9 +58,9 @@ Agent 只保留授权判断和歧义处理。**
|
||||
|
||||
### 版本号
|
||||
|
||||
`make version` 输出一行规范版本(无 `v` 前缀)。DEB 的 `Version` 与文件名
|
||||
直接用它;Docker tag 由它渲染。推导入口是 `scripts/version.sh`(`make` 通过
|
||||
`scripts/version.mk` 引用);Builder 只读取 Git 状态,不调用
|
||||
`make -f makefile.builder version` 输出一行规范版本(无 `v` 前缀)。DEB 的
|
||||
`Version` 与文件名直接用它;Docker tag 由它渲染。推导入口是 `scripts/version.sh`
|
||||
(`makefile.builder` 通过 `scripts/version.mk` 引用);Builder 只读取 Git 状态,不调用
|
||||
manage-release,不猜测下一个正式 SemVer。正式 tag 由 manage-release 事先打好。
|
||||
`version.sh` 不执行 `git fetch`。
|
||||
|
||||
@@ -77,7 +86,7 @@ manage-release,不猜测下一个正式 SemVer。正式 tag 由 manage-release
|
||||
`--dirty` 写入版本;脏树发布仍走既有门禁。显式 `VERSION=` / `IMAGE_TAG=`
|
||||
可覆盖推导,但不得把非 exact-match 的 commit 标成正式 `X.Y.Z`。
|
||||
|
||||
项目 Makefile 不要内联 `git describe` 或 `sort -V`,include 本 skill 的
|
||||
`makefile.builder` 不要内联 `git describe` 或 `sort -V`,include 本 skill 的
|
||||
`scripts/version.mk`:
|
||||
|
||||
```makefile
|
||||
@@ -126,12 +135,16 @@ clone 到 `~/.pouch`。
|
||||
## 5. 校验
|
||||
|
||||
`python3 -I -S <builder-scripts>/check.py <project-dir> [--build]` 对本项目逐条检查
|
||||
上述要求,任一 FAIL 退出码非零,可直接挂 CI。`--build` 额外实构 `make deb` 并核对
|
||||
产物元数据(默认只静态检查配方)。校验失败时的修复路径:用 create-makefile skill
|
||||
补齐或修正 Makefile,不要绕过校验器。
|
||||
上述要求,任一 FAIL 退出码非零,可直接挂 CI。`--build` 额外实构
|
||||
`make -f makefile.builder deb` 并核对产物元数据(默认只静态检查配方)。`--ready`
|
||||
额外检查轨道工具链,以及 `.env` / 环境中的发布键名是否存在(不读取、不打印值;
|
||||
缺键只挡住发布)。校验失败时的修复路径:按 `templates/makefile.builder` 补齐或
|
||||
修正 `makefile.builder`,再跑 check.py,不要绕过校验器,不要改用户 Makefile,
|
||||
不要用 create-makefile(版本推导与本契约冲突)。
|
||||
|
||||
## 6. 存量项目(legacy fallback)
|
||||
|
||||
未接入契约的项目:builder 仍可按发现流程工作——从 `Makefile`、CI 配置、`debian/`
|
||||
未接入契约的项目:builder 仍可按发现流程工作——从用户 `Makefile`、CI 配置、`debian/`
|
||||
与发布文档中找已有构建/上传入口,优先复用;上传仍使用 builder 脚本。完成一次成功
|
||||
交付后应引导用户用 create-makefile 把项目迁移到本契约,之后以 check.py 为准。
|
||||
交付后应引导用户按 `templates/makefile.builder` 写入项目根 `makefile.builder`,之后以
|
||||
check.py 为准。不把契约目标合并进用户 Makefile。
|
||||
|
||||
Reference in New Issue
Block a user