🐙
GitHub Actions - プルリクエストを作成するシンプルなジョブを作ってみた
概要
プルリクエストを作成する 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 を使用して実装していきます。
トークンの設定
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.message
やgithub.actor
はコンテキスト一覧を参照 -
-F
オプションでプルリクエストの本文を設定可能
まとめ
シンプルなものが無かったので共有してみました。
本サンプルをベースにして、プロジェクトに合わせて色々カスタマイズしてみてください。
以上です。
参考
Discussion