🐙

GitHub Actions - プルリクエストを作成するシンプルなジョブを作ってみた

2024/05/08に公開

概要

プルリクエストを作成する GitHub Actions のジョブを作成しました。

仕様

仕様は以下の通りシンプルです。

  • マージ先ブランチはmainとする
  • コミットメッセージをプルリクエストタイトルに使用する
  • Assignees はワークフローの実行を最初にトリガーしたユーザーを設定する
    • pushをトリガーとしている場合はpushしたユーザー
  • ワークフローを実行したブランチのプルリクエストが既に存在している場合、プルリクエストは作成されない

サンプル(実行結果)

実装

.github/workflows/create-pull-request.yml
jobs:
  create_pull_request:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Check and Create Pull Request
        env:
          GH_TOKEN: ${{ secrets.ACTIONS_TOKEN }}
        run: |
          PR_COUNT=$(gh pr list --head "${{ github.ref_name }}" --json number --jq '. | length')
          if [[ $PR_COUNT == 0 ]]; then
            gh pr create \
              -B main \
              -t "${{ github.event.head_commit.message }}" \
              -a "${{ github.actor }}"  \
              -F ./.github/workflows/PR_template.md
          else
            echo "PR already exists."
          fi

実装の解説

GitHub CLI を使用して実装していきます。
https://docs.github.com/ja/github-cli/github-cli/about-github-cli

トークンの設定

env:
  GH_TOKEN: ${{ secrets.ACTIONS_TOKEN }}

GitHub Actions で GitHub CLI を使用したい場合、環境変数GH_TOKENを設定します(参考)。
ACTIONS_TOKENは任意の名前です。必要な権限を設定したトークンを作成して、シークレットに設定してください。

該当ブランチのプルリクエスト数を取得

gh pr list --head "${{ github.ref_name }}" --json number --jq '. | length'
  • コマンド gh pr list を使用
    • オプション--json number で JSON形式で出力(フィールドは適当にnumberのみ指定)
  • github.ref_nameでワークフロー実行中のブランチ名を取得(コンテキスト一覧
  • jqのフィルター. | lengthで、JSONオブジェクトの配列の要素数を取得
    • .はJSONデータそのものであり、jq の length関数に渡している

プルリクエストの作成

gh pr create \
  -B main \
  -t "${{ github.event.head_commit.message }}" \
  -a "${{ github.actor }}"  \
  -F ./.github/workflows/PR_template.md
  • コマンド gh pr create を使用
  • github.event.head_commit.messagegithub.actorコンテキスト一覧を参照
  • -Fオプションでプルリクエストの本文を設定可能

まとめ

シンプルなものが無かったので共有してみました。
本サンプルをベースにして、プロジェクトに合わせて色々カスタマイズしてみてください。
以上です。

参考

https://cli.github.com/manual/

https://docs.github.com/ja/actions/learn-github-actions/contexts

https://github.com/mskasa/sample-actions/actions

GitHubで編集を提案

Discussion