🥴
GitHub Actions で Pull Request に動的なコメントを追加する
はじめに
以下の機能をもつGitHub Actions のワークフローを書きました。
- Pull-Requestがオープン(作成)される時、ブランチ名に基づいてAPIを動的に呼び出す
- その返り値に含まれるタスクチケットの内容をコメントで追加する
実行結果
ワークフローのサンプル
実装は以下の通り
.github/workflows/pr_manager.yml
name: pr manager
on:
pull_request:
types: [opened]
branches-ignore:
- 'production'
jobs:
add-comment:
runs-on: ubuntu-latest
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: get issue summary, post comment
run: |
# branch名が指定の様式であるときのみワークフローを実行
issue_id=$(echo ${{ github.head_ref }} | sed -E 's/^.*(Proj-[0-9]+).*$/\1/')
if ! [[ $issue_id =~ ^Proj-[0-9]+$ ]]; then
exit 0
fi
# APIを叩いてタスクチケットの詳細を取得
issue=$(curl -X GET "https://project-4iF48QPqM2Fa.myjetbrains.com/api/issues/$issue_id?fields=idReadable,summary" \
-H 'Accept: application/json' \
-H 'Authorization: Bearer ${{ secrets.YOUTRACK_TOKEN }}')
cat << EOF > comments
$(echo $issue | jq -r .summary)
https://project-4iF48QPqM2Fa.myjetbrains.com/youtrack/issue/$(echo $issue | jq -r .idReadable)
EOF
# Github CLIでタスクチケットの詳細をコメントに追加
gh pr comment -F ./comments ${{ github.event.pull_request.html_url }}
ポイントの紹介
ブランチ名を切り出して変数に格納
# branch名が指定の様式であるときのみワークフローを実行
issue_id=$(echo ${{ github.head_ref }} | sed -E 's/^.*(Proj-[0-9]+).*$/\1/')
if ! [[ $issue_id =~ ^Proj-[0-9]+$ ]]; then
exit 0
fi
ブランチ名がtopic/Proj-1923-next-feature
のような時だけ処理が進むようにしています。
exitしているのはネストを浅くするためと、後述されているヒアドキュメントがうまく動かなくなった回避策です。
APIを叩く
# APIを叩いてタスクチケットの詳細を取得
issue=$(curl -X GET "https://project-4iF48QPqM2Fa.myjetbrains.com/api/issues/$issue_id?fields=idReadable,summary" \
-H 'Accept: application/json' \
-H 'Authorization: Bearer ${{ secrets.YOUTRACK_TOKEN }}')
ここではブランチ名から切り出したチケットIDを使って、タスクチケットの詳細を取得しています。jsonで返ってきた値が二つあるのでここではparseする前に変数に入れています。
コメントを作成しPOSTする
cat << EOF > comments
$(echo $issue | jq -r .summary)
https://project-4iF48QPqM2Fa.myjetbrains.com/youtrack/issue/$(echo $issue | jq -r .idReadable)
EOF
# Github CLIでタスクチケットの詳細をコメントに追加
gh pr comment -F ./comments ${{ github.event.pull_request.html_url
ここでコメントの内容を作成し、POSTしています。
以下では先ほど取得したAPI jsonをparseしています。
echo $issue | jq -r .idReadable
また、次のように環境変数を設定することでGithub cliが使えるようになります
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
参考
Discussion