Changelog
This project keeps all changes in ## Unreleased until they are released.
On release, entries are moved into ## x.y.z sections that match the gem version.
Unreleased
0.5.0
- Adds top-level
serviceDSL entries for long-running systemd user services. activate,deactivate,reload, andstatusnow manage standalone services alongside timers.- Standalone services render as
Type=simpleunits with configurableRestart=,RestartSec=, and extra[Service]settings.
0.4.0
- Docs: adds a copy/paste "deploy a simple schedule" example and refines README status section.
- Refactor: extracts
UnitPathUtilsmodule for shared identifier/path utilities acrossUnitWriter,UnitDeleter,UnitLister, andRenderer. - Refactor: adds polymorphic
Trigger::Baseinterface with#systemd_timer_linesand#signaturemethods for all trigger types. - Refactor: splits
CronParserinto focusedFieldParserandDowParsersubmodules for maintainability. - Refactor: implements strategy pattern for
PeriodParserwith dedicated strategies for Duration, String, Symbol, and Array inputs. - Refactor: extracts
UnitContentBuilderfromRendererfor cleaner separation of unit content generation. - Refactor: adds
Validationmodule with composable validators (type,positive_integer,non_empty_string,non_empty_array,in_range).
0.3.0
- Schedule DSL:
commandaccepts argv arrays, adds ashellhelper for/bin/bash -lc, andwheneverd initincludes examples. - Adds
wheneverd status(showsystemctl --user list-timers+systemctl --user statusfor installed timers) andwheneverd diff(diff rendered units vs files on disk). - Adds
wheneverd validateto validate renderedOnCalendar=values viasystemd-analyze calendar(and with--verify, runssystemd-analyze --user verifyon temporary unit files).
0.2.1
- Removes an unused filtering metadata keyword argument from the schedule DSL.
0.2.0
- Adds
wheneverd linger enable|disable|statusfor managing systemd user lingering vialoginctl.
0.1.0
- Provides a Clamp-based
wheneverdCLI with--help,--version, and--verbose(usage errors inERROR: ...format). - Adds core domain objects and helpers for building schedules (interval parsing, durations, triggers, entries, jobs).
- Adds a Ruby DSL loader (
Wheneverd::DSL::Loader.load_file) supportingevery(...)blocks withcommand(...)jobs. - Schedule DSL:
everyaccepts multiple calendar period symbols in one block (e.g.every :tuesday, :wednesday). - Cron strings: supports standard 5-field crontab syntax (including month/day-of-week and steps); expressions that require
cron day-of-month vs day-of-week OR semantics may expand into multiple
OnCalendar=lines. - Adds systemd unit rendering (
Wheneverd::Systemd::Renderer.render) for interval and calendar triggers. - Systemd: unit basenames use a stable ID derived from the job’s trigger + command (reordering schedule blocks won’t rename units).
- Interval timers now include both
OnActiveSec=andOnUnitActiveSec=so newly enabled timers have a next run scheduled. - Adds helpers to write and delete generated unit files (
Wheneverd::Systemd::UnitWriter/UnitDeleter). - Adds CLI subcommands:
init,show,write,delete,activate,deactivate,reload, andcurrent. wheneverd initprints whether it wrote or overwrote the schedule template.- Schedule DSL supports
every :rebootas a boot trigger (rendered asOnBootSec=1). - Developer:
rake ciruns with Bundler setup (so it works withoutbundle execafterbundle install). - Developer: adds YARD tasks (
rake yard/rake doc) and inline API documentation. - CLI:
delete/currentonly operate on units matching the identifier and generated marker. - CLI:
write/reloadprune previously generated units for the identifier by default (use--no-pruneto disable pruning).