关于 create-changeset
create-changeset 是用于 monorepo 发布流程的技能,会分析分支提交与受影响的包,并生成 Changesets 文件。它依据 Conventional Commits 和代码变更判断版本升级类型,并包含校验与提交步骤。
主要功能
- 01检查分支提交与变更包
- 02按提交和代码判断版本升级
- 03生成 Changesets 文件
- 04运行 textlint 校验
- 05展示并提交变更文件
适用场景
- 01准备 PR 时为包生成变更记录
- 02根据提交类型确定版本升级
- 03为多个受影响的包创建 Changesets
- 04检查变更说明格式并提交
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ openameba/ spindle --skill create-changeset安装后在 Claude Code 中输入/create-changeset确认已加载。
详细介绍
创建 Changeset 技能
用途
此技能会自动分析分支变更,并为此单体仓库中的软件包发布创建适当的 changeset。它会检查 Git 历史记录,根据 Conventional Commits 确定版本升级类型,并生成格式正确的 changeset 文件。
何时调用
遇到以下情况时自动调用此技能:
- 用户准备创建拉取请求
- 用户提到“PR”“pull request”或“ready for review”
- 分支中有已准备好供审查的提交
- 用户明确提到“changeset”或“version bump”
以下情况不要调用:
- 用户只是推送变更,没有创建 PR
- 仅修改了文档文件(README、.md 文件)
- 仅修改了 CI/CD 配置(.github/workflows/)
- 仅修改了开发工具配置(eslint、prettier 等)
- 提交仅属于
docs:、chore:、ci:或test:类型,且不会影响软件包
执行前验证
创建 changeset 前,检查当前变更是否已有 changeset 文件:
- 查找
.changeset/*.md文件(README.md 除外) - 如果存在,询问用户:“已有 changeset。要再创建一个吗?”
实施步骤
1. 检查当前状态
执行 git log main..HEAD(或 origin/main..HEAD)以检查分支上已提交的变更。如果没有提交,则提前退出,不创建 changeset。
2. 分析变更
使用 git diff main...HEAD(或 origin/main...HEAD)分析仅已提交的变更。
检查 packages/*/ 下的文件,确定受影响的软件包。使用 git log main..HEAD --oneline(或 origin/main..HEAD)查看提交消息。
3. 确定版本升级类型
根据 Conventional Commits 1.0.0 格式分析提交消息:
- major:提交正文中包含
BREAKING CHANGE,或检测到代码中存在破坏性变更- API 签名变更
- 移除导出项或功能
- 不兼容的行为变更
- minor:以
feat:或feat(scope):开头,即新增功能(向后兼容)- 新增组件或功能
- 新增属性或选项(带默认值)
- 新增导出项
- patch:以
fix:或fix(scope):开头,即修复错误和小幅改进- 修复错误
- 性能改进
- 小幅样式更新
- skip:其他类型(
chore:、docs:、ci:、test:)通常不需要 changeset,除非它们会影响软件包功能
查看实际代码变更,确认适当的版本升级类型。如果无法确定应选择 minor 还是 patch,为安全起见优先选择 patch。
如果版本升级类型不明确:
- 向用户询问详情
- 说明建议该升级类型的理由
- 允许用户覆盖建议
如果所有提交都属于不需要 changeset 的类型(docs:、chore:、ci:、test:),则提前退出,不创建 changeset。
4. 生成 Changeset
在 .changeset/ 目录中创建一个带有描述性文件名的 changeset 文件。
文件名格式:
- 使用 kebab-case,并以
.md为扩展名 - 示例:
.changeset/add-new-button.md、.changeset/fix-layout-bug.md、.changeset/update-icon-props.md
文件内容格式:
---
"@openameba/package-name": major|minor|patch
---
Clear description of the change
单个软件包的示例:
---
"@openameba/spindle-ui": minor
---
Add new Button variant for secondary actions
多个软件包的示例:
---
"@openameba/spindle-ui": minor
"@openameba/spindle-tokens": patch
---
- spindle-ui: Add new Button variant for secondary actions
- spindle-tokens: Fix color token contrast ratio
重要指南:
- 描述应便于用户理解,因为它会显示在 CHANGELOG 中
- 使用与提交消息相同的语言(日语或英语)。如果提交消息语言混杂,优先使用日语。
- 如果同一软件包存在用途不同的变更(例如新增功能和修复错误、破坏性变更和内部重构),请将 changeset 拆分为多个文件
- 这样会在发布说明中创建单独的顶层条目,便于读者理解每项变更的意图
- 例如:即使新增功能和修复错误都针对同一软件包,也应分别创建
.changeset/add-secondary-button.md和.changeset/fix-button-layout.md
5. 检查变更集
执行 pnpm textlint .changeset/<filename>.md,验证变更集文件。
错误处理:
- 如果出现检查错误,请尝试自动修正常见问题:
- 空格和标点
- 常见语法错误
- 自动修复后重新运行 textlint
- 如果错误仍然存在:
- 向用户显示错误详情
- 询问用户如何修复
- 检查通过前不要提交
6. 验证并提交
显示生成的变更集,供用户审核:
- 显示文件路径
- 显示文件内容
- 确认内容准确反映了这些变更
确认无误后,提交变更集文件:
git add .changeset/<filename>.md
git commit -m "chore: add changeset"