d791f5584c
- skills/manage-release -> skills/releaser(git mv,内容不变) - releaser 的 frontmatter/标题改名,description 保留旧名作为触发词 - skills/manage-release/ 保留为纯弃用占位(SKILL.md + README.md,指向 releaser), 已装软链与旧项目 .pouch.yaml 不再悬空或失效 - 同步或引用:AGENTS.md、README.md、docs/getting-started.md、orc(routing/SKILL/README)、 ack delivery、builder(SKILL/README/contract)、memory-distill、pouch onboard 与 suggest_skills - 测试:catalog 需列出旧名占位,新增弃用占位断言,orc children 纳入旧名占位
6.7 KiB
6.7 KiB
name, description
| name | description |
|---|---|
| builder | 初始化或检查 makefile.builder 契约,再构建或发布 deb/镜像/Android APK/iOS IPA, 或把产物拷到目录/容器。触发词:初始化 builder、检查 makefile.builder、构建/发布 deb、推送 apt、构建/发布 Docker 镜像、打 APK/IPA、拷到 File Browser、make push。 未授权不上传。Docker 仅用户点名镜像时才走。 |
Builder:DEB / Docker / Android / iOS 构建发布
make 管构建,skill 脚本管发布,本 SKILL.md 只留脚本做不了的决策。
项目状态是根目录 makefile.builder 与发布用 .env.builder,不要创建
.pouch/builder/,不要改用户的 Makefile / makefile / .env。
开始时解析当前 SKILL.md 所在目录,记为 <skill-dir>。优先
git rev-parse --show-toplevel 解析项目根。
选择模式
- 初始化、接入 builder,或还没有
makefile.builder:执行「初始化」。 - 检查契约或发布配置:执行「检查」。
- 构建、发布、上传:执行「工作流」。不要静默初始化。
- 不适用:本地安装/卸载 DEB;RPM/语言包;从零设计打包体系(先出方案);普通编码与 Dockerfile 编辑。
- 改本 skill 自身:契约先改
scripts/check.py,再同步 contract.md 与 templates;不在生产上传上试脚本。
初始化
- 确认项目根。探测
makefile.builder、.env.builder、用户 Makefile(只当抄配方的证据,不改)、Dockerfile、debian/。.env.builder只看键是否存在且非空,不读、不打印值。不要读取用户.env。 - 判定轨道:有 Dockerfile → docker;有 deb 信号或用户要打 deb → deb;
app.config.ts/assembleRelease/.apk→ android;ios//xcodebuild/.ipa→ ios;用户要拷到目录或容器 → copy。可多轨道。都不清则问。不要猜测 registry、token、COPY_DEST 或仓库名。 - 没有
makefile.builder:按轨道拷模板。deb/docker 用templates/makefile.builder;仅 android 用templates/makefile.android.builder;仅 ios 用templates/makefile.ios.builder。按轨道删掉未使用的 deb/docker/push* 段,把build的 TODO 换成仓库里已有的真实编译命令(可从用户 Makefile 抄配方,但不要include或递归调用它),且配方必须使用$(ARCH)。Android/iOS 的ARCHES是构建机 ISA(fat APK/IPA 仍只留本机一项)。按 contract.md 填ARCHES:debian/control/ CI matrix / 用户点名的子集;否则只写本机(x86_64→amd64,aarch64→arm64)。不要默认双架构;看不出交叉编法时只留一项并说明。includebuilder 的scripts/version.mk。多产物把push改成push: push-deb push-docker push-copy的子集。不要改用户 Makefile。 - 已有
makefile.builder:跑检查;按 FAIL 给出修补说明。不覆盖build。用户明确要求按契约改时再加ARCHES,并确认配方里有$(ARCH)。不要调用 create-makefile(版本规则冲突)。 - 没有
.env.builder:把<skill-dir>/templates/env.builder拷到项目根(注释键,不含值)。缺发布键时在报告里给出可粘贴示例,并把.env.builder加入.gitignore,不要提交。 - 运行
python3 -I -S <skill-dir>/scripts/check.py <project-dir> --ready。结构校验通过且当前轨道能构建才称「完成」;只缺发布键是「部分完成」。契约 FAIL 或轨道工具缺失是「阻塞」。除非用户明确要求,不提交、不推送、不上传。
## builder 初始化:完成 | 部分完成 | 阻塞
已具备: …
待配置: 路径 + 字段 + 可粘贴示例 + 缺了会挡住哪步
工具链: make / docker / dpkg-deb(缺则怎么装,不擅自安装)
下一步: 一句话
# .env.builder 键名示例
DEB_SERVER_URL=https://deb.example.com
DEB_REPOSITORY=main
DEB_TOKEN=
DOCKER_REGISTRY=registry.example.com
COPY_DEST=file-server:/srv
COPY_AS=latest.apk
检查
只读。运行 check.py <project-dir> --ready,用同一报告格式,标题改为 ## builder 检查:…。不写 makefile.builder / .env.builder,不改用户 Makefile 或 .env。用户明确要求修复后再转入初始化。
工作流
契约见 contract.md。Docker 的 registry/tag 不明确时再读 registry.md。
- 跑
check.py <project-dir>;需要工具链与发布键时加--ready;要实构 deb 时加--build。契约 FAIL 或轨道工具缺失:停下,转入「初始化」,不要绕过校验,不要改用户 Makefile。只缺发布键:允许构建,禁止上传。未接契约的存量项目按 contract.md §6 发现已有入口,上传仍用 builder 脚本;成功交付一次后引导迁到makefile.builder。 - 仅当用户明确要求发布、上传或提交时才上传。不猜测生产端点;不把 token 写入输出、文件、提交或回复;不用
set -x跑含凭据的命令。可能覆盖同版本时先问。脏工作树默认拒绝发布;用户明确接受时设ALLOW_UNCOMMITTED=1并注明未提交修改。 - 构建:用户指定了架构才传
ARCH=;否则不要传,让 makefile 按ARCHES展开(make -s -f makefile.builder arches)。make -f makefile.builder build始终单架构;DEB 用make -f makefile.builder deb。版本按契约从 Git 祖先稳定 tag 推导,不要调用 releaser,不要用全仓库最新 tag。仅获构建授权时不要走会自动上传的目标。脚本含rm -rf时先确认为受限构建目录。 - DEB 上传前:对每个包
verify_deb.sh <exact-package-path.deb> <version> <arch>。多个包时不凭文件时间猜测。镜像轨道由publish_docker.sh自带远端 inspect。 - 发布优先
make -f makefile.builder push[-deb|-docker|-copy],或直接调upload_deb.sh/publish_docker.sh/copy_artifact.sh。未指定ARCH=时push-deb上传清单里每一个.deb。拷贝轨道要COPY_DEST(本地目录或container:/dir);COPY_AS给第一份文件额外名字。脚本缺环境变量时加载.env.builder(shell 显式值优先),不读.env。不把 token 当命令行参数;不把脚本复制进项目。多平台镜像只能走publish_docker.sh,不能拆进 make;不要把项目架构清单写进.env.builder。build里禁止docker cp。 - 发布成功不能只看「curl/push 已执行」。要有退出码、HTTP 成功或远端 digest;索引异步时报告「上传已接受,索引尚待更新」。最终回复给出包名/镜像引用、版本、架构、SHA-256 或 digest、源 commit、工作区状态和未完成项。