はじめに
Pull-Request にコミットが追加されると bot がコメントをする という GitHub Actions のワークフローを書きました。
実行結果
ワークフローのサンプル
次のように記述しました。
2022 年 1 月 24 日追記:https://cli.github.com (gh
コマンド)を用いたシンプルな実装に置き換えました。
name: comment_on_pr
on:
pull_request:
types: synchronize
jobs:
comment:
runs-on: ubuntu-latest
steps:
- name: Create comments
run: |
cat << EOF > comments
1st
2nd
3rd
EOF
- name: Post comments
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
URL: ${{ github.event.pull_request.html_url }}
run:
gh pr comment -F ./comments "${URL}"
2019 年 9 月の初回投稿時当初のサンプルはもう古くなったので以下に折りたたんでおきます。
2019 年 9月に投稿した時のサンプル
name: comment_on_pr
on:
pull_request:
types: synchronize
jobs:
comment:
runs-on: ubuntu-latest
steps:
- name: Create comments
run: |
echo "1st" >> comments
echo "2nd" >> comments
echo "3rd" >> comments
sed -i -z 's/\n/\\n/g' comments
- name: Post multi-line comments
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
URL: ${{ github.event.pull_request.comments_url }}
run: |
curl -X POST \
-H "Authorization: token ${GITHUB_TOKEN}" \
-d "{\"body\": \"$(cat comments)\"}" \
${URL}
ポイントの紹介
types でワークフローのトリガーを細かく制御する
on:
pull_request:
types: synchronize
pull_request
がトリガーをかけるデフォルトのアクティビティタイプは、[opened, synchronize, reopened]
に制限されていることが以下からわかります。今回のサンプルでは、起票済みの Pull-Request にコミットが push された時だけトリガーをかけたかったので synchronize
アクティビティタイプに変更しました。
secrets 変数として GitHub Token が使える
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
これは GitHub 側で提供されている Actions 用 bot アカウントの認証トークンです。このトークンを利用することで GitHub を API で操作することができるようになります。トークンに割り当てられた権限については以下にまとめられています。
また、便利なことに ${{ secrets.GITHUB_TOKEN }}
は利用者が登録しなくても最初から使えるようになっています。他の secrets
変数の登録と利用方法については以下が参考になります。
なお、Actions のログに secrets
変数が表示されていないことは以下のように確認しました。
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run:
echo GITHUB_TOKEN is ${GITHUB_TOKEN}.
# GITHUB_TOKEN is ***.
コンテキストへの参照ができる
env:
URL: ${{ github.event.pull_request.html_url }}
${{ <context> }}
という式から、コンテキストを参照することができます。今回は Pull-Request の URL が必要だったので、${{ github.event.pull_request.html_url }}
から URL を参照しました。
なお、${{ github.event }}
はワークフローをトリガーした webhook のペイロードで、 ${GITHUB_EVENT_PATH}
にも同じものが json ファイルとして保存されています。したがって、このコンテキストへの参照をする代わりに、直接 webhook のペイロードをパースすることもできます。
デフォルトで jq が使える(おまけ)
jq -r '.pull_request.comments_url' ${GITHUB_EVENT_PATH}
どのホストからでも jq が使えるようでした。
Preinstalled software >> Ubuntu2004-Readme.md
jq 1.6
なお ${GITHUB_EVENT_PATH}
以外の環境変数は、以下が参考になります。
おわり
2019 年 9 月現在、GitHub Actions はベータ版という位置づけで、申し込みをすることで誰でも無料で利用できるようになっています。今後 2019 年 11 月 13 日に正式バージョンがリリースされる予定なので、それまでに更に便利になると良いと思います。