我需要仅当 .github/workflows/* 中的文件发生更改时才触发 github 工作流程。如果任何其他文件发生更改,它不应触发工作流程。
例如,如果我在 Docker 文件中进行更改,则工作流程不应触发。
我的工作流程 yaml 看起来像这样
on:
#[push]
pull_request:
branches:
- test
types:
- closed
#paths-ignore:
# - '.github/*'
paths:
- '.github/*'
上述 yaml 无法满足我的需求。
这里的问题是工作流触发器配置(
on
字段)并不完全按照您的预期工作。
根据官方文档:
如果您指定多个事件,则只需发生其中一个事件即可触发您的工作流程。如果您的工作流程同时发生多个触发事件,将触发多个工作流程运行。
因此,在您的情况下,
pull_request
事件中的每个子类型都被视为单独的事件,即使不满足其他子类型的条件也会触发工作流。
这里发生的情况是,对
test
分支的任何 PR 都会触发 pull_request: branches: - test
子类型,与 paths: - '.github/*'
配置无关(如果分支是 test
,更新哪个文件并不重要)。
此外,通过这些配置,如果您在从另一个分支打开 PR 时更新了
'.github/*'
路径,工作流程也会触发。
总结一下您当前的配置:
test
:工作流程将触发。test
的分支打开 PR:只有当路径发生变化时,工作流程才会触发 '.github/*'
如果您希望工作流仅在特定路径发生更改时触发,则在打开 PR 时,您应该使用:
on:
pull_request:
paths:
- '.github/workflows/*'
(无需配置任何其他事件。)
现在,如果您希望每次推送到分支时(例如,当您打开或更新 PR 时)触发工作流程,您应该使用:
on:
push:
paths:
- '.github/workflows/*'
这个答案不太正确。我的意思是,您对事件的看法是正确的,但上面的工作流程中只有一个事件,即
pull_request
。 branches
、type
和path
是过滤器,并且所有这些都应该满足才能触发工作流程。事实上,上面的例子与官方filter文档中的例子非常相似
这里最可能的问题是路径表达式
.github/*
,我相信它不会考虑.github/workflows
文件夹(它只会查找.github
中的更改)。在这种情况下,正确的路径表达式应该是 .github/workflows/*