【问题标题】:How to get a branch name on GitHub action when push on a tag?推送标签时如何在 GitHub 操作上获取分支名称?
【发布时间】:2022-01-05 13:03:27
【问题描述】:

我使用

触发我的工作流程
on:
  push:
    tags:

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

【问题讨论】:

  • 你可以使用git branch --contains $GITHUB_REFgit_branch=$(git for-each-ref | grep ${commit_num} | grep origin | sed "s/.*\///")(见stackoverflow.com/q/12754078/10871900
  • @dan1st 由于 github 操作结帐的工作方式而无法正常工作。您需要将-r 标志添加到包含命令以使其工作。我的回答中提供了示例。

标签: github github-actions


【解决方案1】:

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

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

    raw=$(git branch -r --contains ${{ github.ref }})
    branch=${raw/origin\/}

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

 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 }}

Working Example

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

【讨论】:

  • 不错的解决方案!我遇到了一些问题: 1. set-env 已弃用,所以我使用了echo "BRANCH=$branch" >> $GITHUB_ENV 2. git branch 的输出包含前导空格。我使用branch=${raw##*/} 删除了最后一个斜线之前的所有内容。
  • 如果使用checkout@v2,默认只获取最后一次commit,导致git branch找不到当前分支。要解决此问题,您需要在 checkout@v2 步骤中设置 fetch-depth: 0。见:github.com/actions/…
  • 非常感谢这些家伙,很棒的解决方案。
【解决方案2】:

您可以从github.event 变量中获取它:

on:
  push:
    tags:
      - '*'

jobs:
  main:
    runs-on: ubuntu-latest
    steps:
      - name: Echo branch
        run: echo "${{ github.event.base_ref }}"

代码结果为:

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-06-03
  • 2021-10-12
  • 2020-12-30
  • 2021-10-14
  • 2020-04-10
  • 2020-09-06
  • 2021-02-02
  • 2021-10-26
相关资源
最近更新 更多