From 99f0d0a0d341354c3a7ff4aa251a1d03d7161848 Mon Sep 17 00:00:00 2001 From: J-Verz <71394762+J-Verz@users.noreply.github.com> Date: Fri, 13 Feb 2026 22:22:25 +0100 Subject: [PATCH 1/4] Add task to validate recurring task schedules --- lib/solid_queue/configuration.rb | 15 +++++++++++++++ lib/solid_queue/tasks.rb | 5 +++++ 2 files changed, 20 insertions(+) diff --git a/lib/solid_queue/configuration.rb b/lib/solid_queue/configuration.rb index e63a000ca..b918fe8c8 100644 --- a/lib/solid_queue/configuration.rb +++ b/lib/solid_queue/configuration.rb @@ -69,6 +69,21 @@ def standalone? mode.fork? || @options[:standalone] end + def validate_recurring_config + valid = true + load_config_from(options[:recurring_schedule_file]).each do |env, tasks| + tasks.each do |id, options| + if options&.has_key?(:schedule) && RecurringTask.from_configuration(id, **options).invalid? + STDERR.puts "Invalid recurring task #{id} in #{env}: #{options[:schedule]}" + valid = false + end + end + end + + puts "All recurring tasks are valid" if valid + valid + end + private attr_reader :options diff --git a/lib/solid_queue/tasks.rb b/lib/solid_queue/tasks.rb index 91cd778bf..3b34923db 100644 --- a/lib/solid_queue/tasks.rb +++ b/lib/solid_queue/tasks.rb @@ -8,4 +8,9 @@ task start: :environment do SolidQueue::Supervisor.start end + + desc "Validates the recurring jobs config" + task validate_recurring_config: :environment do + SolidQueue::Configuration.new.validate_recurring_config + end end From 46f109b4a384417a3c91f24451a707e8659ac784 Mon Sep 17 00:00:00 2001 From: J-Verz <71394762+J-Verz@users.noreply.github.com> Date: Sat, 14 Feb 2026 17:18:38 +0100 Subject: [PATCH 2/4] Improve output formatting --- lib/solid_queue/configuration.rb | 30 +++++++++++++++++++++++------- lib/solid_queue/tasks.rb | 2 +- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/lib/solid_queue/configuration.rb b/lib/solid_queue/configuration.rb index b918fe8c8..991572f44 100644 --- a/lib/solid_queue/configuration.rb +++ b/lib/solid_queue/configuration.rb @@ -69,19 +69,35 @@ def standalone? mode.fork? || @options[:standalone] end - def validate_recurring_config - valid = true + def valid_recurring_config? + invalid = false + invalid_tasks = Hash.new {|hash, key| hash[key] = [] } load_config_from(options[:recurring_schedule_file]).each do |env, tasks| tasks.each do |id, options| - if options&.has_key?(:schedule) && RecurringTask.from_configuration(id, **options).invalid? - STDERR.puts "Invalid recurring task #{id} in #{env}: #{options[:schedule]}" - valid = false + task = RecurringTask.from_configuration(id, **options) + if task.invalid? + invalid_tasks[env] << task + invalid = true end end end - puts "All recurring tasks are valid" if valid - valid + if invalid + puts "Invalid recurring tasks:" + invalid_tasks.each do |env, tasks| + puts "- #{env}" + tasks.each do |task| + puts " - #{task.key}" + task.errors.full_messages.each do |message| + puts " - #{message}" + end + end + end + false + else + puts "All recurring tasks are valid" + true + end end private diff --git a/lib/solid_queue/tasks.rb b/lib/solid_queue/tasks.rb index 3b34923db..6f2cacb6a 100644 --- a/lib/solid_queue/tasks.rb +++ b/lib/solid_queue/tasks.rb @@ -11,6 +11,6 @@ desc "Validates the recurring jobs config" task validate_recurring_config: :environment do - SolidQueue::Configuration.new.validate_recurring_config + abort unless SolidQueue::Configuration.new.valid_recurring_config? end end From ed14d39b24b08106a9a77b81eb6cc1e301c188f9 Mon Sep 17 00:00:00 2001 From: J-Verz <71394762+J-Verz@users.noreply.github.com> Date: Mon, 20 Apr 2026 20:32:18 +0200 Subject: [PATCH 3/4] Simplify `valid_recurring_config?` --- lib/solid_queue/configuration.rb | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/lib/solid_queue/configuration.rb b/lib/solid_queue/configuration.rb index 991572f44..2fc53c62a 100644 --- a/lib/solid_queue/configuration.rb +++ b/lib/solid_queue/configuration.rb @@ -70,34 +70,30 @@ def standalone? end def valid_recurring_config? - invalid = false invalid_tasks = Hash.new {|hash, key| hash[key] = [] } load_config_from(options[:recurring_schedule_file]).each do |env, tasks| tasks.each do |id, options| task = RecurringTask.from_configuration(id, **options) - if task.invalid? - invalid_tasks[env] << task - invalid = true - end + invalid_tasks[env] << task if task.invalid? end end - if invalid - puts "Invalid recurring tasks:" - invalid_tasks.each do |env, tasks| - puts "- #{env}" - tasks.each do |task| - puts " - #{task.key}" - task.errors.full_messages.each do |message| - puts " - #{message}" - end + if invalid_tasks.empty? + puts "All recurring tasks are valid" + return true + end + + puts "Invalid recurring tasks:" + invalid_tasks.each do |env, tasks| + puts "- #{env}" + tasks.each do |task| + puts " - #{task.key}" + task.errors.full_messages.each do |message| + puts " - #{message}" end end - false - else - puts "All recurring tasks are valid" - true end + false end private From d33d7f2ae1908838be1d5dea805130a81c6b0c1f Mon Sep 17 00:00:00 2001 From: J-Verz <71394762+J-Verz@users.noreply.github.com> Date: Mon, 20 Apr 2026 20:56:18 +0200 Subject: [PATCH 4/4] Apply linter suggestion --- lib/solid_queue/configuration.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/solid_queue/configuration.rb b/lib/solid_queue/configuration.rb index 2fc53c62a..b5face3df 100644 --- a/lib/solid_queue/configuration.rb +++ b/lib/solid_queue/configuration.rb @@ -70,7 +70,7 @@ def standalone? end def valid_recurring_config? - invalid_tasks = Hash.new {|hash, key| hash[key] = [] } + invalid_tasks = Hash.new { |hash, key| hash[key] = [] } load_config_from(options[:recurring_schedule_file]).each do |env, tasks| tasks.each do |id, options| task = RecurringTask.from_configuration(id, **options)