我正在使用Nx为新项目提供monorepo支持。 Nx的好处之一是,它可以确定monorepo中的哪些应用受一系列更改(开始提交,结束提交)的影响。因此,如果您有一堆应用程序,则只需构建,测试和部署实际上受更改影响的应用程序,而不是整个monorepo。
我想设置一个GitHub Action工作流程,以便仅在推送或合并到master时部署受影响的应用。但是,我在弄清楚如何获取更改范围的“开始提交”时遇到了麻烦。换句话说,如何获取上次部署的提交哈希?
GitHub提供了一个环境变量GITHUB_SHA
,但这是触发工作流的提交(即“结束提交”)。它还提供了GITHUB_BASE_REF
,但仅适用于从分叉仓库运行到头部仓库的工作流。
CircleCI为此使用了pipeline.git.base_revision
。 GitHub Actions有类似的东西吗?
答案 0 :(得分:6)
对于请求请求事件,可以在github上下文中找到基址的ref和sha,如下所示。
${{ github.event.pull_request.base.ref }}
${{ github.event.pull_request.base.sha }}
对于推送事件,有base_ref
和before
参数。
${{ github.event.base_ref }}
${{ github.event.before }}
before
是推送到分支base_ref
上的最后一个git sha。请注意,如果这是在新分支上的第一次提交,则base_ref
和before
将具有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_REF
和github.base_ref
上下文。
如果您对该分支的最新版本感兴趣,可以运行git rev-parse $GITHUB_BASE_REF
进行查找。如果您对分支的分支点感兴趣,可以运行git merge-base $GITHUB_BASE_REF $GITHUB_SHA
来找到它。
请注意,使用不兼容的API更改可能会破坏其他项目,而无需对它们进行任何代码更改,因此,虽然仅测试已更改的应用程序会更快,但您可能会发现这样做会导致意外损坏。