🐧

ghcp を使って GitHub API で commit や branch を生成する

2023/06/17に公開

GitHub API で commit や branch を生成できる ghcp という OSS を紹介します。

https://github.com/int128/ghcp

開発者様のブログも参照してください。

https://int128.hatenablog.com/entry/2019/03/19/133950

この OSS で何ができるかは README や上記ブログを読んでいただくとして、何が便利なのかを書きたいと思います。

自分はこの OSS が好きで色々なところで使っていますが、便利な割にあまり知られていない気がするのでブログを書くことにしました。
tfactionaquaproj/update-checksum-action でも使っていて、 CI やスクリプトで Pull Request を生成したり Pull Request を自動で修正して commit を push したりする際に便利です。

commit や branch を生成するのは Git でも出来ますが、 Git と比べて以下のような点で便利です。

  • local にリポジトリをチェックアウトする必要がない
  • 色々な Git コマンドを実行する必要がなく、処理が簡潔になる
    • git config, checkout, add, commit, push, etc
  • commit するために user.name や user.email を設定したり、署名について考えたりする必要がない

local にリポジトリをチェックアウトする必要がない

local にリポジトリをチェックアウトする必要がないので、複数のリポジトリに同じようなファイルを追加する Pull Request をまとめて生成したいときなんかは効率よく処理することが出来ます。

例えば自分の全リポジトリに FUNDING.yml を追加したいといった場合に、
リポジトリを checkout するのに比べて遥かに効率よく実現できます。

色々な Git コマンドを実行する必要がなく、処理が簡潔になる

Git を使って commit を生成して pull request に push しようと思うと色々な Git コマンドを実行しないといけなくて結構面倒です。
ghcp なら基本 1 command で実現できるので処理が簡潔になります。

commit するために user.name や user.email を設定したり、署名について考えたりする必要がない

CI で Git を使って commit を生成する場合 user.name や user.email を設定する必要がありますが、はじめてやる際には何を設定すればいいんだろうと少し迷いますよね。自分は迷います。
ググるとこれに関連したものは幾つかヒットします。

https://qiita.com/thaim/items/3d1a4d09ec4a7d8844ce

https://github.com/orgs/community/discussions/26560

また、 branch protection rule で signed commit が必須になっている場合、 commit に署名がされていないと Pull Request がマージできません。

https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#require-signed-commits

https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits

CI で commit に署名をしようと思うと GPG key を用意してそれを管理してみたいな話になって面倒ですよね。

一方 GitHub App で access token を生成して ghcp でコミットすれば GitHub が署名してくれるので signed commit が必須になっていても Pull Request をマージできます。

image

This commit was created on GitHub.com and signed with GitHub’s verified signature.

ファイルの削除対応

残念ながら int128/ghcp は v1.13.4 現在ファイルの削除に対応していません。
そこで自分が fork してファイルの削除に対応させたものがあります。
ファイルの削除が必要な方はそちらを使うとよいでしょう。

https://github.com/suzuki-shunsuke/ghcp

Discussion