kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

GitHub CLIからREST APIを呼び出すときにクエリパラメータを渡す

ドキュメントに書いているけど、はまったので。

cli.github.com

gh apiコマンドでGitHubのREST APIが使えて大変便利です。レポジトリをcloneしたフォルダーで実行した場合、そのレポジトリの権限で認証してくれるのもよい(トークンがどうのとか考えなくていいのはめちゃくちゃ楽)。

今Azure Pipelinesで動かしていたスクリプトをGitHub Actionsへ移行するにあたって、今まで使えていた「直近のコミットを取得する」方法で悩んでいたのでメモ。APIそのものはこちらですが、パラメータどうやって渡すのか、というところで悩みました…。

docs.github.com

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のソースも見たけど、特に文字コード依存のところないっぽいしなぁ…。こんなので困っている人日本にいなさそうなので、聞いてみるか。