Releases: khmilevoi/rpi-deploy
Release list
v0.23.0
What changed
rpi command <name> --full— the live pane used to keep only the last 10 lines of output on screen once a command finished successfully; pass--fullto dump the complete captured log instead. (On failure, the full log was already dumped and still is.)- Internal: added maintainer-facing architecture docs and skill design notes; no user-facing effect.
Full changelog
Full Changelog: v0.22.0...v0.23.0
v0.22.0
What changed
rpi upgrade(new command) — update a board's agent to a chosen version from your laptop, over the SSH + sudo path you already use. It defaults to your CLI's own version (keeping the client and board in sync),--version <X>pins a specific version,--version latestpicks the newest published release, and--yesskips the confirmation. It showscurrent → target, triggers the update with an interactivessh -t … sudo rpi agent update(so the board's sudo can prompt), and re-reads/v1/versionafterward to confirm.rpi agent update(new board-side command) — obtains a fresh binary (refreshes the globalrpi-deploy@<version>on npm installs, or downloadsrpi-v<version>-<triple>.tar.gzfrom the GitHub Release), verifies its SHA-256 against the releaseSHA256SUMSbefore doing anything, atomically swaps/usr/local/bin/rpi, re-runs the idempotentagent setup, and restarts the unit only when the binary actually changed.--dry-runreports the plan without changing anything. The agent never touches its own binary — the privileged swap happens only undersudo, over authenticated SSH, exactly like the manual path it replaces.install.sh(new, no-npm installer) —curl -fsSL https://raw.githubusercontent.com/khmilevoi/rpi-deploy/master/scripts/install.sh | shinstalls a checksum-verified prebuilt binary on binary-only hosts (no Node required), sharing the exact download-and-verify recipe.RPI_VERSIONpins a version (default: latest) andRPI_INSTALL_DIRoverrides the target dir. It does not run setup — follow withsudo rpi agent setupon a Pi orrpi setupon a dev machine.
The trust model is unchanged: no new agent privilege, no new secret or trust anchor — integrity rests on the release SHA256SUMS over GitHub's TLS, the same anchor the npm postinstall already uses. Boards on older versions are updated once by the manual path (or install.sh + sudo rpi agent setup); every subsequent update is a single rpi upgrade.
Internal: release-artifact download/verify plumbing ported from postinstall.js, an SSH-exec runner, a Docker e2e scenario for the board-side update, and target-version validation on the client. See the full changelog below.
Full Changelog: v0.21.1...v0.22.0
v0.21.1
What changed
rpi stats -wnow quits the instant you ask it to.q,Esc, andCtrl-Cexit the live dashboard immediately, even in the middle of a refresh. Before, the periodic metrics fetch (docker statsover SSH, on the default 2s interval) ran on the same loop as keyboard input, so a keypress could be stuck waiting for the fetch to finish — the quit keys felt laggy or, if you happened to press during a slow refresh, dead. The fetch now runs off the input loop, so quitting is instant regardless of what the refresh is doing.
Internal
Metrics polling moved to a background task feeding the UI over a channel; the input/render loop was extracted (run_events) and covered with regression tests that quit while a fetch is stalled. Plus release-side security-review bookkeeping.
Full Changelog: v0.21.0...v0.21.1
v0.21.0
What changed
rpi stats -wis now a dashboard TUI. The live view shows CPU, memory, and temperature as separate cards — each with a large current value and its own mini line chart — replacing the previous single combined chart. The top strip now carries disk usage and uptime.- The services table shows real per-container status. Each service row now has a status pill (running / restarting / unhealthy / …) driven by the container's actual Docker state and healthcheck, plus an inline memory bar scaled to the heaviest service. Against an older agent that doesn't report status, the pill shows a neutral placeholder instead of a made-up value.
rpi doctor: the version-mismatch hint now points at the stale side — it tells you whether the CLI or the agent is the one behind, instead of a generic message.
Colours follow the raspberry theme and downgrade cleanly on terminals without truecolor; the dashboard adapts to smaller terminals (compact and minimal fallbacks) so it never overflows.
Internal
Rendering is split into a pure, unit-tested view-model (stats_view) and a rendering-only stats_tui; a new tui-big-text dependency draws the large card numbers; container state/health are threaded through ServiceStats/ServiceStatsDto, backward compatible with older agents via serde defaults.
Full Changelog: v0.20.1...v0.21.0
v0.20.1
What changed
-
Deployed containers now survive a host reboot.
rpi deploypinsrestart: unless-stoppedon the published service in its generated compose override. Before, the container inherited Docker's defaultrestart: no, so after the Pi rebooted the service stayed down (hosts returned 530) until someone randocker startby hand. A deliberaterpi stopis still respected across reboots — that's whyunless-stoppedand notalways.Scope: this covers the published
[ingress].serviceonly; other services (databases, workers) still take their restart policy from your own compose file. The new policy takes effect on your nextrpi deployafter upgrading — the override is regenerated on every deploy.
Full changelog: v0.20.0...v0.20.1
v0.20.0
What changed
rpi stats -w/--watchopens a full-screen live TUI (ratatui) with CPU, memory, disk, and temperature sparklines and history, refreshed on--interval(default 2s); quit withq/Esc/Ctrl-C. The static view (rpi stats) now also shows temperature and painted graphs in the brand accent color.- Host metrics collection: the agent now samples CPU/memory/disk/temperature in the background and serves recent history, powering the new stats views.
- CLI/agent version-skew handling: the CLI and agent now handshake on connect and gate commands against the agent's advertised feature set. Instead of a confusing raw error when the CLI and agent versions drift apart, you get a clear banner explaining what's unsupported.
rpi doctorgained a memory-cgroup accounting check with a fix hint, catching a class of host misconfiguration that previously surfaced as confusing OOM behavior.- Internal: refactored the CLI's feature-gating into a single
expect_featuresafety net (replacing ad-hoc 404 sniffing per route); added a cross-version e2e scenario that runs the current CLI against a pinned v0.17.1 agent to guard the compatibility layer; fixed a Docker BuildKit cache-mount race that intermittently broke the e2e build.