在Github Action工作流中获取拉取请求的基础分支SHA

11
在GitHub pull request的操作中,我需要在“当前主分支”的上下文中运行一些代码,并稍后在PR分支的上下文中重新运行同样的代码。
我可以检查与被PR的基本分支进行比较的pull request。如何找到基本分支的SHA值(例如,如果PR是针对master,则为当前的master)?
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 ?"
3个回答

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

9
如果有人在这里寻找分支的sha值,它是${{github.event.pull_request.head.sha}}。https://github.com/actions/checkout#checkout-pull-request-head-commit-instead-of-merge-commit - Danny Varod

6
我的解决方法是:github.event.workflow_run.head_sha
最受欢迎的答案建议使用github.event.pull_request.head.sha,但对我不起作用。
我通过检查github.context对象中所有可能的数据来找到这个方法,使用了这里建议的方法 - https://dev59.com/-VEG5IYBdhLWcg3wOXKV#70107953

3
这实际上是一个关于 Git 的问题,而不是 Github actions。 actions/checkout@v2 建立了一个浅层克隆--depth=1,所以为了获取 PR's 父级,可以解析 git cat-file -p 输出,如此处所述。第一个(基础)父级可用以下方式访问:
git cat-file -p <SHA> | awk 'NR > 1 {if(/^parent/){print $2; exit}}'

更好的方法是使用 fetch-depth: 2 参数。它允许一个任务处理拉取请求和主分支合并的情况,并且还可以与 HEAD^1 一起使用以获取父级。
steps:
  - uses: actions/checkout@v2
    with:
      fetch-depth: 2

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