はじめに
Github Actionみなさん使ってますか?
もしCIとして使い始めてるなら簡単にブランチの保護設定ができるのでご紹介します。
個人開発のケースみたいにライトに事故防止ができるので結構捗っています。
ブランチの保護設定とは
こんな感じでCIのパスやレビューのapproveがないとマージできない設定です。
今回は個人開発を想定しているので、Github Actionによるブランチ保護設定のみご紹介します。
設定手順
今回扱うGithubActionについて
先にパスすべきGithub Action設定を行います。
詳しくは説明しませんが、例として現在個人開発で運用しているファイルを晒します。
jobにはユニットテスト用のtest
と結合テスト用のup
でそれぞれ名前をつけて運用しています。
今回の保護設定はこのtest
とup
をパスすればマージできるように設定します。
name: Node CI
on:
- pull_request
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: init variable
run: sed -e "s|<GITHUB_TOKEN>|${GITHUB_TOKEN}|" -e "s|<FIREBASE_TOKEN>|${FIREBASE_TOKEN}|" .env.example > .env
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
- name: run test
run: make test
- name: slack notification
uses: 8398a7/action-slack@v2
if: always()
with:
status: ${{ job.status }}
username: github-functions
icon_emoji: ':octocat:'
text: ":eyes: :eyes: :eyes: テスト終わったよ :eyes: :eyes: :eyes: :eyes:"
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
up:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: init variable
run: sed -e "s|<GITHUB_TOKEN>|${GITHUB_TOKEN}|" -e "s|<FIREBASE_TOKEN>|${FIREBASE_TOKEN}|" .env.example > .env
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
- name: run test
run: make e2e
- name: slack notification
uses: 8398a7/action-slack@v2
if: always()
with:
status: ${{ job.status }}
username: github-functions
icon_emoji: ':octocat:'
text: "デプロイ準備完了 :+1: "
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Pull requestの度に稼働させていたいので、
on:
- pull_request
とjobのフックをpull requestに設定させています。
github.com上の設定
- 設定したいブランチのsettings > branchesにアクセス
- 右の
Add rule
をクリック
-
保護したいブランチ名をBranch Name Patternに入力
詳しくは公式を見るとよきですが、ワイルドカード(*
)も使えます(e.g. develop/* …etc) -
以下2つのチェックをつける
- Require status checks to pass before merging
- Require branches to be up to date before merging
-
必要なステータスにもチェックをつける
Github Actionを追加済みの場合ここにjob名が追加されているはずなので、必須化させたいjob名のチェックをつけます(今回はtest
とup
を選択)。
もし追加されていない場合は先にPRを立てるなりしてActionを動かす必要はあるかもです。
-
管理者も設定対象にする
- Include administratorsにチェックを入れる。個人開発の場合おそらくリポジトリは管理者権限のあるアカウントで開発を行うはずなのでこのチェックをいれましょう。
-
保存する
スクロールするとsave changes
があるのでボタンをクリックして設定を保存します。(初回はcreate
です)
以上です。お疲れ様でした。
余談
ステータス追加でファイルを選ぶと動かない?
このような形で一生pendingしてました。バグかわからないですが、job名を明示的に指定するほうが無難で良さそうですね。
Circle CIの場合
https://circleci.com/docs/2.0/enable-checks/
もちろん、Github Actionじゃないと出来ない設定ではありません。Circle Ciや他CIでもできる設定です。
感想
別にGithub Actionじゃないと出来ないわけではないですが、Github内で完結して安全な設定が自然とできることは結構メリット大きいんじゃないでしょうか?
色々楽に設定ができるので助かってます。