🙆

特定の差分を commit する EndBug/add-and-commit の紹介

2024/05/07に公開

はじめに

特定の差分を commit するような GitHub Actions の workflow の step を作る際に、これまで私は以下のように数行のシェルスクリプトを記述することで実装していました。

- uses: actions/checkout@v4
- name: Confirm diff
  id: confirm-diff
  run: |
    git add "${FILE_PATH}"
    result=0
    git diff --cached --exit-code --quiet || result=$?
    if [ "${result}" -eq 0 ]; then
      echo "diff=false" >> "${GITHUB_OUTPUT}"
    elif [ "${result}" -eq 1 ]; then
      echo "diff=true" >> "${GITHUB_OUTPUT}"
    else
      echo "exit code of diff is unknown: ${result}"
      exit 1
    fi
- name: Commit
  if: ${{ steps.confirm-diff.outputs.diff == 'true' }}
  run: |
    git config user.email github-actions[bot]@users.noreply.github.com
    git config user.name github-actions[bot]
    git switch -C "${SOURCE_BRANCH}"
    git commit -m "Update file"
    git push -u origin "${SOURCE_BRANCH}"

しかし、特定の差分を commit したいケースは結構あります。その度に上記のようなシェルスクリプトを記述するのはできれば避けたいものです。

EndBug/add-and-commit とは

EndBug/add-and-commit という action を用いることで上記の実装を以下のように記述できます。

- uses: actions/checkout@v4
- name: Commit
  uses: EndBug/add-and-commit@v9
  id: commit
  with:
    author_name: github-actions[bot]
    author_email: github-actions[bot]@users.noreply.github.com
    message: "Update file"
    add: ${{ env.FILE_PATH }}
    new_branch: ${{ env.SOURCE_BRANCH }}

結果に応じて別の処理を実行する

EndBug/add-and-commit により実際に commit を行ったか否かは outputs から取得可能です。
そのため結果に応じた処理を後続の step で行うことができます。

以下は commit を行った場合に PR を作成してマージする step の例です。

- name: Create pull request and merge
  if: ${{ steps.commit.outputs.committed == 'true' }}
  run: |
    gh pr create --title "Update files" --body "Update files" --base main --head "${SOURCE_BRANCH}"
    gh pr merge "${SOURCE_BRANCH}" --auto --merge

参考

GitHubで編集を提案

Discussion