Skip to content

Releases: MahmoodSeoud/satDeploy

v0.3.13

14 Apr 16:36

Choose a tag to compare

Fix satdeploy status column header: DEPLOYED → HASH (matches the list table and actual cell contents).

v0.3.12

14 Apr 16:29

Choose a tag to compare

Drop redundant target header line from satdeploy status output.

v0.3.11

14 Apr 16:27

Choose a tag to compare

Fix README hero image (correct DISCO-2 render, cropped from the bottom).

v0.3.10

14 Apr 16:26

Choose a tag to compare

Promote remote binary path to its own PATH column in satdeploy status so deploy targets are scannable at a glance.

v0.3.9

14 Apr 16:23

Choose a tag to compare

Changes

  • satdeploy status now shows a clearer table:
    • HEALTH → STATE (it's systemd state, not a health check)
    • AGE → TIMESTAMP (absolute local time instead of relative strings)
    • Always displays the remote binary path under each app row
  • Fix: demo test_app (and any local-transport app with service: null) now correctly shows as deployed instead of running
  • Hero image in README re-cropped to keep the horizon sunrise in frame

v0.3.8 — dockerless demo polish + README hero

14 Apr 15:55

Choose a tag to compare

Polish release on top of v0.3.7. No API breaks, no config schema changes.

Changed

  • Demo remote path shortened from /opt/demo/bin/test_app to /bin/test_app. The demo's status/push output no longer nests four levels deep under target_dir. remote is still an absolute path (that's the mental model for real configs), just shorter. User-visible: after pipx install satdeploy && satdeploy demo start, satdeploy status will show the new path.

Docs

  • README hero: replaced the ASCII logo with a DISCO-2 sim render (1600×600 WebP, 122 KB) so the repo opens on the hardware satdeploy is being built for.
  • Demo gif: rewrote demo/demo.tape against the dockerless demo flow. Now 20 seconds, Tokyo Night theme with a custom ground-station palette, real test_app v1 → v2 → v1 flip so the deploy story is visible instead of implied.
  • Brand mark: satDeploy in prose and headings; CLI, package name, and config paths stay lowercase as before.
  • Static "Real output" code block dropped from the README — the gif covers it.
  • Flatsat pitch rewritten to invite other teams to share the bench, not to ask them to de-risk orbit.

Tests

  • 375 unit tests passing. (SSH/CSP integration tests gated on fixtures, not run for this release.)

v0.3.7 — QA sweep

14 Apr 11:34

Choose a tag to compare

Post-ship QA sweep on v0.3.6 caught 10 issues across the CLI, all fixed. Every bug has a regression test.

Fixes

  • LocalTransport `backup_dir` permission crash — hand-written `transport: local` configs without an explicit `backup_dir` now default to `{target_dir}/.satdeploy-backups` (writable) instead of `/opt/satdeploy/backups` (root-only).
  • `push --force` no-op rollback bug — forcing an identical binary used to create a redundant backup of the current file, which became the newest backup entry and made the next `rollback` a silent no-op. Now `--force` of an identical file skips the backup entirely, so the chain stays honest.
  • Ghost "deployed" status — `satdeploy status` showed "deployed" for apps that were configured but never pushed. Fixed: `LocalTransport.get_status` now reports only apps whose file is actually on the target.
  • Hash-skip was silent on csp/local push — re-pushing the same file said "Deployed" as if it worked. Now prints "already deployed, use --force".
  • `--require-clean` finally implemented — the flag was documented in README and CLAUDE.md but never existed. Now present: `satdeploy push --require-clean` refuses to deploy from a dirty git tree.
  • `satdeploy --version` flag — now exists. Reads from `importlib.metadata` so there's one source of truth in `pyproject.toml`.
  • `satdeploy config` now shows `target_dir` for the local transport (was silently omitted before).
  • `satdeploy logs` error message no longer says "is a library" for apps that just have `service: null` — now names the real cause and points at the fix.

Tests

  • +9 new regression tests in `tests/test_transport_local.py` covering the local transport interface, fresh deploy, hash-skip, force-identical-backup regression, status semantics, and rollback edge cases.
  • 368 passing, 0 failures.

Full QA report: `.gstack/qa-reports/qa-report-satdeploy-cli-2026-04-14.md` (not shipped to PyPI).

v0.3.6 — dockerless demo

14 Apr 10:57

Choose a tag to compare

Zero-prerequisite demo in 10 seconds. No Docker, no satellite, no hardware.

pipx install satdeploy
satdeploy demo

What changed

  • New LocalTransport — real product code (hash verification, versioned backups, rollback, history database, git provenance), just deploying to a local directory. The same transport interface as SSH and CSP, so the demo shows the actual workflow, not a stub.
  • Dockerless `satdeploy demo` — sets up a throwaway git repo with v1 and v2 commits, pre-installs v1 on a local target, and seeds history. The demo gif shows 4 commands (status → push → rollback → status) with real git provenance on every line.
  • Git provenance survives rollback — fixed a latent bug where `satdeploy status` would drop the git commit tag after a rollback. Status now uses `build_provenance_map` so the commit follows the file across push and rollback. This is the demo's money shot: after `rollback`, status shows both the original file hash and the original git commit.
  • README rewritten flatsat-first — leads with "Stop SCP-ing binaries onto your flatsat" and the dual-transport lifecycle (SSH on the bench → CSP in orbit). Example Session replaced with real dockerless output.
  • Docker removed entirely — Dockerfile.sim, docker-compose.yml, `.github/workflows/docker-publish.yml`, `demo shell` subcommand, `_check_docker` helpers, GHCR image, and the "Docker Desktop required" README prerequisite. All gone.
  • New tests — `tests/test_demo.py` rewritten to cover the dockerless flow (git repo setup, v1 pre-install, config, history seeding, stop/cleanup, CLI dispatch). 359 passing.

v0.3.5

13 Apr 17:39

Choose a tag to compare

Demo UX polish — the three-beat story (status → push → status) now reads the same across the CLI printouts, the README example, and the gif.

Fixes

  • Demo shell banner no longer tells users to "deploy from another terminal" — reframed for the current single-terminal flow.
  • Tutorial on `demo start` shrunk from 8 commands across 4 sections to the 3 the gif actually demonstrates.
  • Demo gif now runs `test_app` on the satellite instead of `cat`-ing its source, so viewers see deployed behavior change, not a one-character file diff.
  • v2 test binary output now reads `test_app v2.0.0 (demo) — telemetry enabled` so the upgrade delta is visually unambiguous.
  • Seeded v1 hash truncated to 8 chars — fixes a column-bleed bug in the first `status` call that broke table alignment.
  • README example session replaced with real output from `satdeploy demo` (CSP transport, single test_app) instead of fabricated SSH output — docs and reality now match.

v0.3.4

13 Apr 16:02

Choose a tag to compare

Fix misleading demo: seed history so satdeploy status shows test_app as deployed on demo start, making the subsequent push read as a v1 → v2 upgrade. Simplify demo.tape to drop tmux in favor of demo shell hops.