Skip to content
Development
Skill

/version-bump

升级项目版本号并提交git,支持patch/minor/major版本升级或指定具体版本号,自动从git log生成CHANGELOG

From plugin
ccx
3.9k4 skills
Install
$ npx -y skills add BenedictKing/ccx --skill version-bump --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/version-bump

Context preview

The summary Claude sees to decide when to auto-load this skill.

升级项目版本号并提交git,支持patch/minor/major版本升级或指定具体版本号,自动从git log生成CHANGELOG

SKILL.md

version-bump.SKILL.md
name: version-bump
description: 升级项目版本号并提交git,支持patch/minor/major版本升级或指定具体版本号,自动从git log生成CHANGELOG
version: 1.5.0
author: https://github.com/BenedictKing/ccx/
allowed-tools: Bash, Read, Write, Edit
context: fork

版本号升级技能

指令

当用户输入包含以下关键词时,自动触发版本升级流程:

中文触发条件

  • "升级版本"、"版本号"、"发布版本"、"更新版本"、"更新版本并提交"、"提交 git" → 执行版本升级
  • "bump"、"release" → 执行版本升级

参数说明

  • 无参数或 `patch`: patch 版本 +1
  • `minor`: minor 版本 +1, patch 归零
  • `major`: major 版本 +1, minor 和 patch 归零
  • 具体版本号 (如 `2.1.0`): 直接使用该版本号

发布选项

> ⚠️ **重要**: 默认情况下,版本升级后必须创建 tag 并推送!只有推送 tag 才能触发 GitHub Actions 自动编译发布。除非用户明确说"不要 tag"或"--no-tag",否则始终创建并推送 tag。

  • `--no-tag` 或 "不要 tag": 不创建 git tag(仅提交版本变更)
  • `--push` 或 "并推送"、"push": 推送 commit 到远程仓库(默认行为)

项目版本文件

  • **位置**: `VERSION` (项目根目录)
  • **格式**: `v{major}.{minor}.{patch}`
  • **示例**: `v2.0.15`

执行步骤

1. 读取当前版本号

cat VERSION

2. 解析并计算新版本号

根据用户指定的升级类型计算:

| 当前版本 | 升级类型 | 新版本 | | -------- | ------------ | ------- | | v2.0.14 | patch (默认) | v2.0.15 | | v2.0.14 | minor | v2.1.0 | | v2.0.14 | major | v3.0.0 | | v2.0.14 | 2.1.5 | v2.1.5 |

3. 更新版本文件

echo "v{新版本号}" > VERSION

4. 更新 CHANGELOG.md

**前置检查(必须):**

1. 读取 CHANGELOG.md,查找 `## [Unreleased]` 区块(若不存在则创建) 2. 获取上一个版本 tag 到 HEAD 的全部提交记录,用于后续校验补全:

   git log v{上一个版本}..HEAD --pretty=format:"%h %s"

3. 如果没有提交记录,❌ 中止流程,提示用户没有新的变更

**git log 校验与补全(始终执行):**

无论 `[Unreleased]` 是否已有内容,**都必须**用 git log 逐条校验,确保每个提交都已在 CHANGELOG 中有对应条目:

1. 解析 `[Unreleased]` 区块中已有的条目(按标题摘要匹配) 2. 将 git log 中的每个 commit subject 与已有条目逐一比对 3. 找出所有**尚未记录**的提交,分为两类:

  • **根本不存在**:CHANGELOG 中完全没有该提交的条目 → 直接生成新条目追加到 `[Unreleased]`
  • **错位到前一个版本下**:在 `## [v{上一个版本}]` 区块中找到了该提交的条目 → **必须将条目从旧版本区块中剪切,移动到 `[Unreleased]` 区块**(保留分类分组,删除原位置)

4. 追加/移动完毕后,若全部已有记录则无需改动

> ⚠️ **错位处理必须优先于补全**:先扫描 `[v{上一个版本}]` 区块是否有属于本次 v{新版本} 的提交,有则剪切移动,再对剩余遗漏的提交生成新条目。避免同一个提交在 CHANGELOG 中出现两次。

**覆盖率校验(必须通过):**

校验补全完成后,必须执行以下命令确认无遗漏:

# 获取本版本区间所有有效 commit 数量(排除 Merge 和 bump version)
TOTAL=$(git log v{上一个版本}..HEAD --pretty=%s | grep -cvE "^(Merge |chore: bump version)")
# 统计 CHANGELOG 中本版本的条目数量(按 "- **" 开头的行计数)
RECORDED=$(sed -n '/^## \[v{新版本号}\]/,/^## \[/p' CHANGELOG.md | grep -c "^- \*\*")
echo "有效提交: ${TOTAL} 条, 已记录: ${RECORDED} 条"
  • 如果 `已记录 < 有效提交`:**必须回溯补全后才能继续**,不允许跳过
  • 允许 `已记录 >= 有效提交`(某些提交可能被合并为一条,或多条关联 commit 归为一个条目)

**按 type 分组规则:**

| type | CHANGELOG 分类 | |------|---------------| | `feat` | 新增 | | `fix` | 修复 | | `perf` | 优化 | | `refactor` | 重构 | | `docs` | 文档 | | `chore`, `ci`, `build` | 其他 | | `revert` | 回滚 |

**替换为新版本号:**

校验补全完成后,将 `## [Unreleased]` 替换为:

## [v{新版本号}] - YYYY-MM-DD

保留下方所有条目内容不变(已包含全部提交)。

5. 验证更新

cat VERSION
cat CHANGELOG.md | head -20

6. 查看 git 状态

git status
git diff --stat

7. 提交变更

**检查工作区状态:**

1. 如果工作区有未提交的修改(除 VERSION 和 CHANGELOG.md 外),询问用户:

  • "检测到工作区有其他未提交的修改,是否一并提交?(Y/n)"
  • 如果用户选择 Y(默认),使用 `git add -A` 提交所有修改
  • 如果用户选择 N,仅提交 VERSION 和 CHANGELOG.md

2. 提交信息规则:

  • 如果仅提交版本文件:`chore: bump version to v{新版本号}`
  • 如果包含其他修改:让用户提供提交信息,或使用默认格式
# 包含所有修改
git add -A
git commit -m "{用户确认的提交信息}"

# 或仅提交版本文件
git add VERSION CHANGELOG.md
git commit -m "chore: bump version to v{新版本号}"

8. 本地编译与打包验证(必须通过)

> ⚠️ **重要**: 提交后、创建 tag 前,必须通过本地编译验证。编译失败则中止流程,不允许推送。

**执行步骤:**

1. **运行后端测试:**

   cd backend-go && make test
  • 测试失败 → ❌ 中止流程,提示用户修复测试后重试

2. **执行完整构建(前端 + 后端):**

   make build
  • 构建失败 → ❌ 中止流程,提示用户修复编译错误后重试
  • 构建成功 → ✅ 继续后续 tag 和推送流程

3. **验证构建产物:**

   ls -lh dist/ccx-go
  • 确认产物存在且大小合理

**中止时的处理:**

如果编译验证失败:

  • 不创建 tag
  • 不推送
  • 已提交的 commit 保留在本地
  • 输出错误信息,提示用户修复后重新执行

9. 创建 Tag(默认必须执行)

> ⚠️ 除非用户明确说"不要 tag",否则必须创建 tag!

git tag v{新版本号}

10. 推送到远程(默认必须执行)

# 推送 commit
git push origin main

# 推送 tag(触发 GitHub Actions 自动编译发布)
git push origin v{新版本号}

示例场景

场景 1:默认升级 patch 版本

**用户输入**: "升级版本号并提交" 或 "更新版本并推送"

**自动执行流程**:

1. 读取 VERSION: `v2.0.14` 2. 计算新版本: `v2.0.15` 3. **从 git log 校验并补全 CHANGELOG** — 将 `v2.0.14..HEAD` 的每个 commit 逐一与 `[Unreleased]` 已有条目比对,遗漏的追加进去 4. 将 `## [Unreleased]` 替换为 `## [v2.0.15] - YYYY-MM-DD` 5. 更新 VERSION 文件 6. 执行 git commit 7. 本地编译验证(`make test` + `make build`) 8. 创建 git tag: `v2.0.15` 9. 推送 commit 和 tag 到远程

场景 2:升级 minor 版本

**用户输入**: "升级 minor 版本"

**自动执行流程**:

1. 读取 VERSION: `v2.0.14` 2. 计算新版本: `v2.1.0` 3. 更新 VERSION 文件 4. 执行 git commit

场景 3:指定具体版本

**用户输入**: "版本号改为 3.0.0"

**自动执行流程**:

1. 读取 VERSION: `v2.0.14` 2. 使用指定版本: `v3.0.0` 3. 更新 VERSION 文件 4. 执行 git commit

场景 4:发布新版本(完整流程)

**用户输入**: "发布新版本并打 tag 推送"

**自动执行流程**:

1. 读取 VERSION: `v2.0.29` 2. 计算新版本: `v2.0.30` 3. 更新 VERSION 文件 4. 执行 git commit 5. 本地编译验证(`make test` + `make build`) 6. 创建 git tag: `v2.0.30` 7. 推送 commit 和 tag 到远程 8. GitHub Actions 自动触发,编译 6 平台版本并发布到 Releases

场景 5:仅打 tag(不升级版本)

**用户输入**: "给当前版本打 tag 并推送"

**自动执行流程**:

1. 读取当前 VERSION: `v2.0.29` 2. 创建 git tag: `v2.0.29` 3. 推送 tag 到远程

输出格式

基础版本升级

版本升级完成:
- 原版本: v2.0.14
- 新版本: v2.0.15
- 升级类型: patch

是否提交 git? (Y/n)

完整发布流程

版本升级完成:
- 原版本: v2.0.29
- 新版本: v2.0.30
- 升级类型: patch

✅ Git commit 已创建
✅ 本地编译验证通过(测试 + 构建)
✅ Git tag v2.0.30 已创建

是否推送到远程仓库? (Y/n)
  - 推送后将自动触发 GitHub Actions
  - 自动编译 Linux/Windows/macOS 版本
  - 自动发布到 GitHub Releases

GitHub Actions 集成

当推送 `v*` 格式的 tag 时,会自动触发 `release.yml` workflow,在三平台并行编译:

| Job | Runner | 产物 | | ----------------- | ------------------- | --------------------------------------------------------- | | `build-macos` | macos-latest | `ccx-darwin-arm64`, `ccx-darwin-amd64`, DMG 安装包 | | `build-windows` | windows-latest | `ccx-windows-amd64.exe`, `ccx-windows-arm64.exe`, NSIS 安装包 | | `build-linux` | ubuntu-latest | `ccx-linux-amd64`, `ccx-linux-arm64`, AppImage | | `build-linux-arm64-desktop` | ubuntu-24.04-arm | `CCX-De

Read more
Ships withccx

CCX is a high-performance AI API proxy and protocol translation gateway for Claude, OpenAI Chat, OpenAI Images, OpenAI Embeddings, Codex Responses, and Gemini.

Get the whole plugin
Stats
3,936
Stars
313
Forks
Active
Maintenance
Go
Language
MIT
License
43m ago
Last commit
6mo ago
Created

Repo: BenedictKing/ccx