🐙
「approve me」とコメントすると Approve してくれる GitHub Actions ワークフロー
イメージとしてはこんな感じ。
用途としては、ブランチ保護の設定で、1人以上の Approve をマージボタン活性化の条件にしてあるが、緊急でマージしたい場合や、軽微なので自己判断でマージしたい、という場合。
これを実現するワークフローは次のようになる。編集にも対応しているので、ちょっと if 文が複雑になっているが、やっていることはそんなに難しくないはず。
name: Approve Me
on:
issue_comment:
types: [created, edited]
jobs:
approve:
name: Approve
if: |
github.event.issue.state == 'open' &&
github.event.issue.pull_request != null &&
contains(github.event.comment.body, '@github-actions approve me') &&
(github.event.action != 'edited' || (github.event.action == 'edited' && !contains(github.event.changes.body.from, '@github-actions approve me')))
runs-on: ubuntu-latest
steps:
- name: Approve pull request
env:
GH_REPO: ${{ github.repository }}
GH_TOKEN: ${{ github.token }}
run: gh pr review ${{ github.event.issue.number }} --approve
プルリクのコメントだけに反応させ、Issue でのコメントには反応させないように github.event.issue.pull_request != null
を指定している。もしコードをチェックアウトしてあればカレントのリポジトリがそれにより判断されるので環境変数 GH_REPO
は不要だが、このワークフローの場合はチェックアウトしてないので指定が必要となっている。
ブランチ保護の意味ないじゃん!と思うかもしれないが、信頼できるチームメンバーのみ参画するプロジェクトでは問題ないと思うし、いちおうコメントすることは必要なのでこっそりと Approve させることは出来ないのでよいかなと思う。コメントにチームメンバーへの申し送り的な文言を含める運用でもよさそう。
それでも気になるなら、何かしらのジョブの実行条件を追加して、より限定的にすることを検討されたし。例えばプルリクの base ブランチを取得して、開発系のブランチへのマージだけで許可するとか、特定のユーザによるコメントのみ許可するとか。
今回は Approve だが、これを応用すると色々なことを実行させることが出来そう。
Discussion
コメントしたユーザが CODEOWNERS であることを条件に追加するのも良さそうに思いました。
以下が必要でした。
permissions: pull-requests: write
をruns-on
の後に追加する