トップ/記事一覧

GitHub Action で特定のディレクトリ配下に変更があったときのみワークフローを実行する

📆2020/09/29🔖 Github Actions

この記事は最終更新日から1年以上が経過しています。内容が古い箇所がある可能性があるためご注意ください。

on.<push|pull_request>.paths / GitHub Docs
on.<push|pull_request>.paths / GitHub Docs

過去の自分に早くこの事実を伝えてあげたい気持ちでいっぱいなので、この記事を書きました。

僕たちのプロダクトは yarn workspace を使用しており、1つのリポジトリで複数のパッケージを管理しています。このような構成の都合上、GitHub Actions のデフォルトの設定だと、パッケージAに変更があった際に、パッケージBのワークフローも実行されてしまうという課題がありました。

そこで僕は、git のログから diff を取り、ファイル名を再帰的に見てゴニョゴニョしていけば、不要なワークフロー実行をスキップできるのでは?と思っていろいろ調査していました。しかし、結論、そんな複雑なことは必要なく、GitHub Actions に当初から用意されている機能で実現できることが分かりました。

on.<push|pull_request>.paths

公式ドキュメントにもある通りです。on.<push|pull_request>.paths にパス名を記述してやることで、変更されたファイルが1つ以上パス名と一致した場合にのみ、ワークフローを実行できるようになります。

on.<push|pull_request>.paths | GitHub Docs

yarn workspace の場合は、以下のような感じで、パッケージ指定で、特定のパッケージに変更があった場合にのみ、ワークフローを実行することができるようになります。(ワイルドカードが使えます)

それ以外のパスの変更は、ワークフローに乗ることもなく、キャンセル扱いにもなりません(ここが Netlify との違いです。Netlify ではキャンセル扱いでした。)

yaml

on: push: branches: - develop paths: - "packages/package-a/**"

学び

急がば回れ。ドキュメントはどこかのタイミングで、ちゃんと網羅的に読んでみるのが良いですね。