Git on Debian

ブラウザからではなくCLIでGitHubのリモートレポジトリを作ってみる gh利用

の続きです。

まず1回ちゃんとREST APIからGitHubのレポジトリを作成する方法をきちんと復習してみましょうかね?適当に検索するのでは無く、GitHubで原典にあたろうというわけです。もちろんRemote Repository Manager作る時にはAPIの使い方習いましたけどね。要はhttpsのputするわけです。パラメーター付けて。さて、

github rest api create repository

とかの検索ワードでBing君に探してもらいましょう。Copilot君が口を挟んでくるかもしれませんが、一発で、

あたったようですね。一番上のリンクから、中の“Create repository for authentic user…”を選択します。日本語に切り替えられるようです。

右側のペインで、”cURL”,”JavaScript”,”GitHub CLI”とありますが、ここでは一番右を選択します。

# GitHub CLI api
# https://cli.github.com/manual/gh_api

gh api \
  --method POST \
  -H "Accept: application/vnd.github+json" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  /user/repos \
   -f "name=Hello-World" -f "description=This is your first repo!" -f "homepage=https://github.com" -F "private=false" -F "is_template=true"

この例では、レポジトリの名前(name)、レポジトリの記述(description)、public or private、テンプレートを使うか等が指定できるようです。上のコードをそのままDebianのBashに食わせることはできません、文末の継続行文字(\)は長いコマンドラインを入れる時の継続行なので、1回エディタに食わせてからワンラインに修正する必要があります。その際に上記のname,description,public等々をなおせばいいのですね。実行前に、ghをインストールする必要もありますね。ghについては、

に記述があります。ghはGitHub純正ですね。Debianでは

sudo apt update
sudo apt install gh

でインストールできます。というかできました。

サンプルと、目的を比較して、

gh api --method POST -H "Accept: application/vnd.github+json" -H "X-GitHub-Api-Version: 2022-11-28" /user/repos -f "name=Hello-World" -f "description=This is your first repo!" -f "homepage=https://github.com" -F "private=false" -F "is_template=true"

を

gh api --method POST -H "Accept: application/vnd.github+json" -H "X-GitHub-Api-Version: 2022-11-28" /user/repos -f "name=alt-rajiru" -f "description=NHK rajiru recording script" -f "homepage=https://github.com" -F "private=false" -F "is_template=false"

nameとdescriptionと、せいぜいpublic or privateじゃないの?

実行してみましょうかね。

nao@debian-g:~/nhk$ gh api --method POST -H "Accept: application/vnd.github+json" -H "X-GitHub-Api-Version: 2022-11-28" /user/repos -f "name=alt-rajiru" -f "description=NHK rajiru recording script" -f "homepage=https://github.com" -F "private=false" -F "is_template=false"
To get started with GitHub CLI, please run:  gh auth login
Alternatively, populate the GH_TOKEN environment variable with a GitHub API authentication token.

あるあるさね。

そういえば、PATをどこにもかいてなかった。後者の方法で指定しますかね。

export GH_TOKEN= ghp_your_original_personal_access_code

に続いて、

nao@debian-g:~/nhk$ export GH_TOKEN=ghp_あなたのPAT
nao@debian-g:~/nhk$ gh api --method POST -H "Accept: application/vnd.github+json" -H "X-GitHub-Api-Version: 2022-11-28" /user/repos -f "name=alt-rajiru" -f "description=NHK rajiru recording script" -f "homepage=https://github.com" -F "private=false" -F "is_template=false"
{
  "id": 987279442,
  "node_id": "R_kgDOOtiwUg",
  "name": "alt-rajiru",
  "full_name": "alt-doc-nao/alt-rajiru",
  "private": false,
  "owner": {
    "login": "alt-doc-nao",
以下省略

無事Createできたようですね。ブラウザで確認すると、

emptyなrepositoryができてます。これでいいのだ。ちなみに、cURLとghで比較すると、

cURL

curl -L \
  -X POST \
  -H "Accept: application/vnd.github+json" \
  -H "Authorization: Bearer <YOUR-TOKEN>" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  https://api.github.com/user/repos \
  -d '{"name":"Hello-World","description":"This is your first repo!","homepage":"https://github.com","private":false,"is_template":true}'


Github CLI

# GitHub CLI api
# https://cli.github.com/manual/gh_api

gh api \
  --method POST \
  -H "Accept: application/vnd.github+json" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  /user/repos \
   -f "name=Hello-World" -f "description=This is your first repo!" -f "homepage=https://github.com" -F "private=false" -F "is_template=true"

なので、それほど面倒さは変わりませんが、強いて言えばcURLでData field(つまりJSON)をコマンドラインで書くのは面倒です。それに比べると、ghの方は独立して-fオプションで書けるから、その分だけ楽かな?パラメーター付きのスクリプトで書くのもすっきり書けるかもしれませんね。

コメント