【问题标题】:How to get pull request number within GitHub Actions workflow如何在 GitHub Actions 工作流程中获取拉取请求编号
【发布时间】:2020-03-23 09:58:31
【问题描述】:

我想在 Github Actions 工作流程中访问 Pull Request 编号。我可以访问可用的 GITHUB_REF 环境变量。尽管在拉取请求操作中它具有值:“refs/pull/125/merge”。我只需要提取“125”。

我发现了一个类似的帖子here,它展示了如何使用这个变量获取当前分支。尽管在这种情况下,我解析的内容不同,并且我无法隔离 Pull Request 编号。

我尝试使用解析为“合并”的 {GITHUB_REF##*/} 我也试过 {GITHUB_REF#*/} 解析为“pull/125/merge”

我只需要 Pull Request 编号(在我的示例中为 125)

【问题讨论】:

    标签: github github-actions


    【解决方案1】:

    虽然已经回答了,但我发现最简单的方法是使用 github 上下文。以下示例显示了如何将其设置为环境变量。

    env:
      PR_NUMBER: ${{ github.event.number }}
    

    【讨论】:

    • 这个解决方案很好,因为上面给出了 github 操作的弃用警告,这也是一个简短的 2 行
    • 但我猜这仅在仅针对拉取请求过滤操作时才有效,例如,如果操作由问题触发,则 event.number 将是问题的。
    • @ObayAbd-Algader,实际上,它看起来只是为了 PR,问题将在 github.event.issue.number 中。我没有找到任何关于这种行为的文档(还)
    【解决方案2】:

    使用awk 来提取GITHUB_REF 的一部分而不是bash magick 怎么样?

    来自awk手册页:

    -F fs

    --field-separator fs

    使用 fs 作为输入字段分隔符(FS 预定义变量的值)。

    只要您记住这一点,只需提取您需要的部分变量就很容易了。 awk 适用于所有平台,因此以下步骤适用于所有平台:

    - run:   echo ::set-env name=PULL_NUMBER::$(echo "$GITHUB_REF" | awk -F / '{print $3}')
      shell: bash
    

    【讨论】:

    • 这对我有用。非常感谢,非常感谢!
    【解决方案3】:

    虽然@Samira 的回答正确。我发现有一种新的方法可以做到这一点,并想与任何可能偶然发现它的人分享。

    解决方案是在工作流程的开头添加一个阶段,该阶段从 Github 令牌(事件)中获取 PR 编号,然后将其设置为环境变量,以便在整个工作流程的其余部分中轻松使用。代码如下:

      - name: Test
        uses: actions/github-script@0.3.0
        with:
          github-token: ${{github.token}}
          script: |
            const core = require('@actions/core')
            const prNumber = context.payload.number;
            core.exportVariable('PULL_NUMBER', prNumber);
    

    现在在任何后期阶段,您都可以简单地使用 $PULL_NUMBER 来访问之前设置的环境变量。

    【讨论】:

      【解决方案4】:

      如果您试图找出在 push 而不是 pull_request 事件上链接到哪个 PR 的替代方法是使用 gh CLI which is included in the standard GitHub Action images

      例如:

            - name: Get Pull Request Number
              id: pr
              run: echo "::set-output name=pull_request_number::$(gh pr view --json number -q .number || echo "")"
              env:
                GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      

      请务必在作业中添加pull_request: read permissions

      然后在以下步骤中,您可以使用变量访问它,

      ${{ steps.pr.outputs.pull_request_number }}
      

      【讨论】:

      • 我尝试了您的实现,但如果没有将 actions/checkout 添加到作业步骤中,gh cli 无法识别存储库。添加后,它按预期工作!感谢分享。我引用了你的回答here
      猜你喜欢
      • 1970-01-01
      • 2020-10-01
      • 2020-08-20
      • 1970-01-01
      • 2022-08-13
      • 2014-04-15
      • 1970-01-01
      • 2021-07-24
      • 2022-10-24
      相关资源
      最近更新 更多