GitHub の Release へのアップロードに ghr を使う

GitHub の Release へカジュアルにアップロードする方法はないものかと考えて、CLI ツールを検討するに至った。 候補はいくつかみつかったが、シンプルで使いやすそうな ghr を試してみた。

github.com

一般的なアップロード方法

もっともベーシックな方法としては、Web UI からポチポチしてアップロードする。 利点としては、わかいやすいので権限さえ渡せば誰でもできること。 欠点としては、コマンドラインから操作できないことと自動化しにくいこと。

GitHub が提供するもうひとつの方法は、API 経由でアップロードすること。 認証には設定画面から発行可能なトークンを利用する。 利点としては、自動化できること。 欠点としては、REST API のドキュメントをよく確認した上でコマンドを打つことになるので、カジュアルには実行できないこと。

ghr とは

ghr は、メルカリインフラエンジニアの @deeeet さんが公開されているツール。 設計的には go-github というライブラリをラップしていて、挙動的には GitHubAPI を叩いている。

$ ghr \
    -t TOKEN \        # Set Github API Token
    -u USERNAME \     # Set Github username
    -r REPO \         # Set repository name
    -c COMMIT \       # Set target commitish, branch or commit SHA
    -b BODY \         # Set text describing the contents of the release
    -p NUM \          # Set amount of parallelism (Default is number of CPU)
    -delete \         # Delete release and its git tag in advance if it exists
    -draft \          # Release as draft (Unpublish)
    -prerelease \     # Crate prerelease
    TAG PATH

GitHub 上の USERNAME / REPO のリポジトリにアップロードされる。 ポイントは、PATH としてディレクトリも指定できること。 ディレクトリ内の複数のファイルを、一回のコマンドでアップロードできる。 これは、クロスコンパイルするなどしてアップロード対象のファイル複数ある場合に便利である。

あと地味にうれしいところを二つ。

  • GHE に対応していて、社内 GitHub にも適用可能。
  • brew でもパッケージ管理されているので、インストールだけでなくバージョン管理も便利。

まとめ

ghr 使いやすかったので、常用していきたい。 そもそもながら、hub コマンドにこういった機能が欲しいところではあります。