ghrls: GitHub Tags / Releases を手元からシュッと確認するツールを作った

GitHub に push されたタグの一覧、またタグに紐付いた Releases の情報をワンコマンドでシュッと表示するツール ghrls を作りました。

github.com

背景

自分は何かアプリケーション・ライブラリを作るときに依存ライブラリのバージョンを細かく気にする質で、たいてい Semantic Versioning でいう patch version レベルで指定しています (e.g. ~> 1.6.10, ~1.6.10)。 そういうわけで新しい依存を加えるときはまず最新バージョンがいくつか確認しているのですが、そのために毎回

  1. 該当リポジトリをブラウザで開く
  2. コミット数と並んでいる 30 Releases をクリックして開く
  3. 先頭に記載されたバージョン番号を確認する

というステップを踏んでいて、さすがに面倒になっていました。

f:id:dtan4:20170213223606p:plain

Releases に上がっている tarball の URL を確認するには、さらに「タグをクリックして開く」「tarball を右クリックで “Copy Link Address"」が加わりやってられない。

というわけで面倒くさいが高じた結果、手元でサクッと確認したいということになり ghrls を作りました。

使い方

ghrls list <user/name> で、そのリポジトリの Tag / Release 一覧を表示します。

$ ghrls list kubernetes/kubernetes | head
TAG               TYPE           CREATEDAT                        NAME
v1.6.0-alpha.0    TAG
v1.5.3-beta.0     TAG
v1.5.2            TAG+RELEASE    2017-01-12 13:51:15 +0900 JST    v1.5.2
v1.5.2-beta.0     TAG
v1.5.1            TAG+RELEASE    2016-12-14 09:50:36 +0900 JST    v1.5.1
v1.5.1-beta.0     TAG
v1.5.0            TAG+RELEASE    2016-12-13 08:29:43 +0900 JST    v1.5.0
v1.5.0-beta.3     TAG+RELEASE    2016-12-09 06:52:35 +0900 JST    v1.5.0-beta.3
v1.5.0-beta.2     TAG+RELEASE    2016-11-25 07:29:04 +0900 JST    v1.5.0-beta.2

ghrls get <user/name> <tag> で、指定したタグの Release 情報を表示します。 対応するコミットハッシュや作成日、Release にアップロードされた成果物 URL などが表示されます。

$ ghrls get kubernetes/kubernetes v1.5.2
Tag:         v1.5.2
Commit:      08e099554f3c31f6e6f07b448ab3ed78d0520507
Name:        v1.5.2
Author:      saad-ali
CreatedAt:   2017-01-12 13:51:15 +0900 JST
PublishedAt: 2017-01-12 16:25:50 +0900 JST
URL:         https://github.com/kubernetes/kubernetes/releases/tag/v1.5.2
Assets:      https://github.com/kubernetes/kubernetes/releases/download/v1.5.2/kubernetes.tar.gz

See [kubernetes-announce@](https://groups.google.com/forum/#!forum/kubernetes-announce) and [CHANGELOG](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md#v152) for details.

SHA256 for `kubernetes.tar.gz`: `67344958325a70348db5c4e35e59f9c3552232cdc34defb8a0a799ed91c671a3`

Additional binary downloads are linked in the [CHANGELOG](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md#downloads-for-v152).

各プラットフォーム対応バイナリを上げてある例も:

$ ghrls get dtan4/s3url v1.0.0
Tag:         v1.0.0
Commit:      0ebc096229e46f560827b9e041479abf5cf3823b
Name:
Author:      dtan4
CreatedAt:   2017-02-06 00:59:16 +0900 JST
PublishedAt: 2017-02-06 01:04:06 +0900 JST
URL:         https://github.com/dtan4/s3url/releases/tag/v1.0.0
Artifacts:   https://github.com/dtan4/s3url/releases/download/v1.0.0/s3url-v1.0.0-darwin-386.tar.gz
             https://github.com/dtan4/s3url/releases/download/v1.0.0/s3url-v1.0.0-darwin-386.zip
             https://github.com/dtan4/s3url/releases/download/v1.0.0/s3url-v1.0.0-darwin-amd64.tar.gz
             https://github.com/dtan4/s3url/releases/download/v1.0.0/s3url-v1.0.0-darwin-amd64.zip
             https://github.com/dtan4/s3url/releases/download/v1.0.0/s3url-v1.0.0-linux-386.tar.gz
             https://github.com/dtan4/s3url/releases/download/v1.0.0/s3url-v1.0.0-linux-386.zip
             https://github.com/dtan4/s3url/releases/download/v1.0.0/s3url-v1.0.0-linux-amd64.tar.gz
             https://github.com/dtan4/s3url/releases/download/v1.0.0/s3url-v1.0.0-linux-amd64.zip
             https://github.com/dtan4/s3url/releases/download/v1.0.0/s3url-v1.0.0-windows-386.tar.gz
             https://github.com/dtan4/s3url/releases/download/v1.0.0/s3url-v1.0.0-windows-386.zip
             https://github.com/dtan4/s3url/releases/download/v1.0.0/s3url-v1.0.0-windows-amd64.tar.gz
             https://github.com/dtan4/s3url/releases/download/v1.0.0/s3url-v1.0.0-windows-amd64.zip

インストール

Mac をお使いであれば Homebrew でインストールできます。 Go で書いてワンバイナリ吐くようにしておくと、Homebrew で簡単に配布できて最高。

$ brew tap dtan4/tools
$ brew install ghrls

GitHub Releases で各プラットフォーム対応のバイナリを配布しています。

このまま即使うこともできますが、GitHub API の制限で未ログインユーザは1時間に60回しか API call できないようになっています (参照)。 IP ベースの制限なので、オフィス / 集合住宅からの通信や Homebrew を併用する場合は速攻で上限に引っかかる可能性があります。

なので、心配な方はここから Personal Access Token を発行して、GITHUB_TOKEN 環境変数にセットしておいてください1。これなら1時間5000回まで上限緩和されます。

おわりに

ghrls を作ったおかげで、新しくツールを作るときの初速がだいぶ上がりました。 バグとか Feature Request、Pull Request をぜひいただけると幸いです :pray:


  1. Homebrew の場合も、HOMEBREW_GITHUB_API_TOKEN を設定することで同様の上限緩和が可能です (参照)。