有没有办法根据特定文件夹中的更改来控制工作流程中要运行哪些任务/步骤?
例如:
我的 git 仓库中有以下文件夹:a、b、c。每次将 PR 合并到我的分支时,就会触发一个工作流程。该工作流程将执行如下任务:A -> B -> C。我想仅在 "a/**"
文件夹中存在更改时运行任务 A,在 "b/**"
中存在更改时运行任务 B,以此类推。
所以,如果在 PR 中只更改了 "a/**"
和 "b/**"
,则工作流程会跳过任务 C 的执行,使工作流程变为 A
->B
有没有办法根据特定文件夹中的更改来控制工作流程中要运行哪些任务/步骤?
例如:
我的 git 仓库中有以下文件夹:a、b、c。每次将 PR 合并到我的分支时,就会触发一个工作流程。该工作流程将执行如下任务:A -> B -> C。我想仅在 "a/**"
文件夹中存在更改时运行任务 A,在 "b/**"
中存在更改时运行任务 B,以此类推。
所以,如果在 PR 中只更改了 "a/**"
和 "b/**"
,则工作流程会跳过任务 C 的执行,使工作流程变为 A
->B
您可以在作业或步骤级别使用具有if
条件的paths-filter自定义操作,使用setup
作业作为初步检查您的特定路径是否已更新,并将结果保存为输出。
name: Paths Filter Example
on: [push, workflow_dispatch]
jobs:
paths-filter:
runs-on: ubuntu-latest
outputs:
output1: ${{ steps.filter.outputs.workflows }}
steps:
- uses: actions/checkout@v2
- uses: dorny/paths-filter@v2
id: filter
with:
filters: |
workflows:
- '.github/workflows/**'
# run only if 'workflows' files were changed
- name: workflow tests
if: steps.filter.outputs.workflows == 'true'
run: echo "Workflow file"
# run only if not 'workflows' files were changed
- name: not workflow tests
if: steps.filter.outputs.workflows != 'true'
run: echo "NOT workflow file"
next-job:
runs-on: ubuntu-latest
# Wait from the paths-filter to be completed before starting next-job
needs: paths-filter
if: needs.paths-filter.outputs.output1 == 'true'
steps:
...
这样,你的工作中可能会出现这样的内容:A
--> B
或A
--> C
,具体取决于已更新的路径。
next-job
的语法需要做一个小调整:应该写成 if: needs.paths-filter.outputs.output1 == 'true'
或者 if: ${{ needs.paths-filter.outputs.output1 == 'true' }}
。 - HeyZiko这是语法:
on:
push:
paths:
- 'a/**'
- 'b/**'
if:
标签在工作步骤中,用于检查路径是否有变化。 - ASHISH M.G