feat: add reusable deb upload script

This commit is contained in:
2026-07-30 10:19:28 +08:00
parent e667f58bf1
commit e308d6a04c
3 changed files with 169 additions and 16 deletions
+21 -14
View File
@@ -1,8 +1,8 @@
---
name: deb-publisher
description: >-
构建并发布 Debian DEB 包:发现项目已有的 Makefile、打包脚本和仓库上传入口,
校验包元数据与内容,使用环境变量中的凭据上传,并验证发布结果。触发词:构建 deb、
构建并发布 Debian DEB 包:发现项目已有的 Makefile 和打包入口,使用 skill 自带的
通用上传脚本提交包,校验包元数据与内容,并验证发布结果。触发词:构建 deb、
发布 deb、上传 deb、提交 deb、推送 apt 仓库、打 Debian 包。仅分析打包逻辑时也可使用,
但不会在未获授权时执行上传。
---
@@ -36,12 +36,13 @@ rg -n -i --hidden --glob '!.git' \
重点检查:
- `Makefile`、CI 配置、`debian/``scripts/` 和发布文档。
- `Makefile`、CI 配置、`debian/`构建脚本和发布文档。
- 版本号、包名、架构、产物目录和仓库名如何传入。
- 发布端点、认证方式以及发布是否由构建目标自动触发。
- 当前工作树和目标版本是否匹配。
优先复用已有入口。除非用户要求改造,否则不要另建一套并行发布脚本。
优先复用已有构建入口。上传默认使用本 skill 的 `scripts/upload_deb.sh`,不要把它
复制到项目中;仅当目标仓库协议不兼容时才复用或修改项目专属上传逻辑。
### 2. 确认发布边界
@@ -95,22 +96,26 @@ sha256sum <package.deb>
### 5. 发布
优先调用项目已有上传目标或脚本,并通过环境变量注入凭据
解析当前 `SKILL.md` 所在目录,以绝对路径调用随 skill 分发的脚本
```bash
make upload-deb VERSION="$RELEASE_VERSION"
DEB_SERVER_URL="$DEB_SERVER_URL" \
DEB_TOKEN="$DEB_TOKEN" \
DEB_REPOSITORY="$DEB_REPOSITORY" \
<skill-dir>/scripts/upload_deb.sh <exact-package-path.deb>
```
若项目上传脚本接受文件参数,传入刚刚校验过的确切路径。不要使用宽泛 glob。
不要把脚本复制进当前项目,也不要将 token 作为命令行参数。脚本默认请求
`/api/v2/upload/package`,以 multipart 字段 `package``token`
`repository_name` 上传,接受 `200``201` 为成功。端点路径不同时可设置
`DEB_UPLOAD_PATH`
若必须维护 Bash 上传脚本:
调用前确认目标服务使用上述协议;不兼容时不要强行调用。传入刚刚校验过的确切路径,
不要使用宽泛 glob。项目已有 `make upload-deb` 时,检查它是否只是包装了同一协议:
如果是,直接使用 skill 脚本;若 CI 或其他人仍依赖 Make 目标,可将目标改为调用已安装
skill 的脚本,但不要提交脚本副本。
- 使用 `curl --fail-with-body` 或显式检查 HTTP 状态码
- 只把 `200`/`201` 等服务端约定的状态判为成功。
- 用 trap 清理 `mktemp` 创建的响应文件。
-`set -e` 下避免 `((count++))` 首次返回状态 1;使用
`count=$((count + 1))``((++count))`
- 多文件上传应汇总每个文件的结果,并在任一失败时返回非零。
脚本支持多个确切文件路径,会汇总每个文件的结果,并在任一失败时返回非零
### 6. 验证与汇报
@@ -134,6 +139,8 @@ make upload-deb VERSION="$RELEASE_VERSION"
- 保持项目现有变量名和调用入口,避免无关重构。
- 修复行为缺陷时增加最小静态检查或可离线运行的测试。
- 可用 `bash -n` 检查脚本语法;项目有 ShellCheck 时一并运行。
- skill 自带上传脚本是 SSOT;通用上传行为的修改应落在
`skills/deb-publisher/scripts/upload_deb.sh`,不要同步复制到业务项目。
- 不通过真实生产上传来测试脚本,除非用户明确授权并给出测试版本或测试仓库。
## 完成标准