🐙
GitHub Actionsで自動アサイン
学習用の手順メモです
今回はレビュワーとレビュイーを自動でアサインするワークフローを作ります
手順
-
.github/workflows
ディレクトリを作成 -
.github/workflows
にyamlファイルを作成 - ワークフローの設定
- ジョブを作成
ワークフローの設定
name
ワークフローの名前
リポジトリのアクションタブに表示される
name: GitHub Actions
on
on
を使用してワークフローを実行する原因となるイベントを定義する
on: pull_request
細かい設定は公式ドキュメントを見る
ジョブを作成
ワークフローで実行される一連の処理
ジョブは複数作成できる
jobs:
setup:
(setupジョブの設定)
assign:
(assignジョブの設定)
以下をジョブごとに設定する
jobs.id
今回はassign
とする
jobs:
assign:
jobs.id.name
ジョブのid
github actionsにわかりやすく表示されるのであったほうがいい
jobs:
assign:
name: Assign reviewers and reviewers
jobs.id.runs-on
実行環境を指定する
jobs:
assign:
(略)
runs-on: ubuntu-latest
jobs.id.steps
ジョブで実行される一連のタスク(配列)
jobs:
assign:
(略)
steps:
- タスク
- タスク
タスクごとに設定を行う
なおstepsにはいろいろなコマンドがあるので使うときに調べる
jobs.<job_id>.steps
以下はよく使う設定
jobs.id.steps[*].name
実行名
github actionsにわかりやすく表示されるのであったほうがいい
steps:
- name: set assignee
jobs.id.steps[*].run
OS(オペレーションシステム)のシェルを使用して、実行したいコマンドをかく
今回はOSがubuntuだから、shellscriptを使用
steps:
- run: echo "🐧 assignee is ${{ github.actor }}"
jobs.id.steps[*].env
環境変数を設定できる
steps:
- env:
ASSIGNEE: "my_account"
run: echo "🐧 assignee is ${ASSIGNEE}"
jobs.id.step[*].if
実行条件を設定できる
steps:
- if: ${{ github.actor === 'my_account' }}
run: echo "🐧 assignee is my_account"
github のコンテキスト
ワークフロー内で使えるコンテキスト
ワークフローの実行とその実行をトリガーしたイベントの情報が含まれる
以下のgithub.actor
は ワークフローの実行をトリガーしたユーザ名
- run: echo "🐧 assignee is ${{ github.actor }}"
たくさんあるので公式ドキュメントで確認
上記を踏まえて作成する
name: Auto Assignees and Reviewers
on: pull_request
jobs:
assign:
runs-on: ubuntu-latest
steps:
- name: Set Assignee
run: |
assignee_count=$(cat ${{ github.event_path }} | jq '.pull_request.assignees | length')
if [[ 0 == $assignee_count ]]; then
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
-d "{ \"assignees\": \"${{ github.actor }}\" }" \
https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.pull_request.number }}/assignees
fi
- name: Set Reviewers
env:
REVIEWERS: "${{ vars.REVIEWERS }}"
run: |
reviewers=$(echo "\"${REVIEWERS// /}\"" | jq 'split(",") | .-["${{ github.actor }}"]')
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
-d "{ \"reviewers\": $reviewers }" \
https://api.github.com/repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/requested_reviewers
補足
-
${{ vars.REVIEWERS }}
は リポジトリで設定した環境変数で、ここにアサインしたいアカウントをカンマ区切りで書いています
user1,user2,user3
- Set Assignee では assignee が既にいる場合は上書きしないように条件分岐
- Set Reviewers では assignee をレビュワーから除外
Discussion