GitHubActionsで特定のブランチからのPRにジョブを実行しないようにする
はじめに
最近、依存ライブラリの自動アップデートにrenovateを使い始め、このブログのリポジトリにも適用した。
このブログはFirebaseHostingを利用しており、リポジトリにPRを作成するとプレビューチャネルがFirebaseHostingにアップロードされるようにGitHubActionsのワークフローを設定している。しかし、renovateによって作成されるPRについてもこのワークフローが実行されてしまい、FirebaseHostingのストレージがプレビューチャネルによって圧迫され、無料枠を超えることがあった。
一時的にストレージの無料枠を超えてしまうと以降の本番へのデプロイができなくなってしまうため、プレビューチャネルを削除する必要がある。この手間が面倒だったため、renovateからのPRについてはプレビューチャネルへのアップロードを実行しないようにしたかった。
設定方法
これを設定するには、特定のブランチからのPRではジョブを実行しない、または特定のブランチからのPRのみを実行するように制御すれば良い。これを実現するための構文にはif
条件と式がある。
以下の例では、github.head_ref
でPRのソースブランチ名を取得し、それがrenovate/
で始まっていればジョブを実行しないようにしている。
name: Deploy to Firebase Hosting on PR
on:
pull_request:
jobs:
build_and_preview:
if: ${{ !startsWith(github.head_ref, 'renovate/') }}
runs-on: ubuntu-latest
steps:
...(略)...
今回は式の中でstartsWith
を使ったが、これ以外にもendsWith
やcontains
などいろんな関数がGitHubActionsでは用意されている。ユースケースに応じて使い分けてみてほしい。
おわり
これでrenovateがPRを作成してもプレビューチャネルへのアップロードジョブが実行されないようになった。
とはいえ、ライブラリをアップデートしても動作が正常かどうかを確認しなくてはならないので、ローカルで確認したりテストを書いておくなどの対応は必要だろう。