如何基于路径过滤器从另一个工作流触发一个新工作流?



我有一个工作流(我想被任何没有路径过滤器的提交触发)

name: workflow1
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
...

触发另一个工作流
name: workflow2
on:
workflow_run:
workflows: ["workflow1"]
types:
- completed
jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
...

workflow_run事件中运行良好。现在是否有可能以某种方式限制workflow2被进一步触发(如路径过滤器)?例:我向文件夹folder1->workflow1触发->触发workflow2,如果不是提交到文件夹folder1,例如folder2->workflow1触发->workflow2未触发。是否有类似以下的东西,我可以添加到workflow2?

name: workflow2
on:
paths:
- 'folder1/**'
workflow_run:
workflows: ["workflow1"]
types:
- completed
jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
...

或者用其他方法实现?

提前感谢您的帮助。

第一个选项:您是否考虑在工作流运行中使用verify-changed-files操作,仅在特定文件更新时执行作业?


第二个选项:它更冗长,但是您可以将第一个工作流中的路径保存在工件中,以便在第二个工作流中下载。

使用变量GITHUB_EVENT_PATH返回带有完整webhook事件有效负载的文件路径。例如/github/workflow/event.json

它看起来像这样

FIRST工作流,则提取路径,然后将该数字保存到文件中,并将其作为工件上传。

- name: Save the PATH in an artifact
shell: bash
env:
- PATH: {{ github.event.path}} ## If it's not specific enough, you can extract the $PATH variable on a previous step using the shell.
run: echo $PATH > path.txt
- name: Upload the PATH
uses: actions/upload-artifact@v2
with:
name: path
path: ./path.txt

SECOND工作流,您将获得工件和路径从第一个工作流,使用以下GitHub应用程序:

- name: Download workflow artifact
uses: dawidd6/action-download-artifact@v2.11.0
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
workflow: <first_workflow_name>.yml
run_id: ${{ github.event.workflow_run.id }}
- name: Read the path.txt file
id: path_reader
uses: juliangruber/read-file-action@v1.0.0
with:
path: ./path/path.txt
- name: Step to check the path output from the step above with an if condition to perform an operation (or not)
[...]

此链接还可以帮助理解如何根据事件提取PATH。

最新更新