wharfy 0.14.0 — 更新チェック用の静的 latest.json

何が新しいか

wharfy release が、アーカイブや install.sh と並べて、同じ GitHub Release に静的 latest.json を書くようになった。

{
  "version": "0.14.0",
  "notes_url": "https://github.com/…/releases/tag/v0.14.0",
  "assets": {
    "macos-arm64":   "https://github.com/…/wharfy_0.14.0_darwin_arm64.tar.gz",
    "linux-x64":     "https://github.com/…/wharfy_0.14.0_linux_amd64.tar.gz",
    "linux-x64-deb": "https://github.com/…/wharfy_0.14.0_linux_amd64.deb",
    "windows-x64":   "https://github.com/…/wharfy_0.14.0_windows_amd64.zip"
  }
}

安定 URL は常に最新の Release を指す。

https://github.com/<owner>/<repo>/releases/latest/download/latest.json

なぜ静的ファイルか

brew でも scoop でも apt でも curl | sh でも、「新版があるか」は同じ問いなのに、経路ごとに答え方が違う。Windows はそもそも package manager を持たないことが多い。1つの安定 URL に置いた静的ファイルなら、どこでも同じに答えられる——取得して version を自版と比べるだけ。API も経路ごとの分岐も要らない。

キーは OS/arch(とパッケージ種別)を持つので、ユーザーを正しいダウンロードへ案内したいプロダクトは assets から URL をそのまま読める。GoReleaser の .deb/.rpm はアーカイブと同じ os/arch を持つため、wharfy は拡張子で種別を割る——.deblinux-x64 のアーカイブ項目を上書きすることはない。

wharfy がやること、やらないこと

wharfy はファイルを生成し、release のたびに発行し、契約(schemas/latest.json)を定義する。バイナリに更新チェッカを埋め込むことはしない——任意の言語で書かれたプログラムに注入はできないからだ。latest.json を読んでユーザーに通知するのはプロダクト側の実行時コードで、推奨は「既定 ON・タイムアウト・失敗はサイレント・キャッシュ・opt-out」。

入れ方

brew upgrade wharfy / scoop update wharfy / go install github.com/ShiroDoromoto/wharfy/cmd/wharfy@latest。Linux は apt / yum リポジトリから。