ドキュメントに書いているけど、はまったので。
gh api
コマンドでGitHubのREST APIが使えて大変便利です。レポジトリをcloneしたフォルダーで実行した場合、そのレポジトリの権限で認証してくれるのもよい(トークンがどうのとか考えなくていいのはめちゃくちゃ楽)。
今Azure Pipelinesで動かしていたスクリプトをGitHub Actionsへ移行するにあたって、今まで使えていた「直近のコミットを取得する」方法で悩んでいたのでメモ。APIそのものはこちらですが、パラメータどうやって渡すのか、というところで悩みました…。
gh api -H "Accept: application/vnd.github.v3+json" -H "X-GitHub-Api-Version: 2022-11-28" /repos/{owner}/{repo}/commits?per_page=1
これで一応行けるのですが、パラメータは一つのみで、二つ以上連結しても認識してくれない?みたい。結局のところghコマンドに-F
で渡せというのが正解のようです。
gh api -XGET -F per_page=1 -F path=folder -H "Accept: application/vnd.github.v3+json" -H "X-GitHub-Api-Version: 2022-11-28" /repos/{owner}/{repo}/commits
ドキュメントよりも先にissueでこの記述見つけたのですが、issueには-Fつけるなら-XGET
を明示的に書いてあったのでつけています。
私はいつもPowerShellで実行していますが、コミットメッセージに日本語含んでいる場合、Windows(日本語環境)だとエラーになるのにWSL2のUbuntu(英語環境のまま)だとエラーにならないので困ります。誰が悪いんだ。
$json = gh api -XGET -F per_page=1 -F path=folder -H "Accept: application/vnd.github.v3+json" ` -H "X-GitHub-Api-Version: 2022-11-28" /repos/{owner}/{repo}/commits ` | convertfrom-json
GitHub CLIのソースも見たけど、特に文字コード依存のところないっぽいしなぁ…。こんなので困っている人日本にいなさそうなので、聞いてみるか。