mini_scheduler 0.18.0 → 0.20.0

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: 3b5d08632e54389302df347b8c5c938b7d3693d63c126009b537a0a26532c239
4
- data.tar.gz: 5db6eea6cae5c21efec10310b87e0ab4d8f7211512467547cae56e6888cbcf55
3
+ metadata.gz: a5a55f29798c78302b8e9ad6279f200bff9842980cb2591d932841c613eeb260
4
+ data.tar.gz: 8a2a7d79a5a0997c54b7dc1f6bf55f316963cd10102f542e4d358c3cadb98bbc
5
5
  SHA512:
6
- metadata.gz: 2e3d947fa7227bc58774576778f5e42989bb1adcc5e28fc891a5faef504ac30e49a455216fdecbb5d7861fe21574e3db7ec4adb6a9e12ac006916374f9f4cc53
7
- data.tar.gz: e3c519534c28c36f5067c02eb12953d64e7a41e96b45fb8da7d7aee05cbfc83906139be971a5681468f3bbbbab8b04cf5424997f2f829ad217a3f9a7150f452a
6
+ metadata.gz: 2dd40dbf5325b0b881d2b4c49ecb147d39cd433372700410aef26ad70091a094563520dc9cc5b5ed15642f3ff68a77982d53ba5d28b30dd18ea948755e24e230
7
+ data.tar.gz: 9cbea4b51e7b97e02d86d5473ab48596945484aff05b47d3a3313764d70d79bdc4f75e9cd6b88ff9c79b2b62aa85f308d66b626755e11263b546bc1a6160e055
data/CHANGELOG.md CHANGED
@@ -1,3 +1,18 @@
1
+ # 0.20.0 - 2026-05-13
2
+
3
+ - Fix `MiniScheduler::Web` integration in Sidekiq 8+
4
+ - Move `redis` import to specs, host application won't need to explicitly
5
+ declare an otherwise unnecessary dependency (Sidekiq already migrated
6
+ to `redis-client` in v7.0)
7
+
8
+ # 0.19.0 - 2026-03-30
9
+
10
+ - Fix race condition in `MiniScheduler::Manager`
11
+ - Add support for Sidekiq 8.0, 8.1
12
+ - Add Ruby 3.4, 4.0 to CI pipeline
13
+ - Add DragonflyDB to test matrix
14
+ - Update minimum Ruby version to 3.2
15
+
1
16
  # 0.18.0 - 2024-12-20
2
17
 
3
18
  - Add support for Sidekiq 7+
@@ -6,7 +6,7 @@ if defined?(ActiveRecord::Base)
6
6
  self.table_name = "scheduler_stats"
7
7
 
8
8
  def self.purge_old
9
- where("started_at < ?", 1.months.ago).delete_all
9
+ where("started_at < ?", 1.month.ago).delete_all
10
10
  end
11
11
  end
12
12
  end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+ source "https://rubygems.org"
3
+
4
+ gemspec path: ".."
5
+
6
+ gem "sidekiq", "~> 8.0.0"
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+ source "https://rubygems.org"
3
+
4
+ gemspec path: ".."
5
+
6
+ gem "sidekiq", "~> 8.1.0"
@@ -22,9 +22,9 @@ module MiniScheduler
22
22
  @mutex = Mutex.new
23
23
  end
24
24
 
25
- MAX_POLLING_ATTEMPTS ||= 60
26
- BASE_SLEEP_DURATION ||= 0.001
27
- MAX_SLEEP_DURATION ||= 1
25
+ MAX_POLLING_ATTEMPTS = 60
26
+ BASE_SLEEP_DURATION = 0.001
27
+ MAX_SLEEP_DURATION = 1
28
28
 
29
29
  # NOTE wrapped in mutex to maintain its semantics
30
30
  def synchronize
@@ -28,8 +28,8 @@ module MiniScheduler
28
28
  @keep_alive_thread =
29
29
  Thread.new do
30
30
  while !@stopped
31
- @mutex.synchronize { keep_alive }
32
31
  sleep(@manager.keep_alive_duration / 2)
32
+ @mutex.synchronize { keep_alive }
33
33
  end
34
34
  end
35
35
 
@@ -348,7 +348,7 @@ module MiniScheduler
348
348
  end
349
349
 
350
350
  def stop!
351
- @runner.stop!
351
+ @runner&.stop!
352
352
  self.class.current.delete(@queue)
353
353
  end
354
354
 
@@ -357,7 +357,7 @@ module MiniScheduler
357
357
  end
358
358
 
359
359
  def keep_alive(*ids)
360
- ids = [identity_key, *@runner.worker_thread_ids] if ids.size == 0
360
+ ids = [identity_key, *@runner&.worker_thread_ids] if ids.size == 0
361
361
  ids.each { |identity_key| redis.setex identity_key, keep_alive_duration, "" }
362
362
  end
363
363
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MiniScheduler
4
- VERSION = "0.18.0"
4
+ VERSION = "0.20.0"
5
5
  end
@@ -18,22 +18,24 @@ module MiniScheduler
18
18
  end
19
19
  end
20
20
 
21
- def self.registered(app)
22
- app.helpers do
23
- def sane_time(time)
24
- return unless time
25
- time
26
- end
21
+ module Helpers
22
+ def sane_time(time)
23
+ return unless time
24
+ time
25
+ end
27
26
 
28
- def sane_duration(duration)
29
- return unless duration
30
- if duration < 1000
31
- "#{duration}ms"
32
- else
33
- "#{"%.2f" % (duration / 1000.0)} secs"
34
- end
27
+ def sane_duration(duration)
28
+ return unless duration
29
+ if duration < 1000
30
+ "#{duration}ms"
31
+ else
32
+ "#{"%.2f" % (duration / 1000.0)} secs"
35
33
  end
36
34
  end
35
+ end
36
+
37
+ def self.registered(app)
38
+ app.helpers Helpers
37
39
 
38
40
  app.get "/scheduler" do
39
41
  MiniScheduler.before_sidekiq_web_request&.call
@@ -72,5 +74,18 @@ module MiniScheduler
72
74
  end
73
75
  end
74
76
 
75
- Sidekiq::Web.register(MiniScheduler::Web)
76
- Sidekiq::Web.tabs["Scheduler"] = "scheduler"
77
+ sidekiq_version = Gem::Version.new(Sidekiq::VERSION)
78
+ register_options = {
79
+ name: nil, # asset namespace (not used here)
80
+ tab: "Scheduler", # tab label
81
+ index: "scheduler", # index route name
82
+ }
83
+
84
+ if sidekiq_version < "7.3.0"
85
+ Sidekiq::Web.register MiniScheduler::Web
86
+ Sidekiq::Web.tabs[register_options[:tab]] = register_options[:index]
87
+ elsif sidekiq_version < "8.0.0"
88
+ Sidekiq::Web.register(MiniScheduler::Web, **register_options)
89
+ else # 8.0+
90
+ Sidekiq::Web.configure { |cfg| cfg.register(MiniScheduler::Web, **register_options) }
91
+ end
@@ -5,7 +5,6 @@ require "mini_scheduler/schedule_info"
5
5
  require "mini_scheduler/manager"
6
6
  require "mini_scheduler/distributed_mutex"
7
7
  require "sidekiq"
8
- require "redis"
9
8
 
10
9
  begin
11
10
  require "sidekiq/exception_handler"
@@ -15,21 +15,21 @@ Gem::Specification.new do |spec|
15
15
  spec.homepage = "https://github.com/discourse/mini_scheduler"
16
16
  spec.license = "MIT"
17
17
 
18
- spec.required_ruby_version = ">= 3.0.0"
18
+ spec.required_ruby_version = ">= 3.2.0"
19
19
 
20
20
  spec.files = `git ls-files`.split($/).reject { |s| s =~ /^(spec|\.)/ }
21
21
  spec.require_paths = ["lib"]
22
22
 
23
- spec.add_runtime_dependency "sidekiq", ">= 6.5", "< 8.0"
23
+ spec.add_runtime_dependency "sidekiq", ">= 6.5", "< 9.0"
24
24
 
25
25
  spec.add_development_dependency "pg", "~> 1.0"
26
26
  spec.add_development_dependency "activesupport", "~> 7.0"
27
27
  spec.add_development_dependency "rspec", "~> 3.0"
28
- spec.add_development_dependency "mocha", "~> 2.0"
28
+ spec.add_development_dependency "mocha", "~> 3.0"
29
29
  spec.add_development_dependency "guard", "~> 2.0"
30
30
  spec.add_development_dependency "guard-rspec", "~> 4.0"
31
31
  spec.add_development_dependency "redis", ">= 4.0"
32
32
  spec.add_development_dependency "rake", "~> 13.0"
33
- spec.add_development_dependency "rubocop-discourse", "= 3.8.1"
33
+ spec.add_development_dependency "rubocop-discourse", "= 3.18.0"
34
34
  spec.add_development_dependency "syntax_tree"
35
35
  end
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mini_scheduler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.18.0
4
+ version: 0.20.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Saffron
8
8
  - Neil Lalonde
9
- autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2024-12-20 00:00:00.000000000 Z
11
+ date: 1980-01-02 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: sidekiq
@@ -20,7 +19,7 @@ dependencies:
20
19
  version: '6.5'
21
20
  - - "<"
22
21
  - !ruby/object:Gem::Version
23
- version: '8.0'
22
+ version: '9.0'
24
23
  type: :runtime
25
24
  prerelease: false
26
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -30,7 +29,7 @@ dependencies:
30
29
  version: '6.5'
31
30
  - - "<"
32
31
  - !ruby/object:Gem::Version
33
- version: '8.0'
32
+ version: '9.0'
34
33
  - !ruby/object:Gem::Dependency
35
34
  name: pg
36
35
  requirement: !ruby/object:Gem::Requirement
@@ -79,14 +78,14 @@ dependencies:
79
78
  requirements:
80
79
  - - "~>"
81
80
  - !ruby/object:Gem::Version
82
- version: '2.0'
81
+ version: '3.0'
83
82
  type: :development
84
83
  prerelease: false
85
84
  version_requirements: !ruby/object:Gem::Requirement
86
85
  requirements:
87
86
  - - "~>"
88
87
  - !ruby/object:Gem::Version
89
- version: '2.0'
88
+ version: '3.0'
90
89
  - !ruby/object:Gem::Dependency
91
90
  name: guard
92
91
  requirement: !ruby/object:Gem::Requirement
@@ -149,14 +148,14 @@ dependencies:
149
148
  requirements:
150
149
  - - '='
151
150
  - !ruby/object:Gem::Version
152
- version: 3.8.1
151
+ version: 3.18.0
153
152
  type: :development
154
153
  prerelease: false
155
154
  version_requirements: !ruby/object:Gem::Requirement
156
155
  requirements:
157
156
  - - '='
158
157
  - !ruby/object:Gem::Version
159
- version: 3.8.1
158
+ version: 3.18.0
160
159
  - !ruby/object:Gem::Dependency
161
160
  name: syntax_tree
162
161
  requirement: !ruby/object:Gem::Requirement
@@ -189,6 +188,8 @@ files:
189
188
  - gemfiles/sidekiq-7.1.gemfile
190
189
  - gemfiles/sidekiq-7.2.gemfile
191
190
  - gemfiles/sidekiq-7.3.gemfile
191
+ - gemfiles/sidekiq-8.0.gemfile
192
+ - gemfiles/sidekiq-8.1.gemfile
192
193
  - lib/generators/mini_scheduler/install/install_generator.rb
193
194
  - lib/generators/mini_scheduler/install/templates/create_mini_scheduler_stats.rb
194
195
  - lib/generators/mini_scheduler/install/templates/mini_scheduler_initializer.rb
@@ -207,7 +208,6 @@ homepage: https://github.com/discourse/mini_scheduler
207
208
  licenses:
208
209
  - MIT
209
210
  metadata: {}
210
- post_install_message:
211
211
  rdoc_options: []
212
212
  require_paths:
213
213
  - lib
@@ -215,15 +215,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
215
215
  requirements:
216
216
  - - ">="
217
217
  - !ruby/object:Gem::Version
218
- version: 3.0.0
218
+ version: 3.2.0
219
219
  required_rubygems_version: !ruby/object:Gem::Requirement
220
220
  requirements:
221
221
  - - ">="
222
222
  - !ruby/object:Gem::Version
223
223
  version: '0'
224
224
  requirements: []
225
- rubygems_version: 3.5.22
226
- signing_key:
225
+ rubygems_version: 3.6.9
227
226
  specification_version: 4
228
227
  summary: Adds recurring jobs for Sidekiq
229
228
  test_files: []