You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置semantic-release:无提交关键字时自动升级patch版本

如何配置semantic-release让无规范提交时自动升级patch版本?

我们团队常用semantic-release,但开发人员经常忘记在提交信息里添加fix、feat这类关键字。虽然可以通过pre-commit hook强制规范提交格式,也清楚semantic-release的提交规则,但希望实现:当监控分支的PR合并或推送的提交未包含特殊关键字时,自动升级patch版本号。

示例场景

从main分支拉出feature-branch-a做了一天小改动,合并PR到main分支后,提交信息没带关键字,此时semantic-release原本不会生成新版本,我们需要它至少自动升级patch版本并创建GitHub Release。

尝试过的配置(未生效)

{
    "branches": [
      "main", 
      {"name": "dev", "prerelease": true}
    ], 
    "plugins": [
      ["@semantic-release/commit-analyzer", {
        "preset": "angular",
        "releaseRules": [
          {
            "subject": "*",
            "release": "patch"
          },
          {
            "subject": "fix*",
            "release": "patch"
          },
          {
            "subject": "feat*",
            "release": "minor"
          },
          {
            "subject": "perf*",
            "release": "major"
          }
        ]
      }],
      
      "@semantic-release/release-notes-generator",
      [
        "@semantic-release/github"
      ]
    ]
  }

失败日志输出

[5:00:26 PM] [semantic-release] › ℹ  Found git tag v1.2.3 associated with version 1.2.3 on branch main
[5:00:26 PM] [semantic-release] › ℹ  Found 2 commits since last release
[5:00:26 PM] [semantic-release] › ℹ  Start step "analyzeCommits" of plugin "@semantic-release/commit-analyzer"
[5:00:26 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ  Analyzing commit: test
[5:00:26 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ  The commit should not trigger a release
[5:00:26 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ  Analyzing commit: test
[5:00:26 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ  The commit should not trigger a release
[5:00:26 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ  Analysis of 2 commits complete: no release
[5:00:26 PM] [semantic-release] › ✔  Completed step "analyzeCommits" of plugin "@semantic-release/commit-analyzer"
[5:00:26 PM] [semantic-release] › ℹ  Start step "analyzeCommits" of plugin "@semantic-release/exec"
[5:00:26 PM] [semantic-release] › ✔  Completed step "analyzeCommits" of plugin "@semantic-release/exec"
[5:00:26 PM] [semantic-release] › ℹ  There are no relevant changes, so no new version is released.

解决方案

之前的配置问题在于releaseRules错误地使用subject字段匹配提交信息,而semantic-release的commit-analyzer默认解析的是提交信息开头的type字段(如fix/feat)。要实现兜底的patch升级,需要添加一条无字段匹配的规则作为最后兜底项:

修改@semantic-release/commit-analyzer的配置如下:

["@semantic-release/commit-analyzer", {
  "preset": "angular",
  "releaseRules": [
    {"type": "feat", "release": "minor"},
    {"type": "fix", "release": "patch"},
    {"type": "perf", "release": "major"},
    // 兜底规则:任何未被上述规则命中的提交,触发patch版本升级
    {"release": "patch"}
  ]
}]

这条兜底规则会在所有提交未匹配到其他规则时生效,确保只要有提交就会升级patch版本。

内容的提问来源于stack exchange,提问作者drewster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 07:20:53