🗂

GitHub Actionsが起こしたイベントでGitHub ActionsをTriggerできない

に公開

そういう仕様です

無限ループを防ぐため

どうする

GitHub Appsを作り、それに実行させる。

PATを作るのは微妙なので、 actions/create-github-app-token を使う。

コピペで使える例

事前準備

  • Github Appsを作る
  • APP_IDとPRIVATE_KEYを設定する

ファイル作成

create-github-app-token でTokenを取得してそれを使用します。

GitHub Actionsでgofumptを実行してcommitまで行い自動修正してもらう に対応を加える例です

name: Autofix Gofumpt

on:
  pull_request:
    types: [ opened, synchronize ]

env:
  GO_VERSION: "1.22.6"

jobs:
  format:
    runs-on: ubuntu-latest
    permissions:
      contents: write
    steps:
      # 無限ループ対策のためにGitHub ActionsがPushしたTriggerでGitHub Actionsを動かすことができないためGitHub AppsにPushさせています。
      # ref: https://github.com/ad-m/github-push-action/issues/32
      - uses: actions/create-github-app-token@v1
        id: github_apps
        with:
          app-id: ${{ vars.AUTOFIX_BOT_APP_ID }}
          private-key: ${{ secrets.AUTOFIX_BOT_PRIVATE_KEY }}

      - name: Checkout
        uses: actions/checkout@v4
        with:
          ref: ${{ github.head_ref }}
          token: ${{ steps.github_apps.outputs.token }}

      - name: Setup Go
        uses: actions/setup-go@v5
        with:
          go-version: ${{ env.GO_VERSION }}

      - name: Install gofumpt
        run: go install mvdan.cc/gofumpt@latest

      - name: Run gofumpt
        id: gofumpt
        run: |
          gofumpt -d -e -l -w .
          if [ -n "$(git status --porcelain)" ]; then
            echo "changes_detected=true" >> $GITHUB_OUTPUT
          else
            echo "changes_detected=false" >> $GITHUB_OUTPUT
          fi

      - name: Commit changes
        if: steps.gofumpt.outputs.changes_detected == 'true'
        run: |
          git config --global user.name 'github-actions[bot]'
          git config --global user.email 'github-actions[bot]@users.noreply.github.com'
          git add .
          git commit -m "style: apply gofumpt formatting"
          git push

Discussion