在 Github 操作工作流程中根据拉取请求获取基本分支 SHA

Yur*_*rik 11 github github-actions

在拉取请求的 GitHub 操作中,我需要在“当前主控”的上下文中运行一些代码,然后在 PR 分支的上下文中重新运行相同的代码。

我可以检查将拉取请求与其 PR 所针对的基础进行比较。我如何找到基础分支的 SHA(例如,如果 PR 与主分支相反,则当前主分支)?

jobs:
  job_on_base:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          ref: "${{ github.base_ref }}"
      - run: |
          # Seems like I can get it here with $(git log -1 --format="%H")
          echo "My current SHA is ... ?"

  job_on_pr:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          ref: "${{ github.ref }}"
      - run: |
          echo "My current SHA is $GITHUB_SHA"
          echo "The BASE SHA is ?"
Run Code Online (Sandbox Code Playgroud)

Jac*_*ask 14

如果作业在pull_request事件上运行,则基本 sha 可用为${{ github.event.pull_request.base.sha }}

  • 如果有人在这里寻找分支的 sha,那就是: `${{github.event.pull_request.head.sha}}` https://github.com/actions/checkout#checkout-pull-request-head-commit-instead合并提交 (9认同)

小智 6

对我有用的是:github.event.workflow_run.head_sha

投票最高的答案建议github.event.pull_request.head.sha对我不起作用。

github.context我通过使用此处建议的方法检查对象中的所有可能数据发现了这一点- /sf/answers/4907556741/


Yur*_*rik 3

事实证明这是一个git问题,而不是 Github 的操作。创建actions/checkout@v2一个浅--depth=1克隆,因此要获取 PR 的父级,可以git cat-file -p按照此处所述解析输出。第一个(基础)父级可以通过以下方式访问

git cat-file -p <SHA> | awk 'NR > 1 {if(/^parent/){print $2; exit}}'
Run Code Online (Sandbox Code Playgroud)

事实证明,更好的方法是使用fetch-depth: 2参数。它只允许一项作业处理拉取请求和主合并案例,并且还可以与 一起使用HEAD^1来到达父级。

steps:
  - uses: actions/checkout@v2
    with:
      fetch-depth: 2
Run Code Online (Sandbox Code Playgroud)