1
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?

GitHub ActionsでPull Requestの作成者を自動アサインする方法

Last updated at Posted at 2025-01-13

はじめに

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. ワークフローの構文

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

1
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
1
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?