如何配置semantic-release仅分析触发main分支推送的PR标题?
配置semantic-release仅分析触发main分支推送的PR标题
当然可以实现,核心思路是通过GitHub Actions获取PR标题并传递给semantic-release,同时自定义提交分析逻辑,让它只使用PR标题作为版本判定依据,具体步骤如下:
1. 配置GitHub Actions工作流,提取PR标题
在你的GitHub Actions发布工作流文件(比如.github/workflows/release.yml)中,添加步骤提取合并到main分支的PR标题,并将其设为环境变量:
jobs: release: runs-on: ubuntu-latest # 仅在PR合并到main分支时触发 if: github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'main' steps: - uses: actions/checkout@v4 with: fetch-depth: 0 # 需要完整提交历史,确保插件正常工作 - name: 配置Node.js环境 uses: actions/setup-node@v4 with: node-version: 20 cache: 'npm' - run: npm ci - name: 设置PR标题为环境变量 run: echo "PR_TITLE=${{ github.event.pull_request.title }}" >> $GITHUB_ENV - name: 执行semantic-release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: npx semantic-release
2. 自定义提交分析逻辑
创建一个自定义的提交分析脚本(比如analyze-commits.js),替代默认的@semantic-release/commit-analyzer逻辑,让它只分析PR标题:
const { analyzeCommits } = require('@semantic-release/commit-analyzer'); const defaultConfig = require('@semantic-release/commit-analyzer/lib/default-config'); module.exports = async (pluginConfig, context) => { // 读取环境变量中的PR标题 const prTitle = process.env.PR_TITLE; if (!prTitle) { throw new Error('未获取到PR标题,请检查GitHub Actions配置'); } // 将PR标题包装成符合分析要求的提交对象 const targetCommits = [{ message: prTitle }]; // 调用默认的语义化分析逻辑,仅传入PR标题 return analyzeCommits({ ...defaultConfig, ...pluginConfig }, { ...context, commits: targetCommits }); };
3. 修改semantic-release配置
在你的semantic-release配置文件(比如.releaserc.json或package.json的release字段)中,替换默认的commit-analyzer插件为自定义脚本:
{ "plugins": [ ["./analyze-commits.js", { "preset": "angular" // 保留你原本使用的提交规范预设,比如angular、conventionalcommits等 }], "@semantic-release/release-notes-generator", "@semantic-release/github", // 其他你需要的插件(如npm发布插件等) ] }
注意事项
- 确保PR标题符合你使用的语义化提交规范(比如
feat: 新增用户登录功能),否则无法正确判定版本号 - 工作流的
if条件严格限制了仅在PR合并到main分支时触发,避免其他场景误触发发布
内容的提问来源于stack exchange,提问作者SinxroFozotron
相关产品推荐
相关产品推荐

