Schedule backups in local time instead of UTC (0.66.0)
CI / check (push) Successful in 13m5s
CI / build-and-push (push) Successful in 3m3s

Schedule times were UTC, so a nightly 03:00 backup had to be entered as
01:00 or 02:00 depending on the season, and moved by an hour twice a year.

Each schedule now has an IANA time zone, preset in the form to the
browser's (e.g. Europe/Berlin), and its hour/minute/weekday are wall-clock
time there. compute_next_run builds each candidate day from its date in
that zone rather than adding 24 hours, so the time stays put across
daylight saving changes; a time skipped by the spring change runs an hour
later that day. next_run is still stored as naive UTC.

- Existing schedules default to UTC and keep their run times until edited.
- The API validates the zone and hour/minute/weekday ranges (400) instead
  of silently wrapping them.
- tzdata is a dependency: the slim base image has no system tz database.

Tests cover Berlin winter and summer time, both 2026 change days, the
skipped hour, a weekly run across the UTC date line, hourly at a +5:30
offset, the UTC fallback and the API checks.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
menzeljandClaude Opus 5 committed 2026-09-18 12:50:46 +02:00
1 parent 8a0d673798
commit 9a357d2b92
10 files changed
+192 -27

No files matched your search

+5 -1
View File
@@ -644,8 +644,12 @@ it is what your saved destination credentials are encrypted with.
### Phase 7 — Scheduled backups
- **Recurring backups**: schedule stacks to back up to a destination **hourly,
daily, or weekly** (UTC) under **Settings → Scheduled backups**. A background
daily, or weekly** under **Settings → Scheduled backups**. A background
scheduler runs due jobs every minute and records last/next run + status.
- **Local time** (0.66.0): each schedule has a time zone, preset to the
browser's (e.g. `Europe/Berlin`), and its time is wall-clock time there — a
03:00 backup stays at 03:00 across daylight saving changes. Schedules made
before were in UTC and stay so until edited.
- **Several stacks per schedule** (0.65.0): tick any number of stacks, or
*All stacks* to include stacks added later without editing the schedule. They
are backed up one after another, each to its own file with its own retention