📝

GitHub Actionsを活用したプルリクエスト承認フローの自動化

2023/12/23に公開

本稿は GitHub Actions Advent Calendar 23日目の記事です。

https://qiita.com/advent-calendar/2023/github-actions

今回プルリクエスト承認フローに関するgithub actionsを作成しました!
https://github.com/hayawata3626/team-approval-checker

作成するに至った経緯

社内でUIライブラリを開発していて、そのレビューフローに以下の肩書きの人たちが存在します。

  • デザイナー
  • エンジニア

エンジニアだけでなく、デザイナーにもデザイン面での確認などをしていただき、より質の高いコンポーネントの作成に取り組んでいます。エンジニアもレビューをしていく中で自分達にはないデザイナーの視点を学びながらデザインに関心を持つようになってきていると思います。(レビューのやり取りはgithubのpull requestで行っています)

レビューフローを構築したとき、レビューをパスするための条件を以下のように定義しました。

  • エンジニアメンバーから最低2名の承認
  • デザイナーから最低2名の承認

職種に応じてgithubのteamを作成しています。

そこで上記の条件をクリアした時のみ、PRをマージできるようにしたいです。
そのような要望に合致するgithubの機能やactionsを探しましたが、中々見当たりませんでした。(これ見逃しているよなどあれば教えてください!)

このような経緯がありまして、今回このgithub actionsを作成しました。

特長と利点

  • 指定されたチームメンバーからの承認を得るまでPRのパイプラインを失敗させ、ヒューマンエラーによるマージを防ぐ(以下該当コード)
  • 組織内の異なるチームごとに異なる条件を設定可能

https://github.com/hayawata3626/team-approval-checker/blob/main/src/main.ts#L100-L104

使い方

.github/workflows/check-team-approvals.yml

実際に利用する際のコードになります。

name: Check Team Approvals

on:
  pull_request:
    types: [opened, synchronize, reopened]

jobs:
  check-team-approvals:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Generate a token
        id: generate_token
        uses: tibdex/github-app-token@v1
        with:
          app_id: ${{ secrets.APP_ID }}
          private_key: ${{ secrets.PRIVATE_KEY }}

      - name: Run approval check
        uses: hayawata3626/team-approval-checker@v1.1.0
        with:
          conditions:
            '[{"team": "team1", "minimumCount": 3}, {"team": "team2",
            "minimumCount": 2}]'
          github-token: ${{ steps.generate_token.outputs.token }}

組織内のメンバーを取得するには、GitHubトークンに適切な権限が付与されていることを確認してください。

conditions

こちらにteam名と最低何件の承認数が欲しいかを渡します。
上記の例では、team1から最低3つ、team2から最低2つの承認を得ない限り失敗します。

github-token

このgithub actionは組織内のメンバーを取得するため、githubトークンに適切な権限を与えてください。

詳しくはREADME.mdをみてみてください。

まとめ

あまりユースケースがないかもしれませんが、初めてカスタムアクションを作成してみて、簡単に作成することができました。

このgithub actionsを使用することで、特定のチームメンバーからの承認が必要なレビューフローをより安全に運用できます。組織内のチームごとに異なる設定をすることもできますし、protected-branchesとの組み合わせにより、制御が強化され、マージの品質が向上するかと思います。

今回github actionsを作成する上で、以下のテンプレートがありました。typescriptで作成するのに重宝します。

https://github.com/actions/typescript-action

Discussion