如何使用 GitHub Actions `workflow_run` 事件?

Bob*_*nkh 20 continuous-integration github github-actions

Actions 的另一个经常请求的功能是一种根据另一个工作流的完成来触发一个工作流的方法。例如,您可能想要获取 CI 工作流的结果并运行一些进一步的分析。

新的workflow_run 事件使您能够在请求或完成一个或多个工作流时触发新的工作流。由工作流运行事件触发的运行始终使用存储库的默认分支,并且可以访问读/写令牌以及机密。作为一个例子,作为维护者,你可以建立一个工作流程,需要通过拉入请求工作流所产生的假象,做了一些分析,并发表评论回拉的要求。此事件也可用作 webhook 并适用于所有存储库。

这是引用自Github 的博客

有人能告诉我如何实现使用新事件提出的示例workflow_run吗?该文档仅提供了一个非常简单的示例:

on:
  workflow_run:
    workflows: ["Run Tests"]
    branches: [main]
    types: 
      - completed
      - requested
Run Code Online (Sandbox Code Playgroud)

如果有人能教我如何实现这个例子,我会很高兴。

Pot*_*rca 28

要使示例工作(即让一个工作流等待另一个完成),您需要两个文件。这两个文件都位于.github/workflows存储库的文件夹中。

第一个文件将照常设置。该文件将由该on部分中设置的任何事件触发:

---
name: Preflight

on:
  - pull_request
  - push

jobs:
  preflight-job:
    name: Preflight Step
    runs-on: ubuntu-latest
    steps:
      - run: env
Run Code Online (Sandbox Code Playgroud)

第二个文件指出它应该只触发任何名称为onworkflow_run事件:workflowsPreflight

---
name: Test

on:
  workflow_run:
    workflows:
      - Preflight
    types:
      - completed

jobs:
  test-job:
    name: Test Step
    runs-on: ubuntu-latest
    steps:
      - run: env
Run Code Online (Sandbox Code Playgroud)

这或多或少与GitHub Actions 手册中的示例相同。

正如您在示例 repo的操作页面 上看到,预检工作流将首先运行。完成后,将触发测试工作流:

工作流屏幕截图

您还可以看到,“测试”工作流没有出现分支

这是因为,(引自手册):

手册中警告的屏幕截图

如果工作流文件位于默认分支上,此事件将仅触发工作流运行。

这意味着“测试”工作流将在/使用来自默认分支(通常mainmaster)的代码运行。

有一个解决方法...

每个操作都使用一组上下文运行。该github上下文保存有关触发工作流中的事件信息。这包括最初触发事件的分支:/ github.event.workflow_run.head_branch

这可用于使用actions/checkoutGitHub 提供的操作检查操作中的原始分支。

为此,Yaml 将是:

---
name: Test

on:
  workflow_run:
    workflows:
      - Preflight
    types:
      - completed

jobs:
  test-job:
    name: Test Step
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          ref: ${{ github.event.workflow_run.head_branch }}
      - run: git branch
      - run: env
Run Code Online (Sandbox Code Playgroud)

  • @CarlosFagianiJr **现在** 我明白你和 maxcountryman 的意思我已经更新了我的答案来解释分支是如何工作的(以及如何处理它)。 (2认同)