当前位置: 首页 > 知识库问答 >
问题:

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

濮冠宇
2023-03-14

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

我想设置一个GitHub操作工作流,只在push或merge to master上部署受影响的应用程序。然而,我很难弄清楚如何获得一系列更改的“开始提交”。换句话说,如何获取上次部署的提交哈希?

GitHub提供了一个env变量GitHub_SHA,但这就是触发工作流的提交(即“结束提交”)。它还提供了GITHUB_BASE_REF,但这只适用于从分叉回购运行的工作流,而不是从主回购运行的工作流。

CircleCI拥有管道。吉特。为此,基础修订版。GitHub操作有类似的功能吗?

共有2个答案

顾斌
2023-03-14

GitHub提供了GITHUB_BASE_REF和包含基分支的github.base_ref上下文。

如果您对该分支的最新版本感兴趣,可以运行git rev parse$GITHUB_BASE_REF来查找它。如果您对分支分叉的点感兴趣,可以运行git merge base$GITHUB\u base\u REF$GITHUB\u SHA来找到它。

请注意,有可能在不更改任何代码的情况下中断其他具有不兼容API更改等内容的项目,因此,虽然只测试已更改的应用程序会更快,但您可能会发现这样做会导致意外中断。

杨选
2023-03-14

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

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

对于推送事件,有base_ref之前的参数。

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

之前的是分支base_ref上推送到源的最后一个git sha。请注意,如果这是新分支上的第一次提交,base_ref之前的将具有null/default值,如下所示。

##[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"

 类似资料:
  • 问题内容: 有什么办法可以在JavaScript中获取以前的URL?像这样: 有那样的东西吗?还是应该将其存储在Cookie中?我只需要知道,就可以在没有锚点的情况下从先前的URL过渡到当前的URL。 问题答案: document.referrer 在很多情况下,如果用户通过单击链接进入当前页面,则会获得用户访问的最后一页的URL(而不是直接在地址栏中键入,或者我认为在某些情况下,可以通过提交表单

  • 问题内容: 我用非常熟悉的,但新。 我要检测中的上一页URL ? 问题答案: 您可以使用以下组件传递状态: 然后,您可以从下一页访问。

  • 问题内容: 我想使用Java访问我当前的工作目录。 我的代码: 输出: 我的输出不正确,因为C驱动器不是我的当前目录。 如何获得当前目录? 问题答案: 代码: 这将打印从中初始化您的应用程序的当前目录的绝对路径。 说明: 从文档中: 软件包使用当前用户目录解析相对路径名。当前目录表示为系统属性,也就是从其中调用JVM的目录。

  • 在https://cadenceworkflow.io/docs/03_concepts/02_activities#activity-task-routing-through-task-lists的留档中,它提到通过每个优先级有一个任务列表和每个优先级有一个工作池来支持多个优先级。在这种实现下,可能仍然有低优先级的工作流在高优先级工作流之前执行。 是否可以实现一个优先级系统,以便在流向高优先级工

  • Jenkins有一个$CAUSE变量可用于freestyle构建作业。 我如何在工作流程中访问这个或类似的东西? 我的团队在现有临时构建的电子邮件输出中使用它。我们希望在基于工作流的新作业中继续这样做。

  • 问题内容: 假设我的网站的网址在互联网上的某个页面上以超链接形式给出;该页面可以是Internet上的任何内容- 博客,orkut,雅虎,甚至stackoverflow等,有人点击它,然后访问了我的网站。那么我们可以使用php知道访问者来自我网页的先前URL吗? 问题答案: 使用标题,但请记住,无论是否单击链接,任何人都可以随时对其进行欺骗。