如何配置semantic-release以汇总PR中所有提交信息至版本发布说明
当然可以实现这个需求!下面分两种场景给你详细说明:
一、基于当前的压缩合并(Squash Merge)流程
因为压缩合并后master分支只会保留一条合并提交,semantic-release默认只会分析这条提交。要让它获取PR中的所有原始提交,需要通过以下步骤配置:
确保CI环境能获取PR信息
在你的CI配置(比如GitHub Actions、GitLab CI)中,要拿到触发发布的PR编号。比如GitHub Actions里,PR合并时github.event.pull_request.number会带PR编号;GitLab CI可以用CI_MERGE_REQUEST_IID变量。拉取PR的所有原始提交
在semantic-release执行前,加一个步骤用git命令获取该PR的所有提交记录:# 假设PR编号存在$PR_NUMBER变量中 git fetch origin pull/$PR_NUMBER/head # 列出该PR分支相对于master的所有提交哈希 COMMITS=$(git log --pretty=format:"%H" master..origin/pull/$PR_NUMBER/head)配置semantic-release基于这些提交生成说明
修改你的semantic-release配置文件(比如.releaserc.json),调整提交分析和说明生成的逻辑:{ "plugins": [ ["@semantic-release/commit-analyzer", { "preset": "angular", "parserOpts": { "noteKeywords": ["BREAKING CHANGE", "BREAKING CHANGES"] } }], ["@semantic-release/release-notes-generator", { "preset": "angular", "parserOpts": { "noteKeywords": ["BREAKING CHANGE", "BREAKING CHANGES"] }, "writerOpts": { "commitsSort": ["subject", "scope"] } }] // 保留你原本使用的其他插件(如git、npm等) ] }同时在semantic-release的执行命令中,通过
--commits参数传入之前获取的提交列表,让工具基于这些原始提交生成分类汇总的发布说明。
二、调整工作流程(推荐方案)
如果允许修改现有流程,**放弃压缩合并,改用普通合并(Create a merge commit)或变基合并(Rebase and merge)**会更简单:
- 普通合并:PR合并后,master分支会保留PR里的所有原始提交,同时新增一条合并提交。semantic-release默认会自动分析所有这些提交,按照Angular规范分类生成你想要的汇总式发布说明。
- 变基合并:PR的提交会被线性合并到master分支,同样保留所有原始提交,semantic-release无需额外配置就能直接生成完整的变更说明。
这种方式只需要在Git仓库的合并设置里,把默认合并方式改成普通合并或变基合并即可,完全不用额外写脚本或调整插件配置。
效果验证
无论采用哪种方式,配置完成后下次发布的Release Notes都会符合你的预期:
1.17.0 (2021-06-29)
Features:
Adding feature 1, closes #252 #276
Adding feature 2, closes #177
Adding feature 3
Bug fixes:
Fixes #188
Resolves #192
内容的提问来源于stack exchange,提问作者Y.Y.

