-
v0.9.2
StableAll checks were successfulCI / Build / Publish / Shellcheck (push) Successful in 2sCI / Build / Publish / Validate CHANGELOG structure (push) Successful in 2sCI / Build / Publish / PR build & smoke test (push) Has been skippedCI / Build / Publish / Bats unit tests (push) Successful in 6sCI / Build / Publish / Host-driven integration (entrypoint + storage sidecars) (push) Successful in 1m50sCI / Build / Publish / Round-trip + scheduler smoke (push) Successful in 3m15sCI / Build / Publish / Build multi-arch and push (push) Successful in 5m0sCI / Build / Publish / Reconcile releases across registries (push) Successful in 1m17sCI / Build / Publish / Workflow summary (push) Successful in 1sreleased this
2026-07-10 20:23:33 -07:00 | 17 commits to main since this releaseAdded
- Automatic recovery kit: with the
recovery_passwordsecret present (at/run/secrets/recovery_passwordor viaRECOVERY_PASSWORD_FILE), after each backup archiver assembles a kit holding the full effective configuration (every non-secret setting, every secret, and the keys — exactly whatarchiver migrateemits), generated recreation notes (RECREATE.txt: hostname, schedule, every container path that needs a mount, required capabilities), and the deployment manifests when mounted read-only at/opt/archiver/deployment(a compose bind, a Kubernetes ConfigMap — e.g. a kustomizeconfigMapGeneratorunder Flux/Argo — or a NixOS bind; captured verbatim), encrypts it to that password (AES-256, pbkdf2), and uploads it as a plain file beside the duplicacy data on every storage target (archiver-recovery-kit-<hostname>.tar.encplus a companion README with the decrypt command).archiver initnow generates the recovery password, includes it in the emitted materials, and displays it once for the user's password manager, and the shipped compose template mounts both the secret and its owncompose.yaml— so new deployments maintain a kit by default; existing deployments enable it withopenssl rand -base64 24 > secrets/recovery_passwordplus asecrets:entry (archiver migrateprints this hint when unconfigured). Disaster recovery needs only one reachable storage location — even just a provider web UI — plus the single recovery password:openssl enc -d -aes-256-cbc -pbkdf2 -in <file> | tar -xvf -on any machine yieldsarchiver.env+secrets/+RECREATE.txt(+deployment/), everything required to recreate the deployment (the recovery password itself is included, so the recreated deployment maintains its kit immediately). The kit is re-uploaded only when its content actually changes or a target is missing it; the fingerprint deliberately ignores runtime state (for example theprune|retainrotation override), so an unchanged config is a nightly no-op.archiver recovery-kitpushes on demand andarchiver recovery-kit forcere-pushes everywhere. Upload failures are logged and notified but never fail the backup, and failed targets are retried on the next run. The recovery password must be at least 8 characters and differ fromSTORAGE_PASSWORD(it is the only thing protecting the kit at rest, and the kit contains the storage password). Unlike the bundle, the kit is write-only: nothing at runtime ever reads it back, so it is never a boot dependency. - The shipped compose template now consumes the emitted
archiver.envdirectly viaenv_file:instead of inlining values — nothing to transcribe at setup or recovery, and the file holds no secrets so it can be committed to git alongside the compose file (inlining underenvironment:remains equivalent).
Fixed
- Removed the
/opt/archiver/bundleentry from the image'sVOLUMEdeclaration. Docker Compose carries the previous container's mount over for image-declared volume paths when recreating, so converting a bundle-mode deployment to env-native withup --force-recreateinherited the old bundle mount and crash-looped on the bundle-without-password fail-fast. Until you run an image with this fix, convert withdocker compose down && docker compose up -dinstead. Env-native containers also no longer accumulate a useless anonymous volume at that path.
Dependencies
- chore(deps): update actions/checkout action to v7
- chore(deps): update docker/setup-qemu-action action to v4.2.0
- chore(deps): update bats/bats docker tag to v1.13.0
- chore(deps): update dependency moby/moby to v29.6.1
- chore(deps): update docker/setup-buildx-action action to v4.2.0
- chore(deps): update docker/metadata-action action to v6.2.0
- chore(deps): update docker/build-push-action action to v7.3.0
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Automatic recovery kit: with the