🔥

GitHub Actionsで自動でPull Requestを作った

に公開

課題

弊社では、開発プロセスの中心として develop ブランチを使用しています。新機能開発やバグ修正が終わり、それらが一定期間のテスト(QA期間)に入るタイミングで、develop ブランチから release-v1.0.0 のような形式のリリースブランチを作成し、QA環境へデプロイします。QA期間中にバグが見つかった場合、その修正はリリースブランチ(例: release-v1.0.0)に対して行われます。

具体的なフロー例:

  1. 開発フェーズ: develop ブランチで新機能の開発やバグ修正を行います。
  2. QA準備: QA期間に入る際、develop ブランチから release-v1.0.0 といった命名規則を持つリリースブランチを作成し、QA環境にデプロイします。
  3. バグ修正: QA期間中にバグが発見された場合、issue_500 のようなブランチを作成して修正を行い、その後 release-v1.0.0 にマージします。
  4. developブランチへの反映: release-v1.0.0 ブランチに対する修正が完了したら、その変更を develop ブランチにも反映させるためのPull Requestを作成します。

この最後のステップであるリリースブランチから develop ブランチへのPull Requestの作成を人の手で行っていましたが、この作業を忘れてしまうことが課題となっています。

解決方法

releaseブランチ → developブランチへのPull Requestを自動で作成するGitHub Actionsを作成しました。
またreleaseブランチがバージョンアップで変わってしまったとしても、環境変数で設定することで、動的に動くようにしました。

auto-pr-to-develop.yml
name: Auto PR from release to develop

on:
  push:
    branches:
      - 'release-v*'

jobs:
  create-pr:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      
      - name: Get release branch name
        id: get_branch
        run: echo "RELEASE_BRANCH_NAME=${GITHUB_REF#refs/heads/}" >> $GITHUB_ENV

      - name: Create PR to develop
        uses: repo-sync/pull-request@v2
        with:
          source_branch: ${{ env.RELEASE_BRANCH_NAME }}
          destination_branch: "develop"
          github_token: ${{ secrets.GITHUB_TOKEN }}
          pr_title: "Merge ${{ env.RELEASE_BRANCH_NAME }} into develop"
          pr_body: "This PR was auto-generated to merge ${{ env.RELEASE_BRANCH_NAME }} into the develop branch."

  1. Checkout: actions/checkout@v2 アクションを使って、リポジトリのコードをチェックアウトします。これにより、後続のステップでリポジトリのコードにアクセスできるようになります。

  2. Get release branch name: GITHUB_REF 環境変数から現在のブランチ名を抽出し、RELEASE_BRANCH_NAME という名前の新しい環境変数に格納します。GITHUB_REF は、アクションがトリガーされたリファレンス(例:refs/heads/release-v1.0.0)を保持します。${GITHUB_REF#refs/heads/} はシェルパラメータ展開を使用して、refs/heads/ プレフィックスを削除し、純粋なブランチ名を取得します。結果は GITHUB_ENV に書き込まれ、後続のステップで使用できるようになります。

  3. Create PR to develop: repo-sync/pull-request@v2 アクションを使用して、環境変数 RELEASE_BRANCH_NAME で指定されたリリースブランチから develop ブランチへのプルリクエストを作成します。このステップでは、github_token にGitHubが自動的に生成する GITHUB_TOKEN シークレットを使用して認証を行います。このトークンは、リポジトリ内での様々な操作(PRの作成など)を行うための権限を持っています。また、プルリクエストのタイトルと本文は、それぞれ pr_title と pr_body で設定されており、自動生成された内容を反映します。

参考

https://qiita.com/okazy/items/7ab46f2c20ec341a2836

GitHubで編集を提案

Discussion