排除路径的Github工作流程无法正常工作。

5

我无法使Github的工作流特性正确地排除路径,并且在stackoverflow上找不到类似的问题。最相似的情况是基于路径过滤的Github工作流未在推送时触发,但这并没有帮助我。

以下是我针对Pull请求的工作流:

name: Build For PRs

on:
  pull_request:
    types: [opened, synchronize, ready_for_review]
    paths:
      - 'src/**'
      - '!src/abc/**'
      - '!src/def/**'
      - '!src/ghi/**'
      - '!src/docker-compose*.yml'
      - '!**.md'

我希望它在“src”目录下的任何文件更改时都能运行,但当其中一个负过滤器匹配时除外。

即使是更改 .md 文件也会触发此工作流。我该如何实现上述逻辑?


我怀疑这可能与您提供的types子类型以及paths子类型有关。如果您删除types列表,它是否按预期工作?由于Github操作在触发器上起到“OR”条件的作用,因此工作流可能会因为types字段而不是paths字段而触发。 - GuiFalourd
根据文档,@jessehouwing是正确的:https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#example-including-paths - Th3B0Y
你最终找到了解决方案吗? - ege
1
@ege 不,如果像Grzegorz所说的那样,它不是为那种逻辑设计的。 - Th3B0Y
1个回答

5
问题在于按照设计,排除路径的功能并不像您想象的那样工作。
当所有路径名称都与paths-ignore中的模式匹配时,工作流程将不会运行,但是如果您至少有一个文件不属于否定范围,则工作流仍将运行。
因此,无法通过此功能以您想要的方式停止工作流程 - 即在至少有1个文件属于被排除列表时停止工作流程。
我建议过滤更改的文件,如果找到任何符合您标准的文件,则停止工作流,并使用https://github.com/tj-actions/changed-files/
使用该操作,您将能够检查是否有任何文件符合您的标准,然后只需停止工作流程。不幸的是,它将启动完整的工作流程,创建运行程序并执行工作流程本身。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接