Clean Architecture, Clean Life

仕事・個人での技術的なことつぶやきます

【GithubActions】特定のブランチでのみ処理を実施したい場合にif文で分岐させるやり方

経緯

GithubActionsであるブランチへのPusu(PR)時のみ実施したい処理というのがいくつか出てきた

とはいえ、ブランチごとにymlファイルを作っちゃうと、変更するときの影響範囲が大きくなるのでやりたくない

一つのファイルの中で分岐させるようにしたい

方法

結論、containsやendsWithを利用することで条件分岐をさせることができる

ブランチの情報はgithub.refgithub.base_refで取得できる

github.ref

Push時のブランチ名を取得することができます

そのままブランチ名が出てくるわけではなく、refs/heads/(ブランチ名)という値になっています (タグのときはrefs/tags/(ブランチ名)となるようです)

なので、末尾が一致しているかどうかを判定するendsWithを使うことでチェックを行います

github.base_ref

PullRequest先のブランチ名を取得できます

これはgithub.refとちがってブランチ名をそのまま取得することができます

こちらはそのままイコールで比較すればいいんですが、めんどうなので同じようにendsWith使っています

endsWithとcontains

endsWithは上記のとおりですが、今回の私のケースだと末尾がバージョンになっていて、毎回名前が変わるという状況でした(例:release/〇〇.〇〇)

その時は文字列が含まれているかどうかを確認するcontainsを用います

この2つ以外にも、頭を比較するstartsWithもあります

サンプル

name: ANDROID_CI
on:
  push:
    branches:
      - develop
      - release/**
      - master
  pull_request:
    branches:
      - develop
      - release/**
      - master
    paths-ignore:
      - .idea/**
      - README.md

jobs:
  build:
    runs-on: ubuntu-latest
    steps:    
    - uses: actions/checkout@v2
    
    - name: only release and master
      if: contains(github.ref, '/release') || contains(github.base_ref , 'release') || endsWith(github.ref, '/master') || endsWith(github.base_ref , 'master')
      run: (実施したい処理)

まとめ

よくあるケースだとは思うのですが、案外調べて引っかからなかったので今回備忘録としてまとめておきました

お役に立てると幸いです

今回も最後まで見てくださってありがとうございました