推送标签时如何在GitHub操作上获取分支名称?

Dmi*_*rii 3 github github-actions

我使用触发我的工作流程

on:
  push:
    tags:
Run Code Online (Sandbox Code Playgroud)

GITHUB_REF 在这种情况下不会包含分支名称,我怎么能得到它?

Ron*_* S. 7

基于爱德华的答案,这里是一个现代脚本,它允许获取分支名称在作业之间传递它,包括允许作业根据分支有条件地运行

# This only runs for tags, and the job only processes for "master" branch
name: Example

on:
  push:
    tags:
      - "*"

jobs:
  check:
    runs-on: ubuntu-latest
    outputs:
      branch: ${{ steps.check_step.outputs.branch }}
    steps:
      - name: Checkout
        uses: actions/checkout@v2
        with:
          fetch-depth: 0

      - name: Get current branch
        id: check_step
        run: |
          raw=$(git branch -r --contains ${{ github.ref }})
          branch=${raw##*/}
          echo "{name}=branch" >> $GITHUB_OUTPUT
          echo "Branch is $branch."

  job2:
    runs-on: ubuntu-latest
    needs: check # Wait for check step to finish
    if: ${{ needs.check.outputs.branch == 'master' }} # only run if branch is master

    steps:
      - run: echo "Running task..."
Run Code Online (Sandbox Code Playgroud)


Edw*_*ero 6

您需要进行一些字符串操作才能实现这一目标。基本上在标签创建推送期间,就像你要git checkout v<tag>在本地做但没有对原始分支的引用。这就是为什么您需要-r在 git branch contains 命令中使用标志的原因。

我们使用以下两个命令获得干净的分支。

    raw=$(git branch -r --contains ${{ github.ref }})
    branch=${raw/origin\/}
Run Code Online (Sandbox Code Playgroud)

这是一个创建分支环境的管道

 name: Tag
 on: 
   create:
     tags:
       - v*
 jobs:
   job1:
     runs-on: ubuntu-latest
     steps:
     - name: checkout source code
       uses: actions/checkout@v1
     - name: Get Branch
       run: |
         raw=$(git branch -r --contains ${{ github.ref }})
         branch=${raw/origin\/}
         echo ::set-env name=BRANCH::$branch
     - run: echo ${{ env.BRANCH }}
Run Code Online (Sandbox Code Playgroud)

工作示例

注意:我通过创建标签并将其推送到原点来触发上述管道

  • 很好的解决方案!我遇到了一些问题: 1. `set-env` 已被弃用,所以我使用 `echo "BRANCH=$branch" &gt;&gt; $GITHUB_ENV` 2. gitbranch 的输出包含前导空格。我使用 `branch=${raw##*/}` 删除了最后一个斜杠之前的所有内容。 (2认同)
  • 如果使用 checkout@v2 ,默认情况下只会获取最后一次提交,这使得 gitbranch 无法找到当前分支。要解决此问题,您需要在 checkout@v2 步骤中设置“fetch-深度:0”。请参阅:https://github.com/actions/checkout#Fetch-all-history-for-all-tags-and-branches (2认同)