在 Github action 推送事件到主分支时获取原始分支名称

4
我正在尝试设置 Github action 推送事件到主分支(也就是合并)。问题在于我需要使用原始拉取请求分支的名称来完成我的操作。Github 的拉取请求事件通过调用 ${{ github.head_ref }} 轻松实现这一功能,但在推送事件中该选项不存在。我最初以为 ${{ github.head }} 可以给我想要的结果,但它实际上只给出了 refs/heads/master,而不是原始拉取请求分支的名称。
换句话说,假设我向主分支开放了一个名为 foo 的分支的 PR。在推送事件中,我希望能够获取 foo 以便在工作中使用。这是否可能?
3个回答

8
我找到了一种可接受的解决方案,可以通过pull request事件而不是push事件来应对我的使用情况:
on:
  pull_request:
    types: [closed]
    branches:
      - master

上面的内容表示仅在针对已关闭的主分支拉取请求上运行,因为合并的PR会自动关闭。 但是为了使此操作仅在已合并而不仅仅是任何已关闭的PR上运行,在作业中相关步骤中添加条件检查,以确保已关闭的PR也已合并: < code>if:github.event.pull_request.merged == true 然后我可以像我在问题中提到的那样访问分支名称:${{ github.head_ref }}

在我的情况下,我需要稍微修改一下条件,并且必须使用以下环境变量。条件: 如果:${{github.ref == 'master' && github.event.pull_request.merged == true}}变量: echo "GITHUB_HEAD_REF are--->$GITHUB_HEAD_REF" 例如:GITHUB_HEAD_REF 是 ---> release/9.0.0 - Ashish Sharma

1

针对第一个问题,如何在主分支推送操作时获取源分支名称? Github action 目前没有提供这种方式。我创建了一个动作来帮助实现它,但需要一些前提条件。

  • 此动作需要在主分支或任何合并目标分支上运行
  • 源分支需要通过 Github 合并按钮进行合并,且自动消息不能更改。
  • 如果分支不是通过 Github 合并按钮合并的,则需要在提交消息中指定分支名称,例如 xxx xxx/branch-name xxx

然后您可以获取源名称。 示例

name: "Log RECENT_MERGED_BRANCH_NAME"
on:
    push:
      branches:
        - "main"
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: tonynguyenit18/github-action-custom-vars@v1
      - run: echo $RECENT_MERGED_BRANCH_NAME

在此查看更多详细信息: https://github.com/tonynguyenit18/github-action-custom-vars


-1

在推送事件中,这不是总是设置为推送的目标分支(例如主分支或主要分支)吗? - opike
它填充了触发工作流程的分支名称。因此,如果您推送到“feature-branch-1”分支,则会从env中获得类似于“ref/heads/feature-branch-1”的内容。 - Edward Romero
1
这是关于更新拉取请求分支的内容,但在与主分支合并时,会创建一个“推送”到主分支的事件,该值始终设置为目标分支,即主分支。 - opike
请注意,在提供所有事件的信息时,这里是 GitHub Actions 文档。这些环境变量根据触发器设置在所有运行程序环境中。请随意查看 github ref 的定义:https://docs.github.com/en/actions/reference/environment-variables - Edward Romero
2
我从未声称它没有被设置。我的意思是,在将拉取请求与默认分支(我们在这种情况下称为主分支)合并时,主分支上会触发“推送”事件,并且 GITHUB_REF 将被设置为“master”。OP 正在寻找拉取请求的源分支,而不是“master”的目标分支。 - opike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接