71
32

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GitHub ActionsAdvent Calendar 2022

Day 7

GitHub Actions上でgit commitするときにgit userをどうするか

Posted at

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としてわかりやすい。

image.png

ちなみに、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より馴染みのある人が多いかもしれない。

image.png

71
32
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
71
32

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?