---
name: prepare-next-version
description: 准备下一个补丁版本 (Prepare next patch version release)
---

# 准备下一个版本发布工作流

本工作流用于智能地基于最后一个 git tag 推断下一个版本号，并更新所有相关文件。

## 工作流

### 1. 从上一个 tag 推断版本升级类型

```bash
# 获取最后一个 tag（格式 vX.Y.Z）
git tag -l | grep "^v" | sort -V | tail -1

# 例如：v0.2.9
```

推断规则：
- 如果 CHANGELOG 中有新版本（大于 tag 版本），则检查升级类型
- **Major 升级**（0.2.9 → 0.3.0）：CHANGELOG 中出现新的 minor 版本号
- **Minor 升级**（0.2.8 → 0.2.9）：CHANGELOG 中只有 patch 升级
- 默认：计算补丁版本（X.Y.Z → X.Y.(Z+1)）

### 2. 检查 VERSION 和 CHANGELOG 状态

```bash
# 查看 VERSION 文件内容
cat VERSION

# 查看 CHANGELOG 第一个版本号
head -10 CHANGELOG.md
```

**三种情况**：

| 情况 | VERSION | CHANGELOG | 操作 |
|------|---------|-----------|------|
| A | 已更新为 0.3.0 | 已更新为 0.3.0 | 无需改动，直接更新 README |
| B | 还是 0.2.9 | 还是 0.2.9 | 执行 update_changelog，然后更新 VERSION |
| C | 0.2.9 | 0.3.0 | 异常，询问用户 |

### 3. 如果 VERSION/CHANGELOG 未更新（情况B）

#### 3a. 执行 update_changelog skill
```bash
# 这会：
# - 从 git log 提取改动
# - 自动生成 CHANGELOG 条目
# - 插入新版本号和日期
```

#### 3b. 根据 CHANGELOG 更新 VERSION
```bash
# 读取 CHANGELOG 中的第一个版本号（跳过占位符）
# 更新 VERSION 文件为该版本号

# 例如：如果 CHANGELOG 中是 [0.3.0]
# 则 VERSION = 0.3.0
```

### 4. 更新 README 和 README-EN

确保 GitHub Release 链接指向当前版本：

```markdown
GitHub Release: [v0.3.0](https://github.com/open-guji/luatex-cn/releases)
```

### 5. 为下一个版本创建占位符

在 CHANGELOG 顶部插入新占位符：

```markdown
## [X.Y.(Z+1)] - 待定
- （待填写）
```

### 6. 验证更改

```bash
git diff VERSION README.md README-EN.md CHANGELOG.md
```

## 后续步骤

完成版本准备后，继续使用 `/release_process` 技能进行完整发布流程：
1. 运行单元测试：`texlua test/run_all.lua`
2. 运行回归测试：`python3 test/regression_test.py check`
3. **运行 l3build ctan**：`l3build ctan` （会自动更新所有 .sty 文件的版本号）
4. 提交、打标签、推送
