GitHub Actions: how to target all branches EXCEPT master?
Asked Answered
A

2

126

I want to be able to let an action run on any given branch except master. I am aware that there is a prebuilt filter action, but I want the exact opposite.

More like GitLab's except keyword. Since this is not inside the official docs, has anyone prepared a decent workaround?

Thank you very much.

Arne answered 28/8, 2019 at 20:47 Comment(2)
Their documentation seems to imply that you might be able to do this using something like: on: push: branches: - '!master' help.github.com/en/articles/… But I haven't been able to get similar negated patterns to work.Balkhash
Thank you Ollie, sadly this doesn't seem to trigger the pipeline...Arne
B
211

Update: There is a newer filter described in Samy's answer that provides a more succinct way of achieving this.


The documentation has been updated with more information now:

When you specify a branches or tags filter, the workflow only runs if at least one pattern matches. Any changes to branches or tags that don't match a defined pattern will not trigger a workflow. The order that you define patterns matters:

  • A matching negative pattern after a positive match will exclude the ref again.
  • A matching positive pattern after a negative match will include the ref again.

So in order to exclude master, you need to ensure that a pattern matching everything is included first:

on:
  push:
    branches:    
      - '*'         # matches every branch that doesn't contain a '/'
      - '*/*'       # matches every branch containing a single '/'
      - '**'        # matches every branch
      - '!master'   # excludes master
Balkhash answered 12/9, 2019 at 9:13 Comment(2)
Thanks for updating. It’s too bad GitHub Actions doesn’t seem to provide a true wildcard pattern.Causal
@Causal and others not sure if this is a new feature or not, but '**' will match every branch. See the docs for more info.Whiffet
L
160

There is now a branches-ignore option:

on:
  push:
    branches-ignore:
      - master

Note that you cannot use branches-ignore and branches in the same workflow.

Lindsley answered 15/7, 2020 at 15:37 Comment(3)
branches-ignore is not working for me. on: push: branches: - main - release pull_request: branches-ignore: - release Uis
@Uis branches-ignore and branches cannot use at the same time on a event.Angi
@Angi that is not the same event, though - branches is used on push and branches-ignore on pull_request. That should work, shouldn't it?Offend

© 2022 - 2024 — McMap. All rights reserved.