如何在GitHub Action工作流中进行推送或合并之前获取上一次提交?

时间:2020-05-18 00:45:52

标签: git github github-actions nrwl-nx

我正在使用Nx为新项目提供monorepo支持。 Nx的好处之一是,它可以确定monorepo中的哪些应用受一系列更改(开始提交,结束提交)的影响。因此,如果您有一堆应用程序,则只需构建,测试和部署实际上受更改影响的应用程序,而不是整个monorepo。

我想设置一个GitHub Action工作流程,以便仅在推送或合并到master时部署受影响的应用。但是,我在弄清楚如何获取更改范围的“开始提交”时遇到了麻烦。换句话说,如何获取上次部署的提交哈希?

GitHub提供了一个环境变量GITHUB_SHA,但这是触发工作流的提交(即“结束提交”)。它还提供了GITHUB_BASE_REF,但仅适用于从分叉仓库运行到头部仓库的工作流。

CircleCI为此使用了pipeline.git.base_revision。 GitHub Actions有类似的东西吗?

2 个答案:

答案 0 :(得分:6)

对于请求请求事件,可以在github上下文中找到基址的ref和sha,如下所示。

${{ github.event.pull_request.base.ref }}
${{ github.event.pull_request.base.sha }}

对于推送事件,有base_refbefore参数。

${{ github.event.base_ref }}
${{ github.event.before }}

before是推送到分支base_ref上的最后一个git sha。请注意,如果这是在新分支上的第一次提交,则base_refbefore将具有null /默认值,如下所示。

##[debug]  "event": {
##[debug]    "after": "727f7aec97c394083d769029e5f619e9b094a235",
##[debug]    "base_ref": null,
##[debug]    "before": "0000000000000000000000000000000000000000",
...

顺便说一句,您可以转储github上下文并通过将以下步骤添加到工作流中来检查可用参数:

      - name: Dump GitHub context
        env:
          GITHUB_CONTEXT: ${{ toJson(github) }}
        run: echo "$GITHUB_CONTEXT"

答案 1 :(得分:-1)

GitHub提供了包含基本分支的GITHUB_BASE_REFgithub.base_ref上下文。

如果您对该分支的最新版本感兴趣,可以运行git rev-parse $GITHUB_BASE_REF进行查找。如果您对分支的分支点感兴趣,可以运行git merge-base $GITHUB_BASE_REF $GITHUB_SHA来找到它。

请注意,使用不兼容的API更改可能会破坏其他项目,而无需对它们进行任何代码更改,因此,虽然仅测试已更改的应用程序会更快,但您可能会发现这样做会导致意外损坏。