github netresearch/ofelia v0.26.0

latest releases: v1.1.0, v1.0.2, v1.0.1...
4 months ago

Ofelia v0.26.0 — the first release since v0.25.1 (2026-05-16). Net-new, backwards-compatible features plus two intentional breaking changes (one API behavior, one source-only). See the full changelog for the complete, detailed entries.

✨ Added

  • Configurable save permissions — new octal keys save-mode (log/JSON files, default 0600) and save-folder-mode (save folder, default 0750). Widen them (e.g. save-mode = 0644) so a non-root operator or shared group can read captured logs; hardened defaults unchanged, and neither key is settable via global Docker labels. (#729)
  • Pushover device targeting — the bundled pushover preset gains an optional device field to target specific named devices. (#715)
  • Durable API state — --state-file / OFELIA_STATE_FILE persists API-created/updated jobs and disable flags across daemon restarts (atomic writes, 0600, versioned schema, fail-closed loading). (#593)
  • TTY console sizing — job-exec jobs accept console-height / console-width for apps that expect a fixed terminal geometry. (#235)
  • Graceful container stop — job-run jobs accept stop-signal and stop-timeout. (#234)
  • Docker startup resilience — [docker] startup-retry-count / startup-retry-interval retry the initial Docker connection with exponential backoff before exit. (#523)
  • Healthchecks.io presets — bundled healthchecks and healthchecks-selfhosted webhook presets. (#692)

🔄 Changed

  • BREAKING (API behavior): POST /api/jobs/delete now returns 403 Forbidden for jobs sourced from INI/Docker labels (use /api/jobs/disable or edit the source). UI/API-created jobs remain deletable. (#593)
  • WebhookManager caches *http.Client per Timeout, preserving keep-alive pools across config reconciles. (#674)

🛡️ Security

  • Extended allow-host-jobs-from-labels=false to filter host-path mounts (volume=/volumes-from=) on job-run and job-service-run, closing a container-to-host privilege-escalation vector. (#462)

🐛 Fixed

  • Warn when a local preset file shadows a bundled preset name. (#679)
  • Per-instance middleware dedup via an optional Key() interface (multiple webhooks on one job no longer collapse). (#672)
  • [global] default-user = default now resolves to the container's default user instead of failing docker exec --user default. (#716)
  • [global]/[docker] unknown-key warnings now suggest the nearest valid key. (#678)
  • RetryExecutor backoff honors context cancellation, so SIGTERM mid-retry drains promptly. (#687)

🗑️ Removed

  • BREAKING (source-only, pre-1.0): removed the unused core/adapters/docker.ClientConfig.HTTPClient field. (#684)

📦 Dependencies

  • Go toolchain 1.26.3 → 1.26.4; docker/cli, go-playground/validator, netresearch/go-cron, and the OpenTelemetry stack refreshed. (#720)

👥 Contributors

Thanks to everyone who made this release — code and reports alike:


All binaries are published with Sigstore signatures and SPDX SBOMs; verify against checksums.txt.

Don't miss a new ofelia release

NewReleases is sending notifications on new releases.