GitHub Actions からボットによる Issue / Pull Request コメントを投稿する

結論から #

gh cli (v2.69.0+) で gh issue comment または gh pr comment コマンドを利用するのが簡単です。特に、ワークフローが繰り返し実行されコメントを更新していくような場合には --create-if-none, --edit-last オプションの組み合わせが便利です。

name: Comment

on:
  workflow_dispatch:

jobs:
  comment:
    runs-on: ubuntu-latest
    permissions:
      # GITHUB_TOKEN の権限を指定 (コメントをするためには write 権限が必要です)
      issues: write
    steps:
      # Issue #42 に Bot ユーザーによるコメントを追加します。
      - run: |
          gh issue comment 42 --body 'Hello, world!'
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          # Note. checkout (clone) していないので、操作対象リポジトリを環境変数 GH_REPO で指定しています。
          # checkout していればこれは省略できます。
          # https://cli.github.com/manual/gh_help_environment
          GH_REPO: ${{ github.repository }}
      # Issue #42 における Bot ユーザーのコメントを更新 (upsert) します。
      - run: |
          gh issue comment 42 --edit-last --create-if-none --body 'Hello, world! (edited, ${{ github.run_id }})'
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          GH_REPO: ${{ github.repository }}
      # GITHUB_TOKEN の権限でアクセスできるのは、このワークフローを実行しているリポジトリのみです。
      # 他のリポジトリにアクセスしたり、あるいは、ボットユーザーを独自のボットユーザーにしたい場合、
      # 適当な権限を持つ GitHub App を作成およびインストールし、その App の権限で gh コマンドを実行します。
      - uses: actions/create-github-app-token@67018539274d69449ef7c02e8e71183d1719ab42 # v2.1.4
        id: auth
        with:
          # secrets は設定済みであるとする。
          app-id: ${{ secrets.APP_ID }}
          private-key: ${{ secrets.APP_PRIVATE_KEY }}
      - run: |
          gh issue comment 42 --edit-last --create-if-none --body 'Hello, world! (by ${{ steps.auth.outputs.app-slug }}, ${{ github.run_id }})'
        env:
          GH_TOKEN: ${{ steps.auth.outputs.token }}
          GH_REPO: ${{ github.repository }}
ボットによるコメントの例

ボットによるコメントの例

詳細・議論 #

コメントの投稿は最終的には GitHub API を利用するわけですが、いくつかの手法があります。