wharfy 0.16.0 — チャネルを畳む。消さずに

何が新しいか

チャネルを畳むには channels: から消すしかなかった。消した瞬間 wharfy はそのチャネルを 知らなくなり、告知を運ぶ主体がいなくなる。これからは、消さずに畳むと言う。

channels: [homebrew, script, goinstall]   # 触らない

deprecate:
  script:
    since: "1.4.0"
    ship: true          # 既定。移行のあいだは配り続ける
    message: |
      install スクリプトは 1.4.0 で終わります。Homebrew を使ってください。

文面は逐語で運ばれる。wharfy は書かないし、書き換えないし、自分の言葉で包まない。 届く経路は 2 つある。片方だけでは誰かを取り残すからだ。

誰に どこから
これから入れる人 チャネル固有の注記欄 — Homebrew/Cask の caveats、Scoop の notes、deb/rpm の description、AUR の post_install、install スクリプト
すでに入れた人 latest.json(CLI が更新チェックで見ている)— caveats は install 時にしか出ない

deprecate: を書かなければ、生成物は 1 バイトも変わらない。

告知を載せる場所が無いチャネル

Go module に description は無い。container image にも無い。wharfy はそれを黙らない。

⚠ deprecate_no_notice_surface: goinstall: deprecated, but this channel has no
  place to carry your notice — it reaches users only via latest.json

警告であって、エラーではない。latest.json だけで足りるという判断は配布者のものだ。

ship: false — 配るのをやめ、告知は続ける

そのチャネルは最後に配った版で止まる。新版は届かない。告知がどこまで届くかは、 そのチャネルが何を書き直させてくれるかで決まる。

チャネル どうなるか
homebrew, cask, scoop, aur 凍結版でマニフェストを作り直す — 同じバイナリ、新しい告知
script install.sh / install.ps1 は凍結版を入れ、新しい告知を出す
apt, rpm, container, winget, homebrew-core 何も書かない。告知は latest.json から届く
releases, goinstall 凍結できない — Release は他チャネルの資産置き場で、go install は最新 tag を取る

マニフェストを凍結版で作り直すには、その版の資産の sha256 が要る。だから wharfy は publish の たびに、そのチャネルへ実際に配った成果物を記録する。一度も配っていないチャネルには凍結先が 無い。そのとき wharfy は何も配らない — 止めたはずの経路から新版が漏れるほうが悪い。 凍結は「新版が出ない」という不在の形で現れるので、何を据え置いたかを publish のたびに言う。

0.16.1 — install.ps1 は一度も動いていなかった

0.15.0 で足した install.ps1 は、どの Windows でも失敗していた。PowerShell は "$Project:" をドライブ修飾変数として読むので、スクリプトは解析の時点で死ぬ。 アーキテクチャの判定にすら届かない。

+   default { Write-Error "$Project: unsupported arch: ..." }
+                          ~~~~~~~~~
変数参照が正しくありません。':' が有効な変数名の文字の後に指定されませんでした。

正しくは ${Project}。0.16.1 がそれを配る。生成した install.ps1 に $env: 以外の ドライブ修飾変数が現れたら、テストが落ちるようにした。

入れ方

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