SuperAPI AI 工具集

create-changeset

编程与开发

查看项目

更新于 10-16 10:07

技能介绍

用途

create-changeset 用于在 monorepo 中自动分析分支变更,并为包发布创建合适的 changeset 文件。它会检查 git 历史、根据 Conventional Commits 判断版本号升级类型,并生成格式正确的 changeset 文件。

主要能力

  • 检查当前分支状态:执行 git log main..HEAD(或 origin/main..HEAD)查看已提交的变更;若无提交则提前退出。
  • 分析变更:使用 git diff main...HEAD(或 origin/main...HEAD)分析已提交的变更,检查 packages/*/ 下受影响的包,并通过 git log main..HEAD --oneline(或 origin/main..HEAD)查看提交信息。
  • 判断版本升级类型:按 Conventional Commits 1.0.0 格式分析提交信息。
    • major:提交正文包含 BREAKING CHANGE,或代码中发现破坏性变更(API 签名变更、移除导出或功能、不兼容的行为变更)。
    • minor:以 feat: 或 feat(scope): 开头的新功能(向后兼容),如新组件或功能、带默认值的新 props 或选项、新导出。
    • patch:以 fix: 或 fix(scope): 开头的缺陷修复与小幅改进,如 bug 修复、性能改进、小幅样式更新。
    • skip:其他类型(chore:、docs:、ci:、test:)通常不需要 changeset,除非它们影响包功能。
    • 在 minor 与 patch 之间拿不准时,出于安全优先选择 patch。若版本升级类型含糊不清,则向用户询问澄清、解释建议理由,并允许用户覆盖建议。
  • 生成 changeset:在 .changeset/ 目录创建具有描述性文件名的 changeset 文件(kebab-case 加 .md 扩展名,例如 .changeset/add-new-button.md、.changeset/fix-layout-bug.md、.changeset/update-icon-props.md)。文件内容格式包括 frontmatter 中的包名与升级类型,以及变更的清晰描述。描述应对用户友好,因为它将出现在 CHANGELOG 中。使用与提交信息相同的语言(日语或英语);若提交信息混杂,优先使用日语。当同一个包存在不同目的的变更(例如新功能加 bug 修复、破坏性变更加内部重构)时,拆分为多个独立的 changeset 文件,以便在发布说明中生成独立的顶层条目。
  • 校验 changeset:执行 pnpm textlint .changeset/<filename>.md 验证文件。若出现 lint 错误,尝试自动修复常见问题(空格与标点、常见语法错误),修复后重新运行 textlint。若错误持续存在,向用户显示错误详情并请求指导;在 lint 通过之前不要提交。
  • 验证并提交:展示生成的文件路径与内容,确认其准确反映变更后,执行 git add .changeset/<filename>.md 与 git commit -m "chore: add changeset"。

使用方式

在以下情况自动调用该技能:用户准备创建 pull request;用户提到 "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)。若已存在,询问用户:"A changeset already exists. Create another one?"

适用场景

适用于该 monorepo 中准备 Pull Request、分支有提交待审查、需要进行包版本发布时。

限制

  • 仅在检测到符合条件的提交时创建 changeset;无提交、或提交均为不影响包的类型时提前退出。
  • 需要遵循 Conventional Commits 提交规范才能准确判断版本升级类型。
  • 需要 textlint 校验通过才能提交。