Releases: amayer1983/docksentry
Releases · amayer1983/docksentry
Release list
v1.41.0 — Self-update failure diagnostics
Added
- Self-update failure diagnostics (#43, @LeeNX). When a self-update recreate fails (seen repeatedly on rootless Podman) the reason used to vanish — the helper container runs
--rm, so its stderr was gone before anyone could read it. The helper now also mounts Docksentry's/datahost directory (resolved from our own inspect Mounts) and redirects its whole swap-script output there. On the next boot, if the recreate rolled back, Docksentry reports the captured helper output — so the actualdocker runrejection is finally visible instead of a silent brick. On success the log is consumed silently. (This is the diagnostic that should finally reveal why the Podman recreate fails; the v1.38.2 recovery-net already made it survivable.)
Full 25-script regression sweep green.
v1.40.1 — Compose project-directory fix + contract linter
Fixed
- Compose recreates now pass
--project-directorywhen the stack was originally started from a different directory than the compose file's location. Found via a static-analysis audit: the update path accepted thecom.docker.compose.project.working_dirlabel but never used it — so a recreate could resolve.envinterpolation /env_file:paths differently than the originalupdid. Same recreate-fidelity class as #27/#29.
Changed
- Permanent contract linter (
scripts/lint_contracts.py, wired into the pre-commit check): flags functions mixing literal return shapes and same-named methods across classes with conflicting return contracts — the exact class of the v1.37.1_wait_healthycascade crash. Verified against a synthetic reproduction of that historical bug. Plus lint cleanup (unused imports/vars, onezip(strict=True)).
Full 24-script regression sweep green.
v1.40.0 — /checkimages + revived selfupdate hint
Added
/checkimages(#2, @famewolf) — dry-run counterpart to/cleanup. Reports how much disk space/cleanupwould reclaim right now (unused images + build cache, fromdocker system df) and calls out the AUTO_CLEANUP status. Useful when you're not on auto-cleanup and want to check on demand instead of waiting for the disk warning to fire.
Fixed
/checkdidn't surface the Docksentry-update hint anymore (#2, @famewolf). Since v1.17.4 the hint was gated on Docksentry appearing in the results — butget_running_containersexplicitly filters ourselves out ("Skipped (self)"; a normal-flow update on ourselves can't work — PID 1 can't replace its own container). So the hint has been silently dead since the self-filter existed./checknow asks the checker directly (has_selfupdate_available()— digest-only registry compare, no pull), so a newer Docksentry image on the registry surfaces the "run /selfupdate" hint again.
Full 24-script regression sweep green.
v1.39.1 — Retry symmetry: Discord + Webhook (audit)
Fixed
- Discord and generic webhook notifications could silently drop on a transient network blip — proactive audit follow-up to v1.38.1.
_discord_postand_webhook_senddid a singleurlopenin atry/except, the same structural gap that ate NotRetarded's Telegram notification right after a self-update restart. Zero reports of Discord/webhook loss so far, but the code was one bad blip away from the same symptom on either channel. A shared_post_json_with_retrynow covers all three channels: 3 attempts with 2s/4s backoff on transient network failures, no retry on HTTP status codes (server rejection ≠ transient blip).
Note: for a generic webhook pointing at an automation (Home Assistant, ntfy, custom script), the tiny edge case where a delivered send timed out on read can yield a duplicate delivery — prefer idempotent handlers.
Full 23-script regression sweep green.
v1.39.0 — Actionable disk warning
Changed
- Disk-space warning is now actionable (#2, @famewolf). A bare
⚠️ Disk usage at 88% — 5.3 GB free.used to get lost in the noise (famewolf's 215 GB-of-orphaned-images lesson: the warning did fire, he just glossed over it while wrestling with LLM disk pressure). The warning now tells you how much space/cleanupcould reclaim (fromdocker system df— unused images / build cache) and, ifDISK_WARN_AUTO_CLEANUPis OFF, a one-line nudge to turn it on. So the message becomes "🧹 21.3 GB reclaimable via/cleanup— auto-cleanup is OFF, setDISK_WARN_AUTO_CLEANUP=trueto reclaim automatically next time." Hard to ignore.
Full 22-script regression sweep green.
v1.38.2 — Self-update recovery net
Fixed
- A failed self-update recreate could leave Docksentry dead (#43, @LeeNX). The helper ran
stop && rename→_old && run && rm _old; if thedocker runrecreate failed (a flag the runtime rejects — seen on rootless Podman), the chain stopped with the container renamed to_oldand stopped, and no new container — Docksentry was down with no recovery. The recreate is now guarded: on failure it removes any partial new container, renames_oldback and starts it, so the bot survives on the previous version.rm _oldruns only after a successful run. (Why the Podman recreate fails is still being gathered — the recovery net makes it non-fatal either way.)
Full 21-script regression sweep green.
v1.38.1 — Retry transient Telegram API timeouts
Fixed
- Transient Telegram API timeouts silently dropped notifications (#2, @NotRetarded). Right after a self-update restart the network can still be settling; a single
urlopen timed outon the Telegram API meant the notification was lost (while Discord/webhook, a moment later, got through).api_callnow retries transient network failures up to 3× with short backoff (2s, 4s). The long-poll (getUpdates) is exempt, and HTTP 4xx bodies are still returned unretried. Trade-off: a read-timeout after Telegram already accepted a send could produce a duplicate — preferable to a dropped notification.
Full 20-script regression sweep green.
v1.38.0 — Installable Web UI (PWA) + cross-channel version badge
Added
- Installable Web UI (PWA) — a web app manifest + icon so Docksentry can be added to a phone's home screen and run standalone, complementing the touch polish in v1.37.0 (#2). Served via the existing
/staticroute;theme-color+ apple-touch meta included. No new dependencies. - Version badge on Discord / webhook / e-mail (#44, @LeeNX) — the
🔖 v_old → v_newinfo added to the Telegram "updates available" notification in v1.36.0 now also appears on the other channels: Discord embeds (per container), the generic webhook payload (old_version/new_versionfields), and the e-mail summary. Empty when the image has noorg.opencontainers.image.versionlabel.
Full 19-script regression sweep green.
v1.37.1 — Fix dependents-cascade crash
Fixed
- Restart-dependents cascade crashed with
cannot unpack non-iterable bool object(#2, @famewolf). A group head (e.g. gluetun) updated fine, then kicking its dependents threw — the head showed a second, bogus ❌ line. A stray bot-local_wait_healthyreturning a bool shadowed the checker's canonical 3-tuple(outcome, state, health), sooutcome, _, _ = self._wait_healthy(...)tried to unpack a bool. The cascade now uses the checker's 3-tuple_wait_healthy; the duplicate bool method is removed. The regression test was masking it (it stubbed a 3-tuple onto the bot) and now stubs the checker, exercising the real path.
Full 19-script regression sweep green.
v1.37.0 — Web UI: Auto column + icon legend + static asset extraction
Added
- Dedicated "Auto" column in the container table (#2, @NotRetarded). The auto-update flag was a name-cell badge that wrapped under long container names; it now has its own column.
- Touch-friendly icon legend under the table (#2). The action buttons have hover tooltips, but those don't work on touch devices — a small legend now spells out each icon (update / pin / auto / major-confirm / stop).
Changed
- Web UI CSS/JS moved out of Python string literals into real static files (
app/static/app.css,app/static/app.js), served via a/staticroute with?v=VERSIONcache-busting. Still zero external dependencies (pure stdlib). This kills the class of bug where a stray character in the embedded_BASE_JSstring broke the whole UI (#40) and makes the front-end lintable. Purely internal — no behaviour change.
Verified live (page + assets 200 with correct content-types, path-traversal 404); full 19-script regression sweep green.