GitHub Actions上で変更をコミットしたい
GitHub Actions上で変更をコミットしたいケースがある。例えばGitHub Actions上でlintを実行して修正を自動反映したいケース。
このときgit configコマンドでどのユーザのcommitにするか指定する必要がある。
実際にはどのユーザを指定すればよいか。
ユーザの設定方法
GitHub Actions上で git config user.email <メールアドレス>
を実行する。
GitHubではgit userのメールアドレスでユーザ識別されるので、GitHubユーザで登録したメールアドレスと一致していればよい。
on: push
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: |
date > generated.txt
git config user.name "thaim"
git config user.email "thaim@example.com"
git add .
git commit -m "generated"
git push
もしくは、GitHubのnoreplyメールアドレスを利用する方法もある。
GItHubユーザ名thaim
およびユーザID 1024789
(これはAPIよりわかる)に対して、thaim@users.noreply.github.com
、または 1024789+github-actions@users.noreply.github.com
をメールアドレスに指定しても対象ユーザとして認識される。ユーザIDを指定する場合のメールアドレスのうちメールエイリアスに相当する github-actions
の部分はどのような文字列を指定してもよいが、文字列を指定しない 1024789@users.noreply.github.com
だと該当ユーザとして認識されない。
ちなみに、このID+string@users.noreply.github.com
はドキュメントの記載と挙動が若干異なる。アカウントを作成したのは2017年よりはるかに前だが、ID+USERNAME@...
もUSERNAME@...
も両方利用できた。また、メールエイリアス部分は試した限りユーザ名以外でも認識された。このあたりよくわかっていない。
選択肢
特定ユーザ
個人開発している場合などで、コミットしているユーザは1人であり、同一ユーザ扱いでコミットして欲しい場合は、そのユーザとして認識されるように設定する。
単純に対象ユーザのメールアドレスを設定してもよいし、GitHub ユーザIDを用いたメールアドレスを指定してもよい。
git logから自動抽出
複数ユーザで開発している場合で、直前のコミットと同一ユーザでコミットして欲しい場合はgit logからユーザ情報を取得すればよい。
git config user.name "$(git --no-pager log --format=format:'%an' -n 1)"
およびgit config user.email "$(git --no-pager log --format=format:'%ae' -n 1)"
を指定すれば、直前のコミットログからgitユーザ情報を取得できる。
マシンユーザ
各種自動化のためにマシンユーザを利用している場合は、そのユーザのemailアドレスを設定する方法もある。
actions-user
emailにaction@github.com
を指定することで actions-userとしてコミットできる。もしくは、このユーザのGitHub IDを利用して 65916846+actions-user@users.noreply.github.com
を指定してもよい。
この方法は、action/checkoutのイシューSet git user and emailにて紹介されており、多くのリポジトリで採用されているとのこと。
このユーザはアイコンとしてGitHub Actionsが指定されているので、Actionsとしてわかりやすい。
ちなみに、actions/checkoutのREADMEで例示されている github-actions@github.com
をメールアドレスに指定しても有効なユーザとして認識されない。
github-actions[bot]
emailに 41898282+github-actions[bot]@users.noreply.github.com
を指定することで github-actions[bot] を利用する方法もある。
この方法はGitHub CommunityのGitHub Actions bot email address?というトピックで紹介されている。
このユーザ(APIによると厳密にはbot)は secrets.GITHUB_TOKEN によるAPI操作を行ったときに呼び出されるユーザでもある。このため、secrets.GITHUB_TOKEN を用いてプルリクやリリースノートの自動作成を行っている場合はコミットもこのユーザを指定しておくとGitHub Actionsの操作を単一ユーザに統一できる。
また、このユーザはアイコンとしてGitHubが指定されているので、actions-userより馴染みのある人が多いかもしれない。