为了让示例正常工作(即使一个工作流等待另一个完成),您需要两个文件。这两个文件都位于存储库的.github/workflows文件夹中。
第一个文件将像往常一样设置。此文件将由
on
部分中设置的任何事件触发:
---
name: Preflight
on:
- pull_request
- push
jobs:
preflight-job:
name: Preflight Step
runs-on: ubuntu-latest
steps:
- run: env
第二个文件表明它应该仅在名称为“Preflight”的任何工作流中触发
workflow_run
事件的
on
命令。
---
name: Test
on:
workflow_run:
workflows:
- Preflight
types:
- completed
jobs:
test-job:
name: Test Step
runs-on: ubuntu-latest
steps:
- run: env
这基本上与GitHub Actions手册中的示例相同。
正如您在操作页面上看到的那样,我的示例存储库,Preflight工作流程将首先运行。 完成后,Test工作流将被触发:
正如您也可以看到的那样,"Test"工作流程中没有出现"branch"分支。
这是因为(引用手册):
这个事件只会在工作流文件在默认分支上时触发工作流运行。
这意味着“测试”工作流将使用默认分支(通常为
main
或
master
)中的代码运行。
有一种解决方法...
每个操作都是使用一组
contexts运行的。
github
上下文包含有关触发工作流的事件的信息。这包括最初触发事件的/所属的分支:
github.event.workflow_run.head_branch
。
可以在操作中使用这个分支来检出来源分支,使用GitHub提供的
actions/checkout
操作即可。
要执行此操作,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