Github Actions の branches-ignore と branches は push/pull_request の両方には書けない
Github Actions ではワークフローごとに実行する(トリガーする)タイミングをいろいろ細かく指定できる。
公式ドキュメントにあるとおりだが、
# プッシュでトリガー
on: push
リストで指定もできる。
# プッシュあるいはプルリクエストで実行
on: [push, pull_request]
ブランチを明示していく場合は以下のようになる。
on:
# プッシュもしくはプルリクエストでワークフローを実行し、
# ブランチは master のみ
push:
branches:
- master
pull_request:
branches:
- master
branch と tag にはそれぞれ branches と branches-ignore、または tags と tags-ignore というリストする対象を肯定、または否定する構文(フィルタ)がある。
この、肯定または否定する構文(フィルタ)は push / pull_request において、実はどちらかしか書けない。以下のように書いても意図したようには走り分けてもらえない。
on:
# masterブランチか、fooではないブランチでpull_requestされたとき実行
push:
branches:
- master
pull_request:
branches-ignore:
- foo
正しくはこうなる。branches の中に否定を示す '!' を使ってリストする。
on:
push:
branches:
- master
pull_request:
branches:
- '!foo'
つまり、branches-ignore と branches (tags-ignoreとtags)を push / pull_request にまたがって両方書くことはできない。
これは公式ドキュメントでも以下のように書かれている。
branches または branches-ignore - ワークフロー内の同じイベントに対して、branches と branches-ignore のフィルタを両方使うことはできません。 肯定のマッチに対してブランチをフィルタし、ブランチを除外する必要がある場合は、branches フィルタを使います。 ブランチ名のみを除外する必要がある場合は、branches-ignore フィルタを使います。
ちょっとわかりづらい。
端的に branches-ignore と branches は両方書けない。否定は '!' を使え、ということ。