GitHub Actions:如何针对除master之外的所有分支进行操作?

119

我希望能够在除主分支(master)以外的任何分支上运行某个操作。 我知道有一个预构建的 filter 操作,但我想要完全相反的操作。

更像是GitLab中的 except 关键字。 由于它不在官方文档中,有人准备了一个不错的解决方法吗?

非常感谢。


他们的文档似乎暗示你可以使用类似以下内容来实现这个功能: on: push: branches: - '!master' https://help.github.com/en/articles/workflow-syntax-for-github-actions#on但我尝试了类似的否定模式却无法生效。 - Electric Sheep
1
谢谢你,Ollie。不幸的是,这似乎没有触发管道... - fweidemann14
2个回答

201

更新:现在有一种新的过滤器,Samy 的回答中有更简洁的实现方法。


文档已经更新并提供了更多信息:

当你指定 branches 或者 tags 过滤器时,只有至少有一个模式匹配成功,工作流才会运行。任何不符合定义模式的分支或标签的更改都不会触发工作流程。你定义模式的顺序很重要:

  • 在正匹配之后的负匹配将排除该引用。
  • 在负匹配之后的正匹配将再次包括该引用。

因此,为了排除 master,你需要确保首先包含匹配所有内容的模式:

on:
  push:
    branches:    
      - '*'         # matches every branch that doesn't contain a '/'
      - '*/*'       # matches every branch containing a single '/'
      - '**'        # matches every branch
      - '!master'   # excludes master

1
*/* 只匹配包含一个 / 的分支 - wrymug
@wrymug 谢谢,那就是我想表达的意思 - 我会编辑答案让它更清晰明了。 - Electric Sheep
谢谢您的更新。很遗憾 GitHub Actions 似乎没有提供真正的通配符模式。 - wrymug
4
@wrymug和其他人不确定这是否是一个新功能,但'**'将匹配每个分支。有关更多信息,请参阅[文档](https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet)。 - Dylan Nissley

151
现在有一个branches-ignore选项:
on:
  push:
    branches-ignore:
      - master

在同一个工作流中,您不能同时使用branches-ignorebranches


branches-ignore 对我不起作用。on: push: branches: - main - release pull_request: branches-ignore: - release - Vaulstein
5
在事件中,无法同时使用branches-ignorebranches。@Vaulstein - JSKIM
@JSKIM虽然不是同一个事件,但是branches用于push,而branches-ignore用于pull_request。这样应该可以工作,对吗? - undefined

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