Project Icon

commit-analyzer

基于提交记录自动确定语义化版本号

commit-analyzer是semantic-release的一个插件,通过分析Git提交记录自动确定版本号。它支持多种预设配置和自定义规则,可识别不同类型的提交如功能新增和bug修复,从而准确确定下一个版本号。该插件有助于提高版本管理的效率和准确性,可与其他开发工具无缝集成。

提交分析器

semantic-release 插件,用于使用 conventional-changelog 分析提交

构建状态 npm 最新版本 npm next 版本 npm beta 版本

步骤描述
analyzeCommits通过使用 conventional-changelog 分析提交确定发布类型。

安装

$ npm install @semantic-release/commit-analyzer -D

使用方法

可以在 semantic-release 配置文件 中配置该插件:

{
  "plugins": [
    [
      "@semantic-release/commit-analyzer",
      {
        "preset": "angular",
        "releaseRules": [
          { "type": "docs", "scope": "README", "release": "patch" },
          { "type": "refactor", "release": "patch" },
          { "type": "style", "release": "patch" }
        ],
        "parserOpts": {
          "noteKeywords": ["BREAKING CHANGE", "BREAKING CHANGES"]
        }
      }
    ],
    "@semantic-release/release-notes-generator"
  ]
}

使用此示例:

  • 在提交信息主体中包含 BREAKING CHANGEBREAKING CHANGES 的提交将被视为重大变更。
  • 类型为 'docs'、作用域为 'README' 的提交将与 patch 发布相关联
  • 类型为 'refactor' 的提交将与 patch 发布相关联
  • 类型为 'style' 的提交将与 patch 发布相关联

注意:您的提交必须完全按照所选约定指定的格式进行格式化。例如,Angular 提交消息约定要求 BREAKING CHANGE 关键字后面跟着冒号(:),并且必须位于提交消息的脚注中。

配置

选项

选项描述默认值
presetconventional-changelog 预设(可选值:angularatomcodemirrorembereslintexpressjqueryjshintconventionalcommits)。angular
config自定义 conventional-changelog 预设的 npm 包名称。-
parserOpts额外的 conventional-commits-parser 选项,将扩展由 presetconfig 加载的选项。这方便在使用 conventional-changelog 预设时进行一些自定义设置,而无需创建新模块。-
releaseRules外部模块、模块路径或规则 Array。请参阅 releaseRules请参阅 releaseRules
presetConfig传递给 conventional-changelog 预设的附加配置。例如与 conventional-changelog-conventionalcommits 一起使用。-

注意:为了使用 preset,必须先安装它(例如,要使用 eslint 预设,您必须使用 npm install conventional-changelog-eslint -D 安装它)

注意config 将被 preset 的值覆盖。您应该使用 presetconfig,但不能同时使用两者。

注意parserOpts 的各个属性将覆盖显式设置的 presetconfig 加载的属性。如果未设置 presetconfig,则只会使用 parserOpts 中设置的属性。

注意:对于需要配置对象的预设,例如 conventionalcommits必须设置 presetConfig 选项。

releaseRules

在决定自上次发布以来的提交是否需要新的发布时,会使用发布规则。如果您定义了自定义发布规则,当没有匹配项时将使用默认规则。这些规则将与 conventional-commits-parser 解析后的提交对象进行匹配。每个规则属性都可以定义为 glob

规则定义

这是一个规则对象的 Array。规则对象具有一个 release 属性和一个或多个条件。

{
  "plugins": [
    [
      "@semantic-release/commit-analyzer",
      {
        "preset": "angular",
        "releaseRules": [
          { "type": "docs", "scope": "README", "release": "patch" },
          { "type": "refactor", "scope": "core-*", "release": "minor" },
          { "type": "refactor", "release": "patch" },
          { "scope": "no-release", "release": false }
        ]
      }
    ],
    "@semantic-release/release-notes-generator"
  ]
}
规则匹配

每个提交将与每条规则进行比较,当匹配时,该提交将与规则的 release 属性中的发布类型相关联。如果一个提交匹配多条规则,则与该提交相关联的发布类型将是最高的发布类型(major > minor > patch)。

有关发布类型层次结构,请参阅发布类型

使用上面的示例:

  • type 为 'docs' 且 scope 为 'README' 的提交将与 patch 发布相关联。
  • type 为 'refactor' 且 scope 以 'core-' 开头的提交(例如 'core-ui'、'core-rules' 等)将与 minor 发布相关联。
  • 其他 type 为 'refactor' 的提交(没有 scopescope 不匹配 glob core-*)将与 patch 发布相关联。
  • scopeno-release 的提交将不会与任何发布类型相关联。
默认规则匹配

如果一个提交不匹配 releaseRules 中的任何规则,它将根据默认发布规则进行评估。

使用上面的示例:

  • 包含破坏性变更的提交将与"major"版本相关联。
  • 类型为"feat"的提交将与"minor"版本相关联。
  • 类型为"fix"的提交将与"patch"版本相关联。
  • 类型为"perf"的提交将与"patch"版本相关联。
  • 作用域为"no-release"的提交即使包含破坏性变更或类型为"feat"、"fix"或"perf",也不会与任何版本类型相关联。
没有匹配的规则

如果一个提交不符合releaseRules中的任何规则或默认发布规则,则不会将任何发布类型与该提交相关联。

根据前面的例子:

  • 类型为"style"的提交不会与任何发布类型相关联。
  • 类型为"test"的提交不会与任何发布类型相关联。
  • 类型为"chore"的提交不会与任何发布类型相关联。
多个提交

如果有多个提交符合一个或多个规则,具有最高发布类型的提交将决定全局发布类型。

考虑以下提交:

  • docs(README): 为API文档添加更多细节
  • feat(API): 向公共API添加一个新方法

根据前面的例子,插件确定的发布类型将是"minor"。

特定提交属性

规则中要设置的属性将取决于所选择的提交风格。例如,conventional-changelog-angular使用提交属性"type"、"scope"和"subject",而conventional-changelog-eslint使用"tag"和"message"。

例如,使用"eslint"预设:

{
  "plugins": [
    [
      "@semantic-release/commit-analyzer",
      {
        "preset": "eslint",
        "releaseRules": [
          { "tag": "Docs", "message": "*README*", "release": "patch" },
          { "tag": "New", "release": "patch" }
        ]
      }
    ],
    "@semantic-release/release-notes-generator"
  ]
}

使用此配置:

  • 标签为"Docs"且消息头包含"README"的提交将与"patch"版本相关联。
  • 标签为"New"的提交将与"patch"版本相关联。
  • 标签为"Breaking"的提交将与"major"版本相关联(根据默认发布规则)。
  • 标签为"Fix"的提交将与"patch"版本相关联(根据默认发布规则)。
  • 标签为"Update"的提交将与"minor"版本相关联(根据默认发布规则)。
  • 所有其他提交不会与任何发布类型相关联。
外部包/文件

releaseRules也可以引用模块,可以通过npm名称或路径引用:

{
  "plugins": [
    [
      "@semantic-release/commit-analyzer",
      {
        "preset": "angular",
        "releaseRules": "./config/release-rules.cjs"
      }
    ],
    "@semantic-release/release-notes-generator"
  ]
}
// 文件:config/release-rules.cjs
module.exports = [
  { type: "docs", scope: "README", release: "patch" },
  { type: "refactor", scope: "core-*", release: "minor" },
  { type: "refactor", release: "patch" },
];
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号