- Published on
botにpushされてもGithub Actionsが動かない件
端的に言うとGithub Actionsでは、Action中にpushするパターンは無限ループが発生するリスクがあるので、実行者がボットgithub-actions[bot]の場合に限り、merge/pushした際には、その先のブランチで走るべきCIをキックしない仕様があり、対策が必要です。
経緯)自動マージの有効化を毎回するのはだるいので、Github Actionsにやらせました
こんな感じですぐ実装できます。
name: On pull requests, enable auto merge and auto-assign reviewers
on:
pull_request:
types: [opened, reopened, review_requested, ready_for_review]
jobs:
enable-auto-merge:
runs-on: ubuntu-latest
permissions: write-all
if: github.event.pull_request.draft == false
steps:
- name: Enable auto merge
run: gh pr merge --auto --merge "$PR_URL" -t "$PR_TITLE" -b "$PR_BODY"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_URL: ${{ github.event.pull_request.html_url }}
PR_TITLE: ${{ github.event.pull_request.title }}
PR_BODY: ${{ github.event.pull_request.body }}
でもこれでマージしてしまうと、マージ先のCIが走らなくなります。
実行者がボットgithub-actions[bot]の場合に限り、merge/pushした際には、その先のブランチで走るべきCIをキックしない仕様があるようです。
Github ActionsでAction中にpushするパターンは無限ループが発生するリスクがあるのでこれの回避のためっぽいです。参考
対策としてはボットとしてCIを実行しないように開発者個人で使うパーソナルアクセストークンを代わりに渡してあげればよいです。
# Before
# secrets.GITHUB_TOKENは組み込み変数であり常にセットされているが、github-actions[bot]名義でghを実行してしまい不適切
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# After
# 変数名を例としてPERSONAL_ACCESS_TOKENとしているが、Organizationレベルで保存されたシークレットを参照する場合などはその変数名に書き換える必要があるし、逆にレポジトリ固有のシークレットを使う場合は別途手動で登録が必要である
GH_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}