はじめに
GitHubでのPull Request(PR)の作成者を自動的にアサインする方法をまとめています。
実装までの試行錯誤
1. 実装で発生したエラーと解決策
初期実装では以下の問題が発生しました
問題点
- GITHUB_EVENT_PATHからPR情報を直接取得しようとしていた
- permissionsの設定が不足していた
改善点
- GitHub Contextを使用してPR情報を取得するように変更
- permissionsブロックで権限を明示的に設定
2. ワークフロー実行の最適化
問題点
ドキュメント更新などでも不要な実行が発生していました
改善点
以下のようにpaths-ignoreを設定し、特定のファイル変更時はワークフローを実行しないようにしました
paths-ignore:
- '**/*.md'
- '**/*.csv'
- '.gitignore'
- '.github/**'
- 'docs/**'
実装方法
ワークフローファイルの作成
.github/workflows/
ディレクトリに以下の2つのワークフローファイルを作成します
メインワークフロー(main_workflow.yml)
name: Main Workflow
on:
push:
branches:
- main
paths-ignore:
- '**/*.md'
- '**/*.csv'
- '.gitignore'
- '.github/**'
- 'docs/**'
pull_request:
types:
- opened
- reopened
- synchronize
permissions:
pull-requests: write
jobs:
trigger-assign-pr:
name: Trigger Assign PR Creator
uses: ./.github/workflows/assign_pr_creator.yml
secrets: inherit
PRアサインワークフロー(assign_pr_creator.yml)
name: Assign PR Creator
on:
workflow_call:
permissions:
pull-requests: write
jobs:
assign-pr-creator:
runs-on: ubuntu-latest
steps:
- name: Install Dependencies
run: sudo apt-get update && sudo apt-get install -y curl
- name: Assign PR Creator
run: |
if [ "${{ github.event_name }}" = "pull_request" ]; then
PR_NUMBER="${{ github.event.pull_request.number }}"
PR_AUTHOR="${{ github.event.pull_request.user.login }}"
curl -L \
-X POST \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"https://api.github.com/repos/${{ github.repository }}/issues/${PR_NUMBER}/assignees" \
-d "{\"assignees\":[\"${PR_AUTHOR}\"]}"
else
echo "This is not a pull request event"
exit 0
fi
ポイント
1. 権限設定
-
permissions
ブロックでpull-requests: write
を設定 - GitHubが自動生成するトークンを使用(追加設定不要)
2. パスの除外
-
paths-ignore
で不要なファイル変更時のワークフロー実行を防止 - ドキュメントや設定ファイルの変更時は実行しない
3. シークレットの継承
-
secrets: inherit
で親ワークフローから子ワークフローへトークンを継承
まとめ && 所感
- PRのレビュー時に数が多いと対象PRを探しにくく、せめてレビュイーが登録されているといいなと思いながら幾年
- 「自動化すればいいじゃん」と思い、個人開発しているリポジトリへの実装に挑戦しましたが、権限周りや不要な実行の調整で予想以上に時間がかかりました(笑)
- 今回のことで
GitHub Actions
の理解も深まり、他の自動化にも応用できそうです - それはそうとfolio構築の最後終わらせないとな(  ̄- ̄)トオイメ
Appendix: 関連する公式ドキュメント
1. GITHUB_TOKENの認証
-
Automatic token authentication
- GitHub Actionsで自動的に生成されるGITHUB_TOKENの仕組み
- トークンの権限とスコープについて
2. ワークフローの構文
-
Workflow syntax for GitHub Actions
-
on
イベントトリガーの詳細 -
paths-ignore
の設定方法 -
permissions
の設定方法
-
3. ワークフローの再利用
-
Reusing workflows
-
workflow_call
トリガーの使用方法 -
secrets: inherit
の動作について
-
4. GitHub REST API
-
GitHub REST API Documentation
- アサイン用エンドポイント
/repos/{owner}/{repo}/issues/{issue_number}/assignees
- 必要なヘッダーとパラメータ
- アサイン用エンドポイント
5. GitHub Actions Permissions
-
Permissions for the GITHUB_TOKEN
-
pull-requests: write
の詳細 - デフォルトの権限設定
-