繁体   English   中英

如何在 GitHub 操作工作流中的推送或合并之前获取先前的提交?

[英]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_refbefore参数。

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

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

##[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_REFgithub.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM