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

如何在GitHub Action中设置$RELEASE_VERSION变量创建发布分支?

预计算NPM发布版本并创建GitHub Actions工作流

核心思路

先在develop分支上通过npm version --dry-run预计算出目标版本,再基于该版本创建发布分支,最后在新分支上执行实际的版本更新操作。

具体实现步骤

  1. 定义工作流触发方式与输入参数
    设置workflow_dispatch和repository_dispatch触发,同时定义版本递增类型的输入参数(可选Major/Minor/Patch)。

  2. 预计算发布版本
    在develop分支上,利用npm version --dry-run命令模拟版本递增,通过jq提取输出中的新版本号,并存为环境变量供后续步骤使用。

  3. 创建并推送发布分支
    基于develop分支创建release/<新版本号>分支,推送到远程仓库。

  4. 实际更新版本并推送
    切换到新创建的发布分支,执行npm version完成实际的版本更新(修改package.json、创建版本标签),然后推送分支和标签。

  5. 创建向main分支的PR
    利用GitHub工具创建从发布分支到main的Pull Request。

完整工作流示例

name: NPM Release Workflow

on:
  workflow_dispatch:
    inputs:
      version_type:
        description: '版本递增类型'
        required: true
        type: choice
        options:
          - Major
          - Minor
          - Patch
  repository_dispatch:
    types: [trigger-release]

jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - name: 检出代码
        uses: actions/checkout@v4
        with:
          ref: develop
          fetch-depth: 0

      - name: 设置Node.js环境
        uses: actions/setup-node@v4
        with:
          node-version: 20
          registry-url: 'https://registry.npmjs.org'

      - name: 预计算发布版本
        id: set_release_version
        run: |
          # 转换输入参数为小写(匹配npm version的参数要求)
          VERSION_TYPE=$(echo "${{ github.event.inputs.version_type || github.event.client_payload.version_type }}" | tr '[:upper:]' '[:lower:]')
          # 预计算新版本(--dry-run不修改文件,仅输出结果)
          RELEASE_VERSION=$(npm version $VERSION_TYPE --dry-run --json | jq -r '.newVersion')
          # 设置为GitHub Actions环境变量
          echo "RELEASE_VERSION=$RELEASE_VERSION" >> $GITHUB_ENV
          echo "VERSION_TYPE=$VERSION_TYPE" >> $GITHUB_ENV

      - name: 创建并推送发布分支
        run: |
          git checkout -b release/${{ env.RELEASE_VERSION }}
          git push origin release/${{ env.RELEASE_VERSION }}

      - name: 实际更新版本
        run: |
          npm version ${{ env.VERSION_TYPE }} -m "chore(release): %s"
          git push origin release/${{ env.RELEASE_VERSION }}
          git push origin v${{ env.RELEASE_VERSION }}

      - name: 创建向main的Pull Request
        uses: actions/github-script@v7
        with:
          script: |
            await github.rest.pulls.create({
              owner: context.repo.owner,
              repo: context.repo.repo,
              head: 'release/${{ env.RELEASE_VERSION }}',
              base: 'main',
              title: 'Release v${{ env.RELEASE_VERSION }}',
              body: '自动创建的发布版本PR,包含版本v${{ env.RELEASE_VERSION }}的更新'
            })

关键说明

  • 版本预计算:使用npm version --dry-run确保预计算的版本与实际执行npm version时的结果完全一致,避免手动计算版本号导致的不一致问题。
  • 参数转换:将输入的大写类型(如Major)转换为小写(major),匹配npm version的参数要求。
  • 环境变量传递:通过echo "KEY=VALUE" >> $GITHUB_ENV将计算出的版本号传递给后续步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 23:15:30