wheneverd 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 48c6bdb7f18c775a63b874f0509d276f9f5a9b585193aa9f3b1795f3374f26c8
4
- data.tar.gz: ef19f548714b7c70998e7e53ee560876742108199f8418e342a7c2f7117fe796
3
+ metadata.gz: 7ef1858fab03a38b36da00bf0093d4025762263ca868d05a78c1876d8aeb6441
4
+ data.tar.gz: 539fbeec1db7023059767501172d7337da50a966e0727c29879f88cd81770303
5
5
  SHA512:
6
- metadata.gz: 5e19a91cc2c5ad5ecd4d040cdc450de1153a8f685ef1c8be7db022d6f4189f628d8c9effe52d2a3428734a4de088e5eb1b4fba5d7d1a655fb9e38b6110794d60
7
- data.tar.gz: 027fabc2a861d96f3f79afe6930d18758aaeaec2e39490ab93a8b7b0939a5ff543de0f6ac06438ce6ac100b68a4dd8375d0dcedf104d82f90618368bd82c7621
6
+ metadata.gz: 2656962166f254b2d48f94d23329db78a16964eda9c164457c5586b4dabfa095077b75372b94da9f9cad38862d5548be15ba7b2567cef5d2fb2cdc3cb94d4984
7
+ data.tar.gz: a06b649a079b18fd3f321bc818e322d3284c98d96bfbabaf43244b4d604193b395186d31548efdf2296fe12509f47e665f1cdf96f47e2af25512b3eae53ba20d
data/CHANGELOG.md CHANGED
@@ -5,10 +5,16 @@ On release, entries are moved into `## x.y.z` sections that match the gem versio
5
5
 
6
6
  ## Unreleased
7
7
 
8
- - Adds `wheneverd linger enable|disable|status` for managing systemd user lingering via `loginctl`.
8
+ ## 0.2.1
9
+
10
+ - Removes an unused filtering metadata keyword argument from the schedule DSL.
9
11
 
10
12
  ## 0.2.0
11
13
 
14
+ - Adds `wheneverd linger enable|disable|status` for managing systemd user lingering via `loginctl`.
15
+
16
+ ## 0.1.0
17
+
12
18
  - Provides a Clamp-based `wheneverd` CLI with `--help`, `--version`, and `--verbose` (usage errors in `ERROR: ...` format).
13
19
  - Adds core domain objects and helpers for building schedules (interval parsing, durations, triggers, entries, jobs).
14
20
  - Adds a Ruby DSL loader (`Wheneverd::DSL::Loader.load_file`) supporting `every(...)` blocks with `command(...)` jobs.
data/FEATURE_SUMMARY.md CHANGED
@@ -12,19 +12,21 @@ It complements [`CHANGELOG.md`](CHANGELOG.md) by staying high-level and focusing
12
12
 
13
13
  ## Unreleased
14
14
 
15
+ ## 0.2.1
16
+
15
17
  - Adds `wheneverd linger enable|disable|status` for managing systemd user lingering via `loginctl`.
18
+ - Removes an unused filtering metadata keyword argument from the schedule DSL.
16
19
 
17
20
  ## 0.2.0
18
21
 
19
22
  - The `wheneverd` CLI is implemented using Clamp (`--help`, usage errors in `ERROR: ...` format, `--verbose` for details).
20
23
  - The gem includes a small “whenever-like” domain model (interval parsing, durations, triggers, schedules).
21
24
  - The gem can load a Ruby schedule DSL file via `Wheneverd::DSL::Loader.load_file`.
22
- - Schedule DSL supports `every(period, at: ..., roles: ...) { command("...") }` entries (multiple `command` calls per entry).
25
+ - Schedule DSL supports `every(period, at: ...) { command("...") }` entries (multiple `command` calls per entry).
23
26
  - Schedule DSL supports multiple calendar period symbols per `every` block (e.g. `every :tuesday, :wednesday`).
24
27
  - Supported `every` periods include interval strings/durations, calendar shortcuts (`:hour`, `:day`, `:month`, `:year`),
25
28
  day selectors (`:monday..:sunday`, `:weekday`, `:weekend`), and standard 5-field cron strings.
26
29
  - `at:` supports a string or an array of strings (for calendar schedules), like `"4:30 am"` or `"00:15"`.
27
- - `roles:` is accepted and stored on entries, but is not used for filtering yet.
28
30
  - The gem can render systemd `.service` and `.timer` units via `Wheneverd::Systemd::Renderer.render`.
29
31
  - Generated unit basenames include a stable ID derived from the job’s trigger + command (reordering schedule blocks won’t rename units).
30
32
  - Interval timers include both `OnActiveSec=` and `OnUnitActiveSec=` to ensure a newly started timer has a next run scheduled.
data/README.md CHANGED
@@ -2,15 +2,17 @@
2
2
 
3
3
  Wheneverd is to systemd timers what the [`whenever` gem](https://github.com/javan/whenever) is to cron.
4
4
 
5
- Tagline / repo: `git@github.com:bigcurl/wheneverd.git`
6
-
7
5
  ## Status
8
6
 
9
- Working end-to-end: schedule DSL loading, systemd unit rendering, and safe unit write/list/delete are implemented, along with a CLI for `init`, `show`, `write`, `delete`, `activate`, `deactivate`, `reload`, and `current`.
7
+ Pre-1.0, but working end-to-end for user systemd timers:
10
8
 
11
- Known limitations: `roles:` is accepted but not used for filtering yet.
9
+ - Loads a Ruby schedule DSL file (default: `config/schedule.rb`).
10
+ - Renders systemd `.service`/`.timer` units (interval, calendar, and 5-field cron schedules).
11
+ - Writes, lists, and deletes generated unit files (default: `~/.config/systemd/user`).
12
+ - Enables/starts/stops/disables/restarts timers via `systemctl --user`.
13
+ - Manages lingering via `loginctl` (so timers can run while logged out).
12
14
 
13
- See `FEATURE_SUMMARY.md` for high-level user-visible behavior, and `CHANGELOG.md` for release notes.
15
+ See `FEATURE_SUMMARY.md` for user-visible behavior, and `CHANGELOG.md` for release notes.
14
16
 
15
17
  ## Installation
16
18
 
@@ -38,7 +40,7 @@ wheneverd activate
38
40
  wheneverd deactivate
39
41
  wheneverd reload
40
42
  wheneverd current
41
- wheneverd linger status
43
+ wheneverd linger
42
44
  ```
43
45
 
44
46
  ### Minimal `config/schedule.rb` example
@@ -120,7 +122,7 @@ Note: schedule files are executed as Ruby. Do not run untrusted schedule code.
120
122
  The core shape is:
121
123
 
122
124
  ```ruby
123
- every(period, at: nil, roles: nil) do
125
+ every(period, at: nil) do
124
126
  command "echo hello"
125
127
  end
126
128
  ```
@@ -185,10 +187,6 @@ Cron translation supports standard 5-field crontab strings (`minute hour day-of-
185
187
 
186
188
  Unsupported cron patterns raise an error at render time (e.g. non-5-field strings, `@daily`, `L`, `W`, `#`, `?`).
187
189
 
188
- ### `roles:`
189
-
190
- `roles:` is accepted and stored on entries, but is ignored in v1 (no role-based filtering yet).
191
-
192
190
  ## CLI
193
191
 
194
192
  Defaults:
@@ -204,17 +202,19 @@ Notes:
204
202
  - Identifiers are sanitized for use in unit file names (non-alphanumeric characters become `-`).
205
203
  - Unit basenames include a stable ID derived from the job’s trigger + command (reordering schedule blocks won’t rename units).
206
204
  - `wheneverd write` / `wheneverd reload` prune previously generated units for the identifier by default (use `--no-prune` to keep old units around).
205
+ - `--unit-dir` controls where unit files are written/read/deleted; `activate`/`deactivate` use systemd’s unit search path.
207
206
 
208
207
  Commands:
209
208
 
210
209
  - `wheneverd init [--schedule PATH] [--force]` writes a template schedule file.
211
210
  - `wheneverd show [--schedule PATH] [--identifier NAME]` prints rendered units to stdout.
212
- - `wheneverd write [--dry-run] [--unit-dir PATH] [--[no-]prune]` writes units to disk (or prints paths in `--dry-run` mode).
213
- - `wheneverd delete [--dry-run] [--unit-dir PATH]` deletes previously generated units for the identifier.
211
+ - `wheneverd write [--schedule PATH] [--identifier NAME] [--unit-dir PATH] [--dry-run] [--[no-]prune]` writes units to disk (or prints paths in `--dry-run` mode).
212
+ - `wheneverd delete [--identifier NAME] [--unit-dir PATH] [--dry-run]` deletes previously generated units for the identifier.
214
213
  - `wheneverd activate [--schedule PATH] [--identifier NAME]` runs `systemctl --user daemon-reload` and enables/starts the timers.
215
214
  - `wheneverd deactivate [--schedule PATH] [--identifier NAME]` stops and disables the timers.
216
215
  - `wheneverd reload [--schedule PATH] [--identifier NAME] [--unit-dir PATH] [--[no-]prune]` writes units, reloads systemd, and restarts timers.
217
216
  - `wheneverd current [--identifier NAME] [--unit-dir PATH]` prints the currently installed unit file contents from disk.
217
+ - `wheneverd linger [--user NAME] [enable|disable|status]` manages lingering via `loginctl` (`status` is the default).
218
218
 
219
219
  ## Development
220
220
 
@@ -25,16 +25,15 @@ module Wheneverd
25
25
  #
26
26
  # @param periods [Array<String, Symbol, Wheneverd::Duration, Array<Symbol>>]
27
27
  # @param at [String, Array<String>, nil]
28
- # @param roles [Object] stored but currently not used for filtering
29
28
  # @return [Wheneverd::Entry]
30
- def every(*periods, at: nil, roles: nil, &block)
29
+ def every(*periods, at: nil, &block)
31
30
  raise InvalidPeriodError.new("every() requires a block", path: path) unless block
32
31
 
33
32
  raise InvalidPeriodError.new("every() requires a period", path: path) if periods.empty?
34
33
 
35
34
  period = periods.length == 1 ? periods.first : periods
36
35
  trigger = @period_parser.trigger_for(period, at: at)
37
- entry = Wheneverd::Entry.new(trigger: trigger, roles: roles)
36
+ entry = Wheneverd::Entry.new(trigger: trigger)
38
37
 
39
38
  schedule.add_entry(entry)
40
39
 
@@ -6,17 +6,15 @@ module Wheneverd
6
6
  # An entry ties together a trigger (when to run) and one or more jobs (what to run).
7
7
  class Entry
8
8
  # @return [Wheneverd::Trigger::Interval, Wheneverd::Trigger::Calendar, Wheneverd::Trigger::Boot]
9
- attr_reader :trigger, :jobs, :roles
9
+ attr_reader :trigger, :jobs
10
10
 
11
11
  # @param trigger [Object] a trigger object describing when to run
12
12
  # @param jobs [Array<Object>] job objects (usually {Wheneverd::Job::Command})
13
- # @param roles [Object] stored but currently not used for filtering
14
- def initialize(trigger:, jobs: [], roles: nil)
13
+ def initialize(trigger:, jobs: [])
15
14
  raise ArgumentError, "trigger is required" if trigger.nil?
16
15
 
17
16
  @trigger = trigger
18
17
  @jobs = jobs.dup
19
- @roles = roles
20
18
  end
21
19
 
22
20
  # Append a job to the entry.
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Wheneverd
4
4
  # Gem version.
5
- VERSION = "0.2.0"
5
+ VERSION = "0.2.1"
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wheneverd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - bigcurl