在GitHub Actions中,当PR合并到主分支时,获取主分支的头引用分支名称。

huangapple go评论58阅读模式
英文:

Get the head ref branch name in GitHub Actions when PR is merged to main branch

问题

我想在将格式为release/vX.Y.Z的PR合并到main分支时触发GitHub Actions工作流程。

我想从此主分支中获取版本号,即 "vX.Y.Z",以便我可以创建一个相应的发布并进行标记。

name: Auto PR Action

on:
  pull_request:
    branches: 
      - main
    types: [closed]
  

jobs:
  build:
    if: ${{ github.event.pull_request.merged }}
    runs-on: ubuntu-latest

    steps:
      - name: 提取版本号
        run: |
          echo "${{ github.event.pull_request.base_ref }}";

          # 从发布分支格式中提取版本号:release/v1.2.3
          # 例如:release/v1.2.3 | sed 's/.*\///' 将给我们 v1.2.3

          echo "${{ GET_THE_RELEASE_BRANCH_NAME }}" | sed 's/.*\///' >> $RELEASE_VERSION          

      - name: 创建发布
        id: create_release
        env:
          GH_TOKEN: ${{ github.token }}
        run: |
                    gh release create $RELEASE_VERSION --generate-notes --latest --verify-tag

我总是获得关于基本分支(即 main)的信息,但没有关于头分支的信息。

如何实现这一点?

英文:

I want to trigger a GitHub Actions workflow when a release/vX.Y.Z format of PR gets merged into the main branch.

I want the version number from this head branch i.e. "vX.Y.Z" so that I can create a release and tag it accordingly.

name: Auto PR Action

on:
  pull_request:
    branches: 
      - main
    types: [closed]
  

jobs:
  build:
    if: ${{ github.event.pull_request.merged }}
    runs-on: ubuntu-latest

    steps:
      - name: Extract version number
        run: |
          echo "${{ github.event.pull_request.base_ref }}"

          # Extract version number from the Release branch format: release/v1.2.3
          # E.g: release/v1.2.3 | sed 's/.*\///' will give us v1.2.3

          echo "${{ GET_THE_RELEASE_BRANCH_NAME }}" | sed 's/.*\///' >> $RELEASE_VERSION          

      - name: Create Release
        id: create_release
        env:
          GH_TOKEN: ${{ github.token }}
        run: |
                    gh release create $RELEASE_VERSION --generate-notes --latest --verify-tag

I always get the information about the base branch, i.e. main, but no info about the head branch.

How can we achieve this?

答案1

得分: 2

我想在主分支合并了 PR 的 release/vX.Y.Z 格式时触发 GitHub Actions 工作流程。

这里有一个类似的示例,使用了 release-vX.Y.Z 格式:

on:
  pull_request:
    types:
      - closed

jobs:
  tag:
    if: contains(github.head_ref, 'release-') && contains(github.base_ref, 'main') && github.event.action == 'closed' && github.event.pull_request.merged == true
    runs-on: ubuntu-latest
    outputs:
      tag: ${{ steps.tag.outputs.tag }}
    steps:
      - name: Extract branch tag
        id: tag
        run: |
          BRANCH=${{ github.head_ref }}
          TAG="${BRANCH//release-/}"
          echo $TAG
          echo "tag=$TAG" >> $GITHUB_OUTPUT          

  release:
    needs:
      - TAG
    runs-on: ubuntu-latest
    env:
      TAG: ${{ needs.TAG.outputs.tag }}
    steps:
       [ ... ] # 使用 $TAG 做一些事情

此工作流将在关闭 PR 时触发。

根据 if 表达式,只有当 PR 的头分支使用 release-vX.Y.Z 格式,且 PR 合并到 main 分支时,tag 作业才会执行。使用这个实现,tag 变量和 output 将等于 vX.Y.Z

英文:

> I want to trigger a GitHub Actions workflow when a release/vX.Y.Z format of PR gets merged into the main branch.

Here is something similar using the release-vX.Y.Z format:

on:
  pull_request:
    types:
      - closed

jobs:
  tag:
    if: contains(github.head_ref, 'release-') && contains(github.base_ref, 'main') && github.event.action == 'closed' && github.event.pull_request.merged == true
    runs-on: ubuntu-latest
    outputs:
      tag: ${{ steps.tag.outputs.tag }}
    steps:
      - name: Extract branch tag
        id: tag
        run: |
          BRANCH=${{ github.head_ref }}
          TAG="${BRANCH//release-/""}"
          echo $TAG
          echo "tag=$TAG" >> $GITHUB_OUTPUT

  release:
    needs:
      - TAG
    runs-on: ubuntu-latest
    env:
      TAG: ${{ needs.TAG.outputs.tag }}
    steps:
       [ ... ] # use $TAG to do something

This workflow will trigger when a PR is closed.

However, according to the if expression, the tag job will only be executed when the PR head branch use the release-vX.Y.Z format, and if the PR gets merged into the main branch.

Using this implementation, the tag variable and output will be equal to vX.Y.Z.

huangapple
  • 本文由 发表于 2023年5月24日 17:32:08
  • 转载请务必保留本文链接:https://go.coder-hub.com/76322053.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定