【问题标题】:Get original branch name in Github action push event to master在 Github 操作推送事件中获取原始分支名称到 master
【发布时间】:2020-12-30 04:32:03
【问题描述】:

我正在尝试将 Github 操作推送事件设置为 master(因此,合并)。问题是,对于我想做的事情,我需要原始拉取请求分支的名称。 Github pull request 事件通过调用 ${{ github.head_ref }} 使这很容易,但 push 事件中不存在此选项。我原本以为${{ github.head }} 会给我我想要的东西,但它实际上只是给了我refs/heads/master,而不是原始 PR 分支的名称。

换句话说,假设我用一个名为 foo 的分支打开了一个到 master 分支的 PR。在推送事件中,我希望能够获得foo 来表示我想在工作中做的事情。

这可能吗?

【问题讨论】:

    标签: git github github-actions


    【解决方案1】:

    如果您只想获取触发管道的分支,那么您可以从 env GITHUB_REF 获取它,也可以作为 ${{ github.ref }} 访问。如果您在标签上触发,则 GITHUB_REF 将没有正确的分支名称,因此您需要按照此处显示的流程How to get a branch name on GitHub action when push on a tag?

    【讨论】:

    • 在推送事件中,这不是总是设置为推送的目标分支(例如 master 或 main)吗?
    • 它填充到触发工作流的分支名称。所以如果你推送到一个分支“feature-branch-1”,那么你会从环境中得到类似“ref/heads/feature-branch-1”的东西。
    • 更新拉取请求分支,但在与创建“推送”到主事件的 master 合并时,该值始终设置为目标分支,即 master
    • @opike 请注意,在提供有关所有事件的信息时。这是 GitHub 操作文档。根据触发器,此环境设置在所有运行器环境中。随便看看github ref的定义docs.github.com/en/actions/reference/environment-variables
    • 我从来没有声称它没有被设置。我的意思是,当将拉取请求与默认分支(在这种情况下我们会说 master)合并时,会触发 master 分支上的“push”事件,并且 GITHUB_REF 将设置为“master”。 OP 正在寻找拉取请求的源分支,而不是“master”的目标分支。
    【解决方案2】:

    我为我的用例找到了一个可接受的解决方案,使用拉取请求事件而不是推送事件:

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

    上面说只在对已关闭的主分支的拉取请求上运行,因为合并的 PR 会自动关闭。但是为了让这个动作只在也被合并的关闭的 PR 上运行,而不仅仅是任何关闭的 PR,在作业的相关步骤中,我添加了一个条件检查以确保关闭的 PR 也已被合并:

    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 are ---> release /9.0.0
    【解决方案3】:

    对于第一个问题,如何在 master 上的 push 操作中获取源分支名称? 到目前为止,Github action 还没有提供方法。我创建了一个动作来帮助实现它,但需要一些先决条件。

    • 此操作需要在 main 或任何(或任何合并目标分支)上运行
    • 源分支需要从 Github 合并按钮合并,并且不能更改自动消息。
    • 如果分支不是通过 Github Merge 按钮合并的,则需要在提交消息中指定分支名称,例如 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-27
      • 2020-06-03
      • 1970-01-01
      • 2021-02-02
      • 2019-09-25
      • 2022-08-13
      • 2013-12-23
      相关资源
      最近更新 更多