🚧
paths フィルターを使うときの注意点 [GitHub Actions]
概要
paths
フィルターはとても便利ですが落とし穴があります。
保護ブランチ
保護ブランチでステータスチェックの Required 対象にしている場合、paths
の条件を満たさずスキップされると成功扱いにならずマージがブロックされてしまいます。
ワークアラウンド 1
ドキュメントでは常に成功する paths-ignore
を指定したワークフローと組み合わせるように記載されています。
ただ、paths
に含まれるファイルと含まれないファイルの両方が PR に存在していた場合どちらのワークフローも走ってしまいます。
両方の結果を待ち片方が失敗していた場合はブロックされるようなのでブランチ保護としては機能するようですが同名のステータスが 2 つできてしまうのが気持ち悪いです。
また、ワークフローが 2 つになって保守性も下がります。
(自動生成するワークフローを作ってもいいのかもしれませんが…)
ワークアラウンド 2
Checks API を使用して判定できるのではないかと思っています。
検証中なのでそのうち記事にするかもしれません。
300 ファイルを超える差分
PR の差分が 300 ファイルを超えると実行されないことがあります。
Diffs are limited to 300 files. If there are files changed that aren't matched in the first 300 files returned by the filter, the workflow will not run.
詳しくはこちらを参考にしてください。
ワークアラウンド
paths
を使用せずに自前で判定をするか、上の記事に記載してあるようにソート時に上の方に来るようなファイルを用意するかになると思います。
自前で判定する場合はこのあたりが使えるかと思いますが未確認。
Discussion
問題を解決するための具体的なワークフローを記事にしました。