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

如何配置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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:05:19