v0.16.0
Release 7 bundles three disaster-recovery improvements.
Highlights
Rollback-referenced images protected from docker prune (#40)
docker_prune --all previously deleted every image not in use by a running container — including the tags recent rollback snapshots depend on. Now docker_prune --stack <name> (automatic when called via cmd_prune) computes the protected image set from snapshots within ROLLBACK_RETENTION_DAYS (default 30) and skips them. Opt out with --no-protect or PRUNE_PROTECT_ROLLBACK_IMAGES=false.
rollback diff for snapshot-to-snapshot forensics (#42)
strut my-stack rollback diff HEAD~1 HEAD
strut my-stack rollback diff 20260420-091500 HEAD --json
Compares two rollback snapshots, rendering ADD/REMOVE/CHANGE ops for image tags. Refs accept snapshot basenames, HEAD (latest), or HEAD~N (Nth older). Shares the engine in lib/diff.sh with strut diff.
Offsite backup sync for S3/R2/B2 (#21)
# backup.conf
BACKUP_OFFSITE=s3
BACKUP_OFFSITE_BUCKET=my-bkps
BACKUP_OFFSITE_PREFIX=my-stack
BACKUP_OFFSITE_RETENTION_DAYS=90Opt-in automatic sync after every local backup. Supports S3 via aws s3, R2 via aws s3 --endpoint-url=..., and B2 via the b2 CLI. Sync failures warn but never abort the local backup. Manual controls:
strut <stack> backup offsite status
strut <stack> backup offsite sync # bulk sync all local backups
strut <stack> backup offsite list
strut <stack> backup offsite restore <filename>
PRs
- #73 feat: protect rollback-referenced images from docker prune
- #74 feat: add rollback diff for snapshot-to-snapshot forensics
- #75 feat: add offsite backup sync for S3/R2/B2
- #76 chore: bump version to 0.16.0
Test coverage
924/924 BATS tests green — 59 new cases across the three features.