Releases: MahmoodSeoud/satDeploy
v0.3.13
v0.3.12
Drop redundant target header line from satdeploy status output.
v0.3.11
Fix README hero image (correct DISCO-2 render, cropped from the bottom).
v0.3.10
Promote remote binary path to its own PATH column in satdeploy status so deploy targets are scannable at a glance.
v0.3.9
Changes
satdeploy statusnow 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 withservice: null) now correctly shows asdeployedinstead ofrunning - Hero image in README re-cropped to keep the horizon sunrise in frame
v0.3.8 — dockerless demo polish + README hero
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_appto/bin/test_app. The demo'sstatus/pushoutput no longer nests four levels deep undertarget_dir.remoteis still an absolute path (that's the mental model for real configs), just shorter. User-visible: afterpipx install satdeploy && satdeploy demo start,satdeploy statuswill 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
satdeployis being built for. - Demo gif: rewrote
demo/demo.tapeagainst the dockerless demo flow. Now 20 seconds, Tokyo Night theme with a custom ground-station palette, realtest_appv1 → v2 → v1 flip so the deploy story is visible instead of implied. - Brand mark:
satDeployin 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
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
Zero-prerequisite demo in 10 seconds. No Docker, no satellite, no hardware.
pipx install satdeploy
satdeploy demoWhat 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
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
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.