如何配置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
相关产品推荐
相关产品推荐

