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

Ric*_*key 9 git github github-actions nrwl-nx

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

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

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

CircleCIpipeline.git.base_revision为此目的。GitHub Actions 有类似的东西吗?

pet*_*ans 15

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

${{ github.event.pull_request.base.ref }}
${{ github.event.pull_request.base.sha }}
Run Code Online (Sandbox Code Playgroud)

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

${{ github.event.base_ref }}
${{ github.event.before }}
Run Code Online (Sandbox Code Playgroud)

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

##[debug]  "event": {
##[debug]    "after": "727f7aec97c394083d769029e5f619e9b094a235",
##[debug]    "base_ref": null,
##[debug]    "before": "0000000000000000000000000000000000000000",
...
Run Code Online (Sandbox Code Playgroud)

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

      - name: Dump GitHub context
        env:
          GITHUB_CONTEXT: ${{ toJson(github) }}
        run: echo "$GITHUB_CONTEXT"
Run Code Online (Sandbox Code Playgroud)

  • @RohitReddyAbbadi 尝试将“fetch-深度:0”添加到“actions/checkout”。这会获取标签和分支的所有历史记录。请参阅[此处](https://github.com/actions/checkout#fetch-all-history-for-all-tags-and-branches) (2认同)