publish-releaselisted
Install: claude install-skill toRolex/rolex-skills
# Publish Release
自动检测仓库的分支模型并发布新版本:Git Flow 从 `develop` 切 release,Trunk-based 从 `main` 切 release。在 release branch 上升级版本号,向 `main` 开 PR,合并,为 `main` 打 tag;Git Flow 额外把 `main` 同步回 `develop`。
## 前置条件
开始之前:
- 你处于一个配置了 `origin` 的 git 仓库中。
- `gh` CLI 已安装并完成认证。
- `main` 是受保护分支;所有 release 通过 PR 合入。
- **flow**:`develop` 可以在本地合入以进行同步回写。如果 `develop` 也是受保护分支,则执行本 skill 直到 PR-to-main 步骤,然后单独从 `main` 向 `develop` 开一个 sync-back PR。
- **flow**:`develop` 包含了本次 release 所需的所有内容。
- **trunk**:开发直接落在 `main`,仓库没有 `develop` 分支;`main` 包含了本次 release 所需的所有内容。
- 用户已确认新版本号。默认是 patch bump(`+0.0.1`)。
## 流程
### 1. 检测分支模型
先确定仓库的分支模型,记为 `MODE`,后续步骤据此分支。用 `flow` 表示 Git Flow,用 `trunk` 表示 Trunk-based Development:
```bash
git branch --all | grep -w 'develop'
```
- 本地或远端存在 `develop` 分支 → `MODE=flow`:从 `develop` 切 release branch,发版后同步回写 `develop`。
- 本地和远端均无 `develop` 分支 → `MODE=trunk`:开发直接落在 `main`,从 `main` 切 release branch,发版后**没有**同步回写步骤。
完成标志:已确定 `MODE` 为 `flow` 或 `trunk`。
### 2. 确定新版本号
```bash
git tag --sort=-version:refname | head -3
```
以最新 tag 为基准,应用用户的 bump 规则,将新版本号记录为 `vX.Y.Z`。
完成标志:选定具体的 `vX.Y.Z`,如果与默认值不同则与用户确认。
### 3. 检测版本文件
在仓库根目录中查找携带项目版本号的文件。按顺序检查:
- `pyproject.toml`
- `package.json`
- `Cargo.toml`
记录哪些文件存在。至少必须存在一个。
完成标志:确定需要升级的版本文件列表。
### 4. 同步源分支并创建 release branch
按 `MODE` 选择源分支,先通过 `/safe-pull` 确保其最新:
- **flow**(源为 `develop`):
```bash
git checkout develop
# /safe-pull
```
- **trunk**(源为 `main`):
```bash
git checkout main
# /safe-pull
```
然后创建 release branch: