[英]How can I get the previous commit before a push or merge in GitHub Action workflow?
我在一个新项目中使用Nx来支持 monorepo。 Nx 的一个好处是它可以确定 monorepo 中的哪些应用程序受到一系列更改(开始提交、结束提交)的影响。 因此,如果您有一堆应用程序,您只需构建、测试和部署实际受更改影响的应用程序,而不是整个 monorepo。
我想设置一个 GitHub 操作工作流,仅在推送或合并到主服务器时部署受影响的应用程序。 但是,我无法弄清楚如何获得更改范围的“开始提交”。 换句话说,我如何获得上次部署的提交 hash?
GitHub 提供了一个环境变量GITHUB_SHA
但这是触发工作流的提交(即“结束提交”)。 它还提供GITHUB_BASE_REF
但仅适用于从分叉存储库运行的工作流,与头存储库相比。
CircleCI 有pipeline.git.base_revision
用于此目的。 GitHub Actions 有类似的东西吗?
对于拉取请求事件,可以在 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
是最后一个 git sha 推送到分支base_ref
上的原点。 请注意,如果这是新分支上的第一次提交, base_ref
和before
的值将具有空值/默认值,如下所示。
##[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"
GitHub 提供了包含基本分支的GITHUB_BASE_REF
和github.base_ref
上下文。
如果您对该分支的最新版本感兴趣,可以运行git rev-parse $GITHUB_BASE_REF
来找到它。 如果您对分支的分叉点感兴趣,可以运行git merge-base $GITHUB_BASE_REF $GITHUB_SHA
来找到它。
请注意,有可能通过不兼容的 API 更改等破坏其他项目,而无需对它们进行任何代码更改,因此虽然只测试已更改的应用程序会更快,但您可能会发现这样做会导致意外损坏。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.