wharfy 0.16.0 — winding a channel down without deleting it

What’s new

Retiring a channel used to mean removing it from channels:. The moment you did, wharfy stopped touching it — and stopped being able to tell anyone. Now you say so and leave it in place.

channels: [homebrew, script, goinstall]   # leave it in

deprecate:
  script:
    since: "1.4.0"
    ship: true          # default: keep shipping while you migrate
    message: |
      The install script is going away in 1.4.0. Please use Homebrew instead.

Your message is carried verbatim. wharfy never writes it, rewrites it, or wraps it in words of its own. It reaches users by two paths, because either one alone leaves someone behind:

who how
people installing now the channel’s notice field — Homebrew/Cask caveats, Scoop notes, deb/rpm description, AUR post_install, the install scripts
people who installed already latest.json, which your CLI already polls — caveats only ever appears at install time

Writing no deprecate: block leaves every generated artifact byte-for-byte identical.

Nowhere to put a notice

A Go module has no description field. Neither does a container image. wharfy does not pretend otherwise:

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

It is a warning, not an error. You may decide latest.json is enough.

ship: false — stop shipping, keep announcing

The channel stays at the last version you published there. No new version reaches it. How far the notice still travels depends on what the channel lets wharfy rewrite:

channels what happens
homebrew, cask, scoop, aur the manifest is rebuilt at the frozen version — same binaries, new notice
script install.sh / install.ps1 keep installing the frozen version and print the new notice
apt, rpm, container, winget, homebrew-core nothing is written; the notice reaches users via latest.json
releases, goinstall cannot be frozen — a Release holds every other channel’s assets, and go install resolves the newest tag

Rebuilding a manifest needs the checksums of the frozen version’s assets, so wharfy records them with each publish. A channel frozen before it was ever published has no version to freeze at: wharfy ships nothing rather than leak a new version through a route you closed. Every publish says what it froze — freezing shows up as an absence, and an absence is easy to read as success.

0.16.1 — install.ps1 never ran

install.ps1, added in 0.15.0, failed on every Windows machine. PowerShell reads "$Project:" as a drive-qualified variable, so the script died while being parsed. It never reached the architecture check.

+   default { Write-Error "$Project: unsupported arch: ..." }
+                          ~~~~~~~~~
Variable reference is not valid. ':' was not followed by a valid variable name character.

The fix is ${Project}. 0.16.1 ships it, and a test now rejects any drive-qualified variable other than $env: in the generated script.

Getting it

brew upgrade wharfy / scoop update wharfy / go install github.com/ShiroDoromoto/wharfy/cmd/wharfy@latest. On Linux, from the apt / yum repo.