GitHub Actionsで特定のタグもしくはブランチにpushされた場合のみ、ワークフローを実行しないようにしようとした際にハマったのでその内容と解決策を記載しておく。
特定のタグやブランチではワークフローを実行しないようにしたかった
GitHub Actionsで、特定のタグもしくはブランチにpushされた場合のみ、ワークフローを実行しないようにしたい場合、以下のように設定すると思う。
v1.0.0
などのタグがpushされた場合は実行させない場合
on:
push:
tags-ignore:
- 'v*.*.*'
dev
ブランチにpushされた場合は実行させない場合
on:
push:
branches-ignore:
- 'dev'
上記の設定を行うことで特定のタグ(v1.0.0
など)やブランチ(dev
)ではワークフローが実行されなくなる。
未指定のタグやブランチでもワークフローが実行されない問題が発生
しかし、上記の設定の場合、以下の問題が発生する。
-
workflow.yml(tags-ignore)
:タグに対するpushにしか反応しなくなり、dev
ブランチなどにpushした場合に実行されない。 -
workflow.yml(branches-ignore)
:ブランチに対するpushにしか反応しなくなり、v1.0.0
などのタグにpushした場合に実行されない。
すなわち、tags-ignore
ではブランチへのpush、branches-ignore
ではタグへのpushに対してワークフローが実行されない。
解決策
GitHub Actionsの仕様に、この動作について記載がないように見えたので、サポートに問い合わせてみた。
その結果、以下のように設定を変更することで、特定のタグやブランチのみを実行対象から外すことができると回答いただいた。
v1.0.0
などのタグがpushされた場合は実行させない場合
on:
push:
tags-ignore:
- 'v*.*.*'
branches: # 追記
- '*' # 追記
dev
ブランチにpushされた場合は実行させない場合
on:
push:
branches-ignore:
- 'dev'
tags: # 追記
- '*' # 追記
すなわち、 対象外にしたいものがタグの場合は全ブランチに対して実行するよう に、 ブランチの場合は全タグに対して実行するよう に 明示的に記載 すればよい。
これは仕様上、tags-ignore
や branches-ignore
を指定した場合、デフォルトでブランチやタグが無視される ようになっているためとのこと。
まとめ
真に特定のタグやブランチに対するpushに対してのみ、ワークフローを実行したくない場合は、以下のようにすればよい。
- 特定のタグのみ実行対象外にしたい場合:
tags-ignore
とbranches
を併用 - 特定のブランチのみ実行対象外にしたい場合:
branches-ignore
とtags
を併用