💆‍♂️

githubActionで特定の命名規則を持ったブランチを無視する

2021/09/25に公開

dependabotのbranchのPRで無駄にCIが回っちゃう

dependabotで自動でプルリクエストを発生するように設定した際です。他のPRと同様CIが回っていたのですが、chromaticのテストがsecretsが読み込めないため落ちていました。

なので応急処置として、その該当部分のテストだけスキップさせようとしました。

つまり、develop←nomal_branchはCIして、develop←debendabot_branchはchromaticのテストをしないみたいな想定です。あまりいい方法ではないですが、「とりあえず」って感じです。

考えられる解決策

branches-ignore

githubのワークフロー構文において、branches-ignoreという記法があります。

on:
  push:
    # refs/heads にマッチするパターンのシーケンス
    branches-ignore:
      # refs/heads/mona/octocat にマッチするブランチにイベントをプッシュする
      - 'mona/octocat'
      # refs/heads/releases/beta/3-alpha refs/heads/mona/octocat にマッチするブランチにイベントをプッシュする
      - 'releases/**-alpha'
    # refs/heads にマッチするパターンのシーケンス
    tags-ignore:
      - v1.*           # イベントを v1.0、v1.1、v1.9 タグにプッシュする

https://docs.github.com/ja/actions/reference/workflow-syntax-for-github-actions#onpushpull_requestbranchestags

上記記法でpushをpull_requestに変更したら、merge先が対象になるので、指定できません。

ifで関数使って条件分岐

実際に対応したのは以下の書き方です。

jobs:
  test:
    runs-on: ubuntu-latest
    if: ${{ contains(github.head_ref, 'dependabot') == false }}
    steps:

文字列が含まれていなければ、trueを返すようにif部分に記載するのがいいでしょう。こうすることでfalseの場合はstepsが実行されません。

改めてになりますが、応急処置なのでテストをスキップさせるのは良くないです。とはいうものの似たケースはある気がするので、その際はif:の部分で制御してみましょう。

しかし、自分自身dependabotのPRでUIのテストまでやるべきなのかがあまりわかっていないので、有識者のかた教えていただければ幸いです。

参考にしたサイト

https://docs.github.com/ja/actions/reference/workflow-syntax-for-github-actions

https://zenn.dev/ryo_kawamata/articles/github-actions-specific-branch

GitHubで編集を提案

Discussion