Repository navigation
Releases
Releases · ZeroOmar/v-shipper
0.12.1
Immutable
release. Only release title and notes can be modified.
0.12.1
Fixed
- Bulk delete container control — the "Stop container(s) before each operation" checkbox no longer appears when bulk-deleting backups, since backups are plain archive files with no containers to stop. It still shows when bulk-deleting volumes.
0.12.0
Immutable
release. Only release title and notes can be modified.
0.12.0
Changed
- Frontend redesigned around a HashiCorp-style design system — replaced the Material Design 3 stylesheet with a near-black canvas, charcoal surface-lift elevation, translucent hairline borders, eyebrow section labels, and a single type family with a tight-display / relaxed-body hierarchy. Dark is the canonical look; the theme toggle keeps a faithful light adaptation.
- Vagrant blue is the product accent — every primary CTA, active pool, selected state, progress bar, and accent chip is driven by a single accent token, so the whole UI reads as one product identity.
- Rename and Permissions buttons now match Migrate and Backup — the per-volume and bulk action buttons share the same accent styling instead of the previous muted "tonal" treatment (destructive Delete stays red).
Added
- Click anywhere on a volume or backup row to toggle bulk selection — no longer restricted to the small checkbox; action buttons and the container-usage badge still behave as before.
- Sticky bulk-action toolbar — the selection toolbar now stays pinned to the top of the list while scrolling a long set of volumes or backups, with an opaque background so list items no longer show through it.
0.11.0
Immutable
release. Only release title and notes can be modified.
0.11.0
Added
- Cancel running or pending tasks — a new Cancel button on the task detail view stops any operation in flight. A pending task is flagged and never starts; a running task's external process (rsync/tar) is stopped gracefully (SIGTERM, escalating to SIGKILL after a grace period). Cancelling a scheduled or bulk run stops the item currently in progress and prevents the remaining queued items from starting. Adds the endpoint
POST /api/task/{id}/canceland a new terminal task statuscancelled. - Automatic cleanup of partial artifacts on cancel — a cancelled migration removes the partially-migrated destination volume; a cancelled backup deletes the partial archive (local pool, staging, and best-effort from a remote pool); a cancelled restore clears the partial destination volume and temp extraction directory. Staging files and directories are always cleaned up. The cancellation, the signal sent, and the killed command's output/return code are recorded in the task log.
- Cancellable remote→remote migrations — when the destination v-helper is running the rsync pull, cancelling now stops the remote job too (requires v-helper ≥ 0.10.0), then removes the partial destination. Older v-helpers without the cancel endpoint are handled gracefully — the partial destination is still cleaned up locally.
0.10.0
Immutable
release. Only release title and notes can be modified.
0.10.0
Added
- Remote→remote migration — migrating a volume between two remote pools now works when the destination pool has a v-helper (
api_host/api_key). v-shipper instructs the destination v-helper to pull directly from the source's rsync module and streams the transfer's progress and log into the migration task. Previously this failed outright, because native rsync refuses daemon-to-daemon transfers ("source and destination cannot both be remote"). Without a v-helper on the destination — or with one too old to support it — the migration falls back to direct rsync and reports that same clear error. Requires v-helper 0.9.0+.
Changed
- Docker container view now logs its outcome — the
/api/containerspath and the v-helperdocker_usersclient previously swallowed every failure and returned an empty view with no trace, making a missing container view impossible to diagnose. Each step now emits a concise[DOCKER]log line —docker_socketdisabled, missing v-helper credentials, v-helper unreachable, or a success summary (N volumes, K with containers).
0.9.2
Immutable
release. Only release title and notes can be modified.
0.9.2
Fixed
- Backup schedules now run in the container's timezone — the scheduler was hardcoded to UTC, so a job entered as "midnight" fired at midnight UTC rather than local wall-clock time, and cron times appeared shifted in the UI. The timezone is now resolved from the container's
TZenv var (falling back to the host's local zone, then UTC) and applied to every trigger; the resolved zone is logged at startup. - Numeric cron weekdays now map to the correct days — APScheduler's
from_crontabinterprets numeric day-of-week as0=Monday, whereas standard crontab uses0/7=Sunday,1=Monday. As a result an expression like0 0 * * 1,3,5(intended Mon/Wed/Fri) actually fired Tue/Thu/Sat. Numeric weekdays are now translated correctly, preserving ranges (1-5) and steps (1-5/2); named forms (mon-fri) were already correct and are unchanged. Existing saved schedules pick up the fix automatically on restart.
Changed
- Cron validation and scheduling now share a single parser (
make_cron_triggerinvalidation.py), so any expression that passes validation can always be scheduled. As a side effect, standard crontab7for Sunday is now accepted where it was previously rejected.
0.9.1
Immutable
release. Only release title and notes can be modified.
0.9.1
Fixed
- Remote container stop now honours the configured grace period — for remote pools, the per-pool
container_stop_timeoutis now sent to v-helper and used as the actualdocker stopgrace period before SIGKILL. Previously the value only sized v-shipper's HTTP wait while the remote silently fell back to v-helper's ownCONTAINER_STOP_TIMEOUTdefault, so a configured timeout was ignored on remote pools and behaved differently from local pools. Requires v-helper 0.8.0+ to take effect; older v-helper continues to use its env default. - Release notes publish from the annotated tag — CI now reads the tag message rather than the commit title, so the GitHub Release body matches the curated notes.
Removed
- Retired CHANGELOG.md — release notes now live solely in annotated tags / GitHub Releases. Removed the one-time backfill tooling (
backfill_releasesscript and workflow) that seeded historical releases from the old changelog.
0.9.0
Immutable
release. Only release title and notes can be modified.
0.9.0
This release fixes bulk-action sub-task reporting and moves release notes onto the GitHub Releases page.
Fixed
- Bulk action sub-tasks stayed "pending" forever — when a bulk action (e.g. bulk delete) ran, each per-item sub-task was created but never marked running or completed, so it sat at "pending" in the task list even though the operation had already succeeded. The bulk runner now drives each sub-task's lifecycle (start → complete).
complete_taskwas also made idempotent (first finalize wins), so services that finalize their own task (backup/migrate/restore) keep their detailed status while delete/permissions sub-tasks — which only return a bool — are now finalized correctly.
Changed
- Release notes now live on the GitHub Releases page — each tag gets its own release whose body is the annotated tag's message, published automatically by a new
release.ymlworkflow on tag push. This replaces the single ever-growing CHANGELOG.md. Existing history is migrated into per-version releases by a one-timebackfill-releases.ymlworkflow, after which CHANGELOG.md is retired. The/releaseprocess and README were updated to author notes into the annotated tag.
0.8.0
Immutable
release. Only release title and notes can be modified.
v-shipper and v-helper now version independently — this release ends the shared version line used through 0.7.0.
Added
- Bulk actions — volume and backup lists now have a checkbox on every row. Selecting one or more reveals a toolbar (with "Select all" / "Clear") offering the same actions as the single-item views, minus rename: Backup, Migrate, Delete, and Permissions for volumes; Restore and Delete for backups. Each bulk dialog mirrors its single-item dialog, with the "Source Volume" / "Volume" / "Backup File" field shown as the list of selected items. New
/api/bulk/{backup,migrate,delete,permissions,restore}endpoints back the feature. A bulk action runs exactly like a scheduled backup: every item runs sequentially under one summary task, the per-item sub-tasks are grouped in the summary's detail view, and a single completion notification covers the whole batch. Bulk migrate/restore offer a "skip / overwrite / merge" choice for destinations that already exist; bulk restore derives each destination volume name from its archive filename.
Changed
- Version checks no longer compare v-shipper against v-helper — instead, the UI checks each component against its own latest GitHub release. v-shipper flags itself "out of date" when a newer v-shipper tag exists, and flags a connected v-helper when a newer v-helper tag exists, looking the two repositories' tags up independently. This replaces the old model where the two shared a version line and were compared against each other.
- Tasks now run strictly one at a time — the task queue gained a real single-worker FIFO. Previously every triggered operation spawned its own thread and ran immediately, so a task started while another was running could overlap it. Now a task triggered while another runs waits in the list as "pending" until its turn. Manual operations, scheduled backups, and bulk actions all flow through the same queue.
- Backup archives are written world-accessible (
0o777) on the backup pool, so a backup can be read or managed regardless of the user that owns the pool. For remote backup pools the mode is applied to the staging copy and carried to the remote byrsync -a.
Fixed
- Toasts appeared behind a dialog or the settings overlay — the toast container shared a
z-indexwith the settings overlay, so its blur painted over notifications. The toast container now sits above both modals and the settings overlay.
0.7.0
Immutable
release. Only release title and notes can be modified.
Coordinated release with v-helper 0.7.0 (shared version line). No functional change to v-helper this release; the bump keeps the two version lines aligned so connected helpers are not flagged "out of date".
Added
- Permissions notifications — permission/ownership changes (chmod/chown) now fire task-completion notifications like every other operation. A new "Permissions" topic is available in the notification settings, and the permissions task records the applied mode/owner so they appear in the notification's parameters block.
- Re-apply permissions even when unchanged — the Edit Permissions modal gained two checkboxes, "Apply chmod even if unchanged" and "Apply chown even if unchanged". By default only changed fields are sent; checking these forces a recursive
chmod -R/chown -Reven when the displayed top-level value already matches, which is the way to fix permissions/ownership that have drifted on nested files.
Fixed
- Edit Schedule checkboxes misaligned — the "Stop / Start container(s)" checkboxes in the schedule form inherited the form's column layout, stacking the box above its label and centering it. They now render inline, box-then-label, left-aligned.
0.6.0
Immutable
release. Only release title and notes can be modified.
Coordinated release with v-helper 0.6.0 (shared version line). Remote container control requires v-helper 0.6.0+.
Added
- Stop / start containers around volume operations — migrate, backup, and permission changes now offer optional "Stop container(s) before" and "Start container(s) after" checkboxes; rename and delete offer "Stop container(s) before". The checkboxes appear only when the volume is in use by a running container, and default to unchecked. Stopping lets an operation run against a quiesced volume (no torn reads / busy targets); the start step restarts only the containers that were actually stopped, and runs even if the operation fails so containers come back up. A failed stop aborts the operation rather than proceeding on a live volume. Works on both local pools (Docker socket) and remote pools (via the v-helper control API).
- Scheduled backups can stop / start containers — backup schedules gained
stop_containers_before/start_containers_afterflags, applied to every volume in the schedule on each run. container_stop_timeoutpool config option (default120) — the grace period, in seconds, given to a container to shut down cleanly before it is killed. Generous by default so slow-to-stop containers aren't killed mid-flush; the remote HTTP timeout is sized above it so a slow-but-successful stop isn't misread as a failure.
Changed
- Container-usage tooltip repositioned — the badge tooltip is now
position: fixedand placed by JS relative to the badge, so it escapes the volume row'soverflowand the scrollable volumes pane that previously clipped it. Toggled via ashow-tipclass instead of CSS:hover/.open.