在Github Action Workflow中根据拉取请求获取基础分支SHA

时间:2020-04-23 18:00:31

标签: 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 ?"

2 个答案:

答案 0 :(得分:1)

事实证明这是一个git问题,而不是Github行动。 actions/checkout@v2创建了一个浅--depth=1克隆,因此要使PR的父级可以将git cat-file -p的输出解析为described here。可以使用

访问第一个(基本)父级
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

答案 1 :(得分:1)

如果作业在eHeight事件上运行,则基本sha可以作为pull_request

使用