gush 2.1.0 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +7 -28
- data/.rubocop.yml +232 -0
- data/CHANGELOG.md +1 -77
- data/README.md +156 -10
- data/gush.gemspec +13 -8
- data/lib/gush/cli/overview.rb +2 -0
- data/lib/gush/cli.rb +27 -4
- data/lib/gush/client.rb +115 -18
- data/lib/gush/graph.rb +2 -2
- data/lib/gush/job.rb +14 -3
- data/lib/gush/migrate/1_create_gush_workflows_created.rb +21 -0
- data/lib/gush/migration.rb +37 -0
- data/lib/gush/version.rb +3 -0
- data/lib/gush/worker.rb +1 -1
- data/lib/gush/workflow.rb +29 -16
- data/lib/gush.rb +1 -0
- data/spec/features/integration_spec.rb +7 -6
- data/spec/gush/client_spec.rb +316 -7
- data/spec/gush/job_spec.rb +48 -2
- data/spec/gush/migrate/1_create_gush_workflows_created_spec.rb +42 -0
- data/spec/gush/migration_spec.rb +23 -0
- data/spec/gush/workflow_spec.rb +120 -12
- data/spec/spec_helper.rb +29 -7
- metadata +64 -12
data/spec/spec_helper.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'active_support'
|
2
|
+
require 'active_support/testing/time_helpers'
|
1
3
|
require 'gush'
|
2
4
|
require 'json'
|
3
5
|
require 'pry'
|
@@ -29,11 +31,16 @@ class TestWorkflow < Gush::Workflow
|
|
29
31
|
end
|
30
32
|
|
31
33
|
class ParameterTestWorkflow < Gush::Workflow
|
32
|
-
def configure(param)
|
33
|
-
run Prepare if param
|
34
|
+
def configure(param, kwarg: false)
|
35
|
+
run Prepare if param || kwarg
|
34
36
|
end
|
35
37
|
end
|
36
38
|
|
39
|
+
class WaitableTestWorkflow < Gush::Workflow
|
40
|
+
def configure
|
41
|
+
run Prepare, wait: 5.minutes
|
42
|
+
end
|
43
|
+
end
|
37
44
|
|
38
45
|
REDIS_URL = ENV["REDIS_URL"] || "redis://localhost:6379/12"
|
39
46
|
|
@@ -86,7 +93,22 @@ RSpec::Matchers.define :have_no_jobs do |flow, jobs|
|
|
86
93
|
end
|
87
94
|
end
|
88
95
|
|
96
|
+
RSpec::Matchers.define :have_a_job_enqueued_at do |flow, job, at|
|
97
|
+
expected_execution_timestamp = (Time.current.utc + at).to_i
|
98
|
+
|
99
|
+
match do |actual|
|
100
|
+
expected = hash_including(args: include(flow, job), at: expected_execution_timestamp)
|
101
|
+
|
102
|
+
expect(ActiveJob::Base.queue_adapter.enqueued_jobs).to match_array(expected)
|
103
|
+
end
|
104
|
+
|
105
|
+
failure_message do |actual|
|
106
|
+
"expected to have enqueued job #{job} to be executed at #{Time.current.utc + at}, but instead has: #{Time.at(enqueued_jobs.first[:at]).to_datetime.utc}"
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
89
110
|
RSpec.configure do |config|
|
111
|
+
config.include ActiveSupport::Testing::TimeHelpers
|
90
112
|
config.include ActiveJob::TestHelper
|
91
113
|
config.include GushHelpers
|
92
114
|
|
@@ -98,11 +120,11 @@ RSpec.configure do |config|
|
|
98
120
|
clear_enqueued_jobs
|
99
121
|
clear_performed_jobs
|
100
122
|
|
101
|
-
Gush.configure do |
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
123
|
+
Gush.configure do |c|
|
124
|
+
c.redis_url = REDIS_URL
|
125
|
+
c.gushfile = GUSHFILE
|
126
|
+
c.locking_duration = defined?(locking_duration) ? locking_duration : 2
|
127
|
+
c.polling_interval = defined?(polling_interval) ? polling_interval : 0.3
|
106
128
|
end
|
107
129
|
end
|
108
130
|
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gush
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotrek Okoński
|
8
|
+
- Michał Krzyżanowski
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2024-09-25 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: activejob
|
@@ -16,20 +17,20 @@ dependencies:
|
|
16
17
|
requirements:
|
17
18
|
- - ">="
|
18
19
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
20
|
+
version: 6.1.0
|
20
21
|
- - "<"
|
21
22
|
- !ruby/object:Gem::Version
|
22
|
-
version: '7.
|
23
|
+
version: '7.2'
|
23
24
|
type: :runtime
|
24
25
|
prerelease: false
|
25
26
|
version_requirements: !ruby/object:Gem::Requirement
|
26
27
|
requirements:
|
27
28
|
- - ">="
|
28
29
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
30
|
+
version: 6.1.0
|
30
31
|
- - "<"
|
31
32
|
- !ruby/object:Gem::Version
|
32
|
-
version: '7.
|
33
|
+
version: '7.2'
|
33
34
|
- !ruby/object:Gem::Dependency
|
34
35
|
name: concurrent-ruby
|
35
36
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,7 +68,7 @@ dependencies:
|
|
67
68
|
version: '3.2'
|
68
69
|
- - "<"
|
69
70
|
- !ruby/object:Gem::Version
|
70
|
-
version: '
|
71
|
+
version: '6'
|
71
72
|
type: :runtime
|
72
73
|
prerelease: false
|
73
74
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -77,7 +78,7 @@ dependencies:
|
|
77
78
|
version: '3.2'
|
78
79
|
- - "<"
|
79
80
|
- !ruby/object:Gem::Version
|
80
|
-
version: '
|
81
|
+
version: '6'
|
81
82
|
- !ruby/object:Gem::Dependency
|
82
83
|
name: redis-mutex
|
83
84
|
requirement: !ruby/object:Gem::Requirement
|
@@ -208,14 +209,56 @@ dependencies:
|
|
208
209
|
requirements:
|
209
210
|
- - "~>"
|
210
211
|
- !ruby/object:Gem::Version
|
211
|
-
version: '
|
212
|
+
version: '12'
|
212
213
|
type: :development
|
213
214
|
prerelease: false
|
214
215
|
version_requirements: !ruby/object:Gem::Requirement
|
215
216
|
requirements:
|
216
217
|
- - "~>"
|
217
218
|
- !ruby/object:Gem::Version
|
218
|
-
version: '
|
219
|
+
version: '12'
|
220
|
+
- !ruby/object:Gem::Dependency
|
221
|
+
name: rubocop
|
222
|
+
requirement: !ruby/object:Gem::Requirement
|
223
|
+
requirements:
|
224
|
+
- - "~>"
|
225
|
+
- !ruby/object:Gem::Version
|
226
|
+
version: 1.65.0
|
227
|
+
type: :development
|
228
|
+
prerelease: false
|
229
|
+
version_requirements: !ruby/object:Gem::Requirement
|
230
|
+
requirements:
|
231
|
+
- - "~>"
|
232
|
+
- !ruby/object:Gem::Version
|
233
|
+
version: 1.65.0
|
234
|
+
- !ruby/object:Gem::Dependency
|
235
|
+
name: rubocop-rake
|
236
|
+
requirement: !ruby/object:Gem::Requirement
|
237
|
+
requirements:
|
238
|
+
- - "~>"
|
239
|
+
- !ruby/object:Gem::Version
|
240
|
+
version: 0.6.0
|
241
|
+
type: :development
|
242
|
+
prerelease: false
|
243
|
+
version_requirements: !ruby/object:Gem::Requirement
|
244
|
+
requirements:
|
245
|
+
- - "~>"
|
246
|
+
- !ruby/object:Gem::Version
|
247
|
+
version: 0.6.0
|
248
|
+
- !ruby/object:Gem::Dependency
|
249
|
+
name: rubocop-rspec
|
250
|
+
requirement: !ruby/object:Gem::Requirement
|
251
|
+
requirements:
|
252
|
+
- - "~>"
|
253
|
+
- !ruby/object:Gem::Version
|
254
|
+
version: 3.0.3
|
255
|
+
type: :development
|
256
|
+
prerelease: false
|
257
|
+
version_requirements: !ruby/object:Gem::Requirement
|
258
|
+
requirements:
|
259
|
+
- - "~>"
|
260
|
+
- !ruby/object:Gem::Version
|
261
|
+
version: 3.0.3
|
219
262
|
- !ruby/object:Gem::Dependency
|
220
263
|
name: rspec
|
221
264
|
requirement: !ruby/object:Gem::Requirement
|
@@ -248,6 +291,7 @@ description: Gush is a parallel workflow runner using Redis as storage and Activ
|
|
248
291
|
for executing jobs.
|
249
292
|
email:
|
250
293
|
- piotrek@okonski.org
|
294
|
+
- michal.krzyzanowski+github@gmail.com
|
251
295
|
executables:
|
252
296
|
- gush
|
253
297
|
extensions: []
|
@@ -256,6 +300,7 @@ files:
|
|
256
300
|
- ".github/workflows/ruby.yml"
|
257
301
|
- ".gitignore"
|
258
302
|
- ".rspec"
|
303
|
+
- ".rubocop.yml"
|
259
304
|
- CHANGELOG.md
|
260
305
|
- Gemfile
|
261
306
|
- LICENSE.txt
|
@@ -272,6 +317,9 @@ files:
|
|
272
317
|
- lib/gush/graph.rb
|
273
318
|
- lib/gush/job.rb
|
274
319
|
- lib/gush/json.rb
|
320
|
+
- lib/gush/migrate/1_create_gush_workflows_created.rb
|
321
|
+
- lib/gush/migration.rb
|
322
|
+
- lib/gush/version.rb
|
275
323
|
- lib/gush/worker.rb
|
276
324
|
- lib/gush/workflow.rb
|
277
325
|
- spec/Gushfile
|
@@ -282,6 +330,8 @@ files:
|
|
282
330
|
- spec/gush/graph_spec.rb
|
283
331
|
- spec/gush/job_spec.rb
|
284
332
|
- spec/gush/json_spec.rb
|
333
|
+
- spec/gush/migrate/1_create_gush_workflows_created_spec.rb
|
334
|
+
- spec/gush/migration_spec.rb
|
285
335
|
- spec/gush/worker_spec.rb
|
286
336
|
- spec/gush/workflow_spec.rb
|
287
337
|
- spec/gush_spec.rb
|
@@ -298,14 +348,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
298
348
|
requirements:
|
299
349
|
- - ">="
|
300
350
|
- !ruby/object:Gem::Version
|
301
|
-
version:
|
351
|
+
version: 3.0.0
|
302
352
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
303
353
|
requirements:
|
304
354
|
- - ">="
|
305
355
|
- !ruby/object:Gem::Version
|
306
356
|
version: '0'
|
307
357
|
requirements: []
|
308
|
-
rubygems_version: 3.
|
358
|
+
rubygems_version: 3.4.22
|
309
359
|
signing_key:
|
310
360
|
specification_version: 4
|
311
361
|
summary: Fast and distributed workflow runner based on ActiveJob and Redis
|
@@ -318,6 +368,8 @@ test_files:
|
|
318
368
|
- spec/gush/graph_spec.rb
|
319
369
|
- spec/gush/job_spec.rb
|
320
370
|
- spec/gush/json_spec.rb
|
371
|
+
- spec/gush/migrate/1_create_gush_workflows_created_spec.rb
|
372
|
+
- spec/gush/migration_spec.rb
|
321
373
|
- spec/gush/worker_spec.rb
|
322
374
|
- spec/gush/workflow_spec.rb
|
323
375
|
- spec/gush_spec.rb
|