0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

developマージ時にリリース一覧込みのリリースPRを作成

Last updated at Posted at 2024-02-03

概要

リリース時に、リリース対象の洗い出しが大変なため自動で作りたいと思った。
developにPRがマージされるタイミングで

  • develop to mainのPRがなければ
    →PR作成とdevelopにマージしたPRのタイトルとリンクをbodyに入れる
  • develop to mainのPRがあれば
    既存PRのbodyにdevelopにマージしたPRのタイトルとリンクをbodyに追記

使用イメージ
image.png

ワークフロー定義ファイル作成

下記のようにyamlファイルを配置する
./.github/workflows/pr_to_main_on_develop_merge.yaml

pr_to_main_on_develop_merge.yaml
name: Automate and Update Release PR

on:
  pull_request:
    types: [closed]
    branches:
      - develop

jobs:
  createOrUpdateReleasePR:
    if: github.event.pull_request.merged == true
    runs-on: ubuntu-latest
    
    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Setup GitHub CLI
        run: |
          if gh --version; then
            echo "GitHub CLI is already installed."
          else
            sudo apt update
            sudo apt install gh
          fi

      - name: Create or Update PR to Main
        env:
          GITHUB_TOKEN: ${{ secrets.CREATE_RELEASE_PR_TOKEN }}
        run: |
          PR_TITLE="${{ github.event.pull_request.title }}"
          PR_URL="${{ github.event.pull_request.html_url }}"

          # 既存のPRを検索
          existing_pr=$(gh pr list --base main --head develop --state open --json number --jq '.[0].number')

          if [ -z "$existing_pr" ]; then
            description=$(printf "PRs for Release:\n- [$PR_TITLE]($PR_URL)")
            # 新しいPRを作成し、説明にマージされたPRの情報を含める
            gh pr create --base main --head develop --title "Release PR from Develop to Main" --body "$description"
          else
            # 既存のPRの説明を取得
            existing_description=$(gh pr view $existing_pr --json body -q .body)
            # 既存のPRの説明を更新
            updated_description=$(printf "$existing_description\n- [$PR_TITLE]($PR_URL)")
            gh pr edit $existing_pr --body "$updated_description"
          fi

個人アクセストークン(PAT)の生成:

  1. GitHubにログイン:まずGitHubにログインします。
  2. 設定にアクセス:右上のプロフィール画像をクリックし、「Settings」を選択します。
  3. Developer settingsに進む:画面の左側のメニューから「Developer settings」を選択します。
  4. Personal access tokensに移動:「Personal access tokens」セクションを選択します。
  5. 新しいトークンを生成:「Generate new token」ボタンをクリックします。
  6. トークンの設定:
    トークンに名前を付けます(例:「CREATE_RELEASE_PR_TOKEN」)。
    必要なスコープ(権限)を選択します。通常、「repo」スコープが適切です。
    「Generate token」をクリックしてトークンを生成します。
    image.png
  7. トークンをコピー:
    生成されたトークンをコピーします。これは一度しか表示されないので、安全な場所に保存してください。

GitHubリポジトリにトークンを追加:

  1. リポジトリの設定にアクセス:GitHubで対象のリポジトリに移動し、「Settings」タブをクリックします。
  2. Secretsに移動:左側のメニューから「Secrets」セクションを選択します。
  3. 新しいシークレットを追加:「New repository secret」をクリックします。
  4. シークレットの詳細を入力:
    「Name」フィールドには、シークレットの名前を入力します(例:「CREATE_RELEASE_PR_TOKEN」)。
    「Value」フィールドには、先ほどコピーしたトークンの値をペーストします。
    「Add secret」をクリックしてシークレットを保存します。
    image.png

設定完了

この後に、developにPRがマージされるとリリースPRが作成されると思います。

試行錯誤したこと

毎回対象のPRを全て取得するアプローチ

PRのbodyを間違って消してしまったりすることを考慮して、対象のPRを毎度一から取得する方法がよさそうと考えました。
しかしこちらを確認したところ、下記ができそうになかったため膨大なPRを取得する可能性があると思ったため断念しました。
・mainの最新コミット以降の、PRマージを取得すること
・日時でフィルターをかけて取得

labelで取得すればできなくはなさそうであるが

  • developにマージする時にlabelつけて
  • mainにマージする時にlabel消す

をする必要がありGitHub Actionsが増えるし、label運用方法を周知したりすることが面倒そうなので諦めました。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?