🙆
特定の差分を commit する EndBug/add-and-commit の紹介
はじめに
特定の差分を 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
Discussion