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 リポジトリから。