apply-semantic-versioning
关于
This skill analyzes code changes to determine the correct semantic version bump (major, minor, or patch) according to SemVer 2.0.0. It handles breaking change detection, pre-release identifiers, and build metadata for release preparation. Use it after merging changes to objectively decide the next version number or resolve versioning disagreements.
快速安装
Claude Code
推荐npx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/apply-semantic-versioning在 Claude Code 中复制并粘贴此命令以安装该技能
技能文档
施語意化版本控制
藉變更分析判並施正確之語意化版本升級。涵蓋 major/minor/patch 分類、預發識別碼、構建元資料與破壞性變更偵測。遵 SemVer 2.0.0 規格。
適用時機
- 備新發行而需判正確版本號
- 合一組變更後且於標記發行前
- 評變更是否構成破壞性變更
- 為版本加預發識別碼(alpha、beta、rc)
- 解何升級宜之歧見
輸入
- 必要:含版本檔(DESCRIPTION、package.json、Cargo.toml、pyproject.toml 或 VERSION)之專案根目錄
- 必要:自上次發行以來之 git 歷史(標籤或提交)
- 選擇性:所用之提交慣例(Conventional Commits、自由形式)
- 選擇性:欲施之預發標籤(alpha、beta、rc)
- 選擇性:若不能自檔讀,則先前版本
步驟
步驟一:讀當前版本
於專案根尋並讀版本檔。
# R packages
grep "^Version:" DESCRIPTION
# Node.js
grep '"version"' package.json
# Rust
grep '^version' Cargo.toml
# Python
grep 'version' pyproject.toml
# Plain file
cat VERSION
將當前版本解析為 major.minor.patch 之分量。若版本含預發後綴(如 1.2.0-beta.1),分別注之。
預期: 當前版本識為 MAJOR.MINOR.PATCH[-PRERELEASE]。
失敗時: 若無版本檔現,查 VERSION 檔或 git 標籤(git describe --tags --abbrev=0)。若全無版本,初開發起 0.1.0,若專案有穩定公共 API 則起 1.0.0。
步驟二:析自上次發行以來之變更
取自上次標記發行以來之變更清單。
# Find the last version tag
git describe --tags --abbrev=0
# List commits since that tag
git log --oneline v1.2.3..HEAD
# If using Conventional Commits, filter by type
git log --oneline v1.2.3..HEAD | grep -E "^[a-f0-9]+ (feat|fix|BREAKING)"
若無標籤,對初提交或已知基線比。
預期: 提交清單附訊息,可按變更類型分類。
失敗時: 若 git 歷史不可用或標籤缺,請開發者人工述變更。依其述分類。
步驟三:分類變更
施 SemVer 分類規則:
| Change Type | Version Bump | Examples |
|---|---|---|
| Breaking (incompatible API change) | MAJOR | Renamed/removed public function, changed return type, removed parameter, changed default behavior |
| Feature (new backwards-compatible functionality) | MINOR | New exported function, new parameter with default, new file format support |
| Fix (backwards-compatible bug fix) | PATCH | Bug fix, documentation correction, performance improvement with same API |
分類規則:
- 若任一變更為破壞性,升為 MAJOR(minor 與 patch 重置為 0)
- 若無破壞性變更而有新功能,升為 MINOR(patch 重置為 0)
- 若僅修復,升為 PATCH
特例:
- Pre-1.0.0:初開發期間(
0.x.y),minor 升或含破壞性變更。明文記 - 棄用:棄用函式為 MINOR 變更(仍可工)。移除為 MAJOR
- 內部變更:不改公共 API 之重構為 PATCH
預期: 每變更分為破壞/功能/修復,整體升級層次已判。
失敗時: 若變更曖昧,寧高升。保守之 major 升勝於斷下游碼之 minor 升。
步驟四:計新版本
對當前版本施升級:
| Current | Bump | New Version |
|---|---|---|
| 1.2.3 | MAJOR | 2.0.0 |
| 1.2.3 | MINOR | 1.3.0 |
| 1.2.3 | PATCH | 1.2.4 |
| 0.9.5 | MINOR | 0.10.0 |
| 2.0.0-rc.1 | (release) | 2.0.0 |
若請預發標籤:
1.3.0-alpha.1為將來 1.3.0 之首 alpha1.3.0-beta.1為首 beta1.3.0-rc.1為首發行候選
預發優先:alpha < beta < rc < (release)。
預期: 新版本號依 SemVer 規則計算。
失敗時: 若當前版本格式錯或非 SemVer,先正規化之。如 1.2 化為 1.2.0。
步驟五:更新版本檔
將新版本寫至宜檔。
# R: Update DESCRIPTION
# Change "Version: 1.2.3" to "Version: 1.3.0"
// Node.js: Update package.json
// Change "version": "1.2.3" to "version": "1.3.0"
// Also update package-lock.json if present
# Rust: Update Cargo.toml
# Change version = "1.2.3" to version = "1.3.0"
若專案有多檔引用版本(如 _pkgdown.yml、CITATION、codemeta.json),皆更新。
預期: 一切版本檔一致更新至新版本號。
失敗時: 若檔更新失敗,回退一切變更以保一致。從不留版本檔於部分更新之態。
步驟六:建版本標籤
提交版本升後,建 git 標籤。
# Annotated tag (preferred)
git tag -a v1.3.0 -m "Release v1.3.0"
# Lightweight tag (acceptable)
git tag v1.3.0
用專案立之標籤格式:
v1.3.0(最常)1.3.0(無前綴)[email protected](單倉庫多套件)
預期: Git 標籤已建,合於新版本。
失敗時: 若標籤已存,版本未正確升。以 git tag -l "v1.3*" 查重複標籤並先解之。
驗證
- 當前版本自正確之版本檔讀
- 自上次發行以來一切提交皆已析
- 每變更分為破壞、功能或修復
- 升級層次合於最高嚴重度之變更(破壞 > 功能 > 修復)
- 新版本遵 SemVer 2.0.0 格式:
MAJOR.MINOR.PATCH[-PRERELEASE][+BUILD] - 專案中一切版本檔一致更新
- 無跳版本(如 1.2.3 至 1.4.0 而 1.3.0 未發)
- Git 標籤合於新版本與專案之標籤格式慣例
- 預發後綴(若用)遵正確優先(alpha < beta < rc)
常見陷阱
- 跳 minor 版本:自 1.2.3 直至 1.4.0 因「加二功能」。每發一升;功能數不決版本
- 將棄用視為破壞:棄用函式(加警告)為 minor 變更。僅移除為破壞性變更
- 遺 pre-1.0.0 規則:1.0.0 前 API 視為不穩。某專案於此期間為破壞性變更升 minor,然應記之
- 版本檔不一致:更 package.json 而不更 package-lock.json,或更 DESCRIPTION 而不更 CITATION。一切版本引用須同步
- 構建元資料之混:構建元資料(
+build.123)不影版本優先。1.0.0+build.1與1.0.0+build.2同優先 - 不標記發行:無 git 標籤則將來版本升不能判變更分析之基線
相關技能
manage-changelog— 維與版本升配對之變更日誌條目plan-release-cycle— 規劃決何時版本升之發行里程release-package-version— R 特定之發行工作流,含版本升commit-changes— 以宜訊息提交版本升create-github-release— 自版本標籤建 GitHub release
GitHub 仓库
相关推荐技能
content-collections
元Content Collections 是一个 TypeScript 优先的构建工具,可将本地 Markdown/MDX 文件转换为类型安全的数据集合。它专为构建博客、文档站和内容密集型 Vite+React 应用而设计,提供基于 Zod 的自动模式验证。该工具涵盖从 Vite 插件配置、MDX 编译到生产环境部署的完整工作流。
polymarket
元这个Claude Skill为开发者提供完整的Polymarket预测市场开发支持,涵盖API调用、交易执行和市场数据分析。关键特性包括实时WebSocket数据流,可监控实时交易、订单和市场动态。开发者可用它构建预测市场应用、实施交易策略并集成实时市场预测功能。
creating-opencode-plugins
元该Skill帮助开发者创建OpenCode插件,用于接入命令、文件、LSP等25+种事件。它提供了插件结构、事件API规范和JavaScript/TypeScript实现模式,适合需要拦截操作、扩展功能或自定义事件处理的场景。开发者可通过它快速构建响应式模块来增强OpenCode AI助手的能力。
sglang
元SGLang是一个专为LLM设计的高性能推理框架,特别适用于需要结构化输出的场景。它通过RadixAttention前缀缓存技术,在处理JSON、正则表达式、工具调用等具有重复前缀的复杂工作流时,能实现极速生成。如果你正在构建智能体或多轮对话系统,并追求远超vLLM的推理性能,SGLang是理想选择。
