Posted at

GitHub Releases にアップロードしてある最新バージョンの成果物を取得するワンライナー

More than 1 year has passed since last update.

e.g. dtan4/s3url 最新バージョンの Linux 64bit バイナリが入った tarball を取得する

$ curl -s https://api.github.com/repos/dtan4/s3url/releases | jq -r '.[0].assets[] | select(.name | test("linux-amd64.tar.gz")) | .browser_download_url'

https://github.com/dtan4/s3url/releases/download/v0.3.1/s3url-v0.3.1-linux-amd64.tar.gz

サーバに Go バイナリを配置していて定期的に更新したい場合は、このワンライナーと展開処理を行うスクリプトを cron とかで回しておけばよさそうです。


curl -s https://api.github.com/repos/dtan4/s3url/releases

dtan4/s3url リポジトリの Releases を取得する GitHub API です。

Public リポジトリなら認証無しで叩けますが、その場合の呼出回数は1時間あたり最大60回となってるので、Access Token を付与するほうが安心です。

Releases | GitHub Developer Guide


jq -r

-r オプションをつけると、ダブルクオートで囲まずそのまま文字列を返します。


.[0].assets[]

上記 API のレスポンスは Release 作成時刻 created_at 降順になっているので、先頭の要素が最新の Release となります。assets に成果物 (asset) のメタデータが配列で格納されてます。


select(.name | test("linux-amd64.tar.gz"))

name フィールドが linux-amd64.tar.gz にマッチする asset を抜き出します。test は与えられた正規表現にマッチするかどうかを true/false で返す jq 関数です。

jq Manual (development version)

ここまでで、こういう JSON が得られます。

{

"url": "https://api.github.com/repos/dtan4/s3url/releases/assets/2505550",
"id": 2505550,
"name": "s3url-v0.3.1-linux-amd64.tar.gz",
"label": "",
"uploader": {
"login": "dtan4",
"id": 680124,
"avatar_url": "https://avatars.githubusercontent.com/u/680124?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/dtan4",
"html_url": "https://github.com/dtan4",
"followers_url": "https://api.github.com/users/dtan4/followers",
"following_url": "https://api.github.com/users/dtan4/following{/other_user}",
"gists_url": "https://api.github.com/users/dtan4/gists{/gist_id}",
"starred_url": "https://api.github.com/users/dtan4/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/dtan4/subscriptions",
"organizations_url": "https://api.github.com/users/dtan4/orgs",
"repos_url": "https://api.github.com/users/dtan4/repos",
"events_url": "https://api.github.com/users/dtan4/events{/privacy}",
"received_events_url": "https://api.github.com/users/dtan4/received_events",
"type": "User",
"site_admin": false
},
"content_type": "application/gzip",
"state": "uploaded",
"size": 1773482,
"download_count": 3,
"created_at": "2016-10-20T15:58:38Z",
"updated_at": "2016-10-20T15:58:38Z",
"browser_download_url": "https://github.com/dtan4/s3url/releases/download/v0.3.1/s3url-v0.3.1-linux-amd64.tar.gz"
}


.browser_download_url

成果物そのものの URL を抜き出します。