GitHub ActionsでPRのコメントに返事を返すbotを動かす
githubAPIトークン
コメントを投稿するAPIを呼ぶためにトークンが必要だが、GitHub Actionsのジョブの実行中有効なGitHub Appトークンが自動生成され、${{secrets.GITHUB_TOKEN}}で参照できるのでこれを使う。 このトークンによるイベントではワークフローが発火しないので無限ループの心配がない。
AWS SAMとGoでPRのコメントに対して返事を返すGitHub Appを作る - sambaiz-net
リポジトリに対して大方の権限は付いているが、フォークしたリポジトリからはreadしかできないようになっている。
actions/github-script
octokit/core.jsを用いたGitHub APIを呼ぶスクリプトを実行できるAction。 直接ワークフローファイルに書くこともできるが、別のファイルに分けている。
containsで
hey bot
という文字列が含まれるときのみジョブを実行するようにしている。
name: echo-bot
on:
issue_comment:
types: [created]
jobs:
echo-bot:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/github-script@v2
if: ${{ contains(github.event.comment.body, 'hey bot') }}
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
const script = require(`${process.env.GITHUB_WORKSPACE}/.github/workflows/script.js`)
script({github, context})
$ cat .github/workflows/script.js
module.exports = ({github, context}) => {
github.issues.createComment({
issue_number: context.payload.issue.number,
owner: context.payload.repository.owner.login,
repo: context.payload.repository.name,
body: `You said ${context.payload.comment.body}`
})
}
実行
issue_commentイベントはデフォルトブランチにワークフローファイルがないと発火しないので置く。PRを作成して条件を満たすコメントをすると返事が返ってきた。 このbotの投稿自体もワークフロー発火の条件を満たしているが、発火せず無限ループしない。