关于 ci-pub
ci-pub 是用于 Dart 包的发布预检与发布流程,支持单包和 Pub workspace。版本变更须经人工批准,包上传和推送标签也由人工执行。
主要功能
- 01检查发布工作流和仓库规则
- 02对比本地与 pub.dev 版本
- 03运行格式化、分析和测试
- 04提出 SemVer 版本或工作区发布矩阵
- 05批准后更新清单与变更日志
- 06通过发布 dry-run 验证包
适用场景
- 01准备 Dart 包的版本发布提案
- 02检查工作区发布顺序和依赖关系
- 03发布前验证包内容
- 04为 CI 或命令行发布准备交接
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ venhdev/ skills --skill ci-pub安装后在 Claude Code 中输入/ci-pub确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/pub-workspace-workflow.mdworkflow-single.ymlworkflow-workspace.yml详细介绍
ci-pub — 自动化发布预检与发布引擎
操作不变量
- 变更前审批关卡:展示版本候选项后立即停止当前轮次;未经人工明确授权,禁止修改清单、变更日志或 Git 历史记录。
- 自主上传边界:严格将执行范围限制在本地预检审计、清单更新和试运行验证;禁止自主上传软件包、推送标签或发布。
- 历史记录原子性:清单、变更日志和工作流更新必须严格包含在单个发布提交中(或修改 HEAD);禁止创建脱离发布流程的杂项提交或未锚定的发布标签。
执行协议
阶段 1:发现环境与发布设置
- 发布策略与 CI 审计:
- 检查
.github/workflows/中是否存在现有的发布工作流(例如publish.yml、release.yml)。识别已配置的触发机制:由标签驱动的 OIDC(refs/tags/*)、手动分派(workflow_dispatch),或不存在(由终端/命令驱动)。 - CI 初始化关卡(未配置 CI 时):如果
.github/workflows/中没有发布工作流,说明未检测到自动化 CI,并提议基于references/workflow-single.yml或references/workflow-workspace.yml初始化一个工作流(与发布操作一并提交)。 - 阅读仓库发布文档和运行手册(
doc/runbooks/*publish*.md、docs/*release*.md、CONTRIBUTING.md),提取项目特定的发布不变量和打包限制。
- 检查
- 拓扑结构与成员映射:
- 单个软件包:根目录中的
pubspec.yaml不包含workspace:指令。 - Pub 工作区:根目录中的
pubspec.yaml包含workspace:(要求 Dart SDK^3.6.0,且根目录的publish_to: none)。运行dart pub workspace list(或fvm dart pub workspace list)以识别候选成员软件包并映射拓扑依赖顺序。
- 单个软件包:根目录中的
- 远程与本地版本基线:
- 查询 pub.dev API(
curl -s https://pub.dev/api/packages/<pkg>)以确定远程当前版本(如果返回 404,则标记为UNPUBLISHED)。 - 读取本地清单版本(
grep '^version:' <pubspec.yaml>)。 - 比较远程版本与本地版本,以确定提案基线:未递增(
Local == Remote)、工作树中已预先递增(Local > Remote),或初次发布(UNPUBLISHED)。
- 查询 pub.dev API(
阶段 2:预检质量关卡
运行格式检查(dart format --output=none --set-exit-if-changed .)、分析器检查(dart analyze --fatal-infos)、变更日志就绪情况检查,以及目标发布范围内的测试套件。如果任何验证失败,报告诊断结果并立即停止。
阶段 3:版本提案与轮次停止关卡
- 评估目标软件包的变更范围(breaking、feat、fix)。
- 提交发布提案:
- 单个软件包:根据远程基线提出建议的 SemVer 候选版本(并视情况提供预发布预览版本)。
- Pub 工作区:按拓扑顺序展示发布矩阵,列出受影响的软件包、远程当前版本与本地版本、拟议版本以及下游约束级联影响。
- 新增 CI 工作流:如果用户在阶段 1 选择初始化发布工作流,则将
.github/workflows/publish.yml纳入拟议变更集。
- 立即停止当前轮次。在用户选择或批准版本提案之前,禁止修改清单或 Git 历史记录。
第 4 阶段:清单变更、试运行验证与交接
- 清单与变更日志同步:获得用户批准后,同步目标
pubspec.yaml清单、各软件包的CHANGELOG.md文件,以及种子.github/workflows/publish.yml(如有请求)中的版本。 - 原子发布提交:暂存已更新的文件,并修改 HEAD(
git commit --amend --no-edit),或创建原子发布提交(git commit -m "chore(release): publish packages [...]")。 - 最后验证(试运行):按拓扑顺序依次执行软件包管理器的发布试运行:
- 单个软件包:
dart pub publish --dry-run - Pub 工作区:对每个获批软件包执行
dart pub -C <package_dir> publish --dry-run。 - 如果出现错误、警告或归档内容泄露,提供准确的故障诊断信息并立即停止。
- 单个软件包:
- 发布就绪报告与定制交接:
- 提供试运行确认信息和拓扑发布顺序。
- 根据第 1 阶段确认的发布设置定制交接说明:
- 由 CI 驱动(推送标签):提供与仓库标签模式完全匹配的 Git 标签命令(例如,单个软件包使用
v<version>,工作区使用<package>-v<version>),指向发布提交 SHA,并提供推送标签的命令。 - 终端/CMD:按拓扑顺序提供直接发布命令(
dart pub publish/dart pub -C <package_dir> publish),并注明 pub.dev CDN 的传播窗口为 120 秒;参见references/pub-workspace-workflow.md。
- 由 CI 驱动(推送标签):提供与仓库标签模式完全匹配的 Git 标签命令(例如,单个软件包使用
评论
支持 Markdown