Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GitHub Actions: how to target all branches EXCEPT master?

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.

like image 782
fweidemann14 Avatar asked Aug 28 '19 20:08

fweidemann14


People also ask

Do GitHub Actions need to be on main branch?

Github actions can only trigger on master or the default branch.

How do I run jobs sequentially in GitHub Actions?

To run jobs sequentially, you can define dependencies on other jobs using the jobs. <job_id>. needs keyword. Each job runs in a runner environment specified by runs-on .

What is strategy in GitHub Actions?

A matrix strategy lets you use variables in a single job definition to automatically create multiple job runs that are based on the combinations of the variables. For example, you can use a matrix strategy to test your code in multiple versions of a language or on multiple operating systems.


2 Answers

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 
like image 109
Electric Sheep Avatar answered Sep 24 '22 15:09

Electric Sheep


There is now a branches-ignore option:

on:   push:     branches-ignore:       - master 

https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#onpushpull_requestbranchestags

like image 28
Samy Avatar answered Sep 22 '22 15:09

Samy