mcpField
C
create-changeset

create-changeset

github.com/openameba开发20051 次安装4 天前更新
代码仓库

关于 create-changeset

create-changeset 是用于 monorepo 发布流程的技能,会分析分支提交与受影响的包,并生成 Changesets 文件。它依据 Conventional Commits 和代码变更判断版本升级类型,并包含校验与提交步骤。

主要功能

  1. 01检查分支提交与变更包
  2. 02按提交和代码判断版本升级
  3. 03生成 Changesets 文件
  4. 04运行 textlint 校验
  5. 05展示并提交变更文件

适用场景

  1. 01准备 PR 时为包生成变更记录
  2. 02根据提交类型确定版本升级
  3. 03为多个受影响的包创建 Changesets
  4. 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"

评论

支持 Markdown