title | emoji | type | topics | published | published_at | |||||
---|---|---|---|---|---|---|---|---|---|---|
GitHub Actions - プルリクエストを作成するシンプルなジョブを作ってみた |
🐙 |
tech |
|
true |
2024-05-08 07:00 |
プルリクエストを作成する GitHub Actions のジョブを作成しました。
仕様は以下の通りシンプルです。
- マージ先ブランチは
main
とする - コミットメッセージをプルリクエストタイトルに使用する
- Assignees はワークフローの実行を最初にトリガーしたユーザーを設定する
push
をトリガーとしている場合はpush
したユーザー
- ワークフローを実行したブランチのプルリクエストが既に存在している場合、プルリクエストは作成されない
- 全体はこちら
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
は任意の名前です。必要な権限を設定したトークンを作成して、シークレットに設定してください。
:::message
- GitHub Enterpriseの場合、設定する環境変数は以下になるので注意してください
env:
GH_ENTERPRISE_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_HOST: github.example.com
:::
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
オプションでプルリクエストの本文を設定可能
シンプルなものが無かったので共有してみました。 本サンプルをベースにして、プロジェクトに合わせて色々カスタマイズしてみてください。 以上です。
https://cli.github.com/manual/
https://docs.github.com/ja/actions/learn-github-actions/contexts