Skip to content

dist-town/cli 0.4.0

Graham
Sep 1, 20263 min read

This release gives the CLI read capabilities, and reorganizes some commands in the name of consistency. There are breaking changes as a result.

The read surface

  • disttown release list [project] — what you've published, newest first, with channel and lifecycle state.
  • disttown release show <project> <version-or-pointer> — one release in full: digests, download locations with verification state, pointers, source claim, changelog. release show mytool latest works.
  • disttown project list and disttown pointer list <project> — your projects (aliases included) and where every pointer aims.
  • disttown whoami — who this machine publishes as, and whether your cached session's scopes still cover everything. The stale-session surprise now surfaces here instead of mid-publish.
  • disttown logout — clears the local session, but does not delete the session server-side.

Reads consult dist.town's index by default — the same public surface the pages use. --pds reads straight from your own repo instead, and --compare reports exactly where the two disagree (useful right after publishing, before the index catches up). Every read says which source answered, and everything takes --json.

Breaking: lifecycle verbs moved, and the vocabulary is complete

disttown yank is now disttown release yank <project> <version> — and it brought company:

  • release deprecate / release undeprecate — "still works, stop building on it." Deprecated releases keep resolving, with a warning.
  • release unyank — every verb has a named inverse now; --undo is gone.
  • project archive / project unarchive — wind a project down without breaking anything it ever shipped.

All of them take --kind and --reason — the inverses too, because "why it came back" is as much history as "why it left."

Breaking: --channel changes what latest means

disttown publish 2.0.0-rc1 --channel beta now moves the beta pointer and leaves latest alone. Previously it moved latest — which meant a release candidate could silently become what every updater and install script sees. The rule is one sentence: the default pointer follows the channel. Want a channel release on latest? Say so: --pointer latest --pointer beta. Naming any pointer replaces the default entirely. Channelless publishes are unchanged.

Fixed: publish could hang forever under OAuth

A logging deadlock could freeze the CLI — silently, permanently — on the first library log line emitted after login, which in practice meant the first blob upload of a publish. It could also invalidate your cached session on the way down, forcing a re-login.

Publish is harder to hurt yourself with

  • Scope problems now fail before anything uploads.
  • publish --dry-run prints the whole plan — digests, records, which pointers move — touching nothing. CI can gate on its exit status.
  • If a publish fails partway, the CLI names every file already uploaded (content-addressed, so retrying reclaims them; nothing is deleted).
  • disttown doctor [project] checks the whole pipeline in one go: session, scopes, PDS, storage, and whether dist.town's index can see you — with "publishable but not yet visible" clearly told apart from anything actually wrong.

Did you enjoy this article?

Recommend it — Standard Reader surfaces well-loved writing to more readers across the network.

Across the AtmosphereDiscussions