🐡

GitHub Actions: 処理結果を自動的にコミットする (リトライあり)

2024/12/22に公開

GitHub Actions から何らかの変更をしてコミットする際、処理中に他からコミットがあるとコミットに失敗してしまいます。以下のように記述するとマージしてリトライすることができます。

jobs:
  foo:
    steps:
      - name: Commit changes
        if: always()
        run: |
          if [ "$(git diff)" != "" ]; then
            git config user.email "action@github.com"
            git config user.name "GitHub Actions"
            git commit -a -m "(comment)"
            for i in {0..4}; do
              if git push; then
                break
              fi
              if [ ${i} -eq 4 ]; then
                echo "exceeded maximum retries, exiting with error"
                exit 1
              fi
              echo "git push failed, retrying ($((${i} + 1)))"
              sleep $((2 ** ${i})).$((RANDOM % 10))
              git pull --no-ff
            done
          fi

補足

  • マージでコンフリクトした場合は失敗します。

Discussion