7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Github Actionで個人開発でも簡単にブランチを保護しよう

Last updated at Posted at 2020-01-04

はじめに

Github Actionみなさん使ってますか?
もしCIとして使い始めてるなら簡単にブランチの保護設定ができるのでご紹介します。
個人開発のケースみたいにライトに事故防止ができるので結構捗っています。

ブランチの保護設定とは

こんな感じでCIのパスやレビューのapproveがないとマージできない設定です。
スクリーンショット 2020-01-04 21.58.59.png

今回は個人開発を想定しているので、Github Actionによるブランチ保護設定のみご紹介します。

設定手順

今回扱うGithubActionについて

先にパスすべきGithub Action設定を行います。
詳しくは説明しませんが、例として現在個人開発で運用しているファイルを晒します。
jobにはユニットテスト用のtestと結合テスト用のupでそれぞれ名前をつけて運用しています。
今回の保護設定はこのtestupをパスすればマージできるように設定します。


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をクリック

スクリーンシ<img width=

  • 保護したいブランチ名を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名のチェックをつけます(今回はtestupを選択)。
    もし追加されていない場合は先にPRを立てるなりしてActionを動かす必要はあるかもです。

スクリーンショット 2020-01-04 22.49.53.png
  • 管理者も設定対象にする

    • Include administratorsにチェックを入れる。個人開発の場合おそらくリポジトリは管理者権限のあるアカウントで開発を行うはずなのでこのチェックをいれましょう。
  • 保存する
    スクロールすると save changesがあるのでボタンをクリックして設定を保存します。(初回はcreateです)

スクリーンショット 2020-01-05 8.43.08.png

以上です。お疲れ様でした。

余談

ステータス追加でファイルを選ぶと動かない?

このような形で一生pendingしてました。バグかわからないですが、job名を明示的に指定するほうが無難で良さそうですね。
スクリーンショット 2020-01-04 22.55.27.png

Circle CIの場合

https://circleci.com/docs/2.0/enable-checks/
もちろん、Github Actionじゃないと出来ない設定ではありません。Circle Ciや他CIでもできる設定です。

感想

別にGithub Actionじゃないと出来ないわけではないですが、Github内で完結して安全な設定が自然とできることは結構メリット大きいんじゃないでしょうか?
色々楽に設定ができるので助かってます。

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?