如何在GitHub Action中设置$RELEASE_VERSION变量创建发布分支?
预计算NPM发布版本并创建GitHub Actions工作流
核心思路
先在develop分支上通过npm version --dry-run预计算出目标版本,再基于该版本创建发布分支,最后在新分支上执行实际的版本更新操作。
具体实现步骤
定义工作流触发方式与输入参数
设置workflow_dispatch和repository_dispatch触发,同时定义版本递增类型的输入参数(可选Major/Minor/Patch)。预计算发布版本
在develop分支上,利用npm version --dry-run命令模拟版本递增,通过jq提取输出中的新版本号,并存为环境变量供后续步骤使用。创建并推送发布分支
基于develop分支创建release/<新版本号>分支,推送到远程仓库。实际更新版本并推送
切换到新创建的发布分支,执行npm version完成实际的版本更新(修改package.json、创建版本标签),然后推送分支和标签。创建向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
相关产品推荐
相关产品推荐

