cloudtasker 0.7.0 → 0.9.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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/.rubocop.yml +5 -0
  4. data/.travis.yml +3 -3
  5. data/CHANGELOG.md +41 -0
  6. data/README.md +145 -25
  7. data/_config.yml +1 -0
  8. data/app/controllers/cloudtasker/worker_controller.rb +21 -5
  9. data/cloudtasker.gemspec +2 -2
  10. data/docs/BATCH_JOBS.md +28 -3
  11. data/docs/CRON_JOBS.md +3 -1
  12. data/exe/cloudtasker +13 -1
  13. data/gemfiles/google_cloud_tasks_1.0.gemfile.lock +26 -9
  14. data/gemfiles/google_cloud_tasks_1.1.gemfile.lock +26 -9
  15. data/gemfiles/google_cloud_tasks_1.2.gemfile.lock +27 -10
  16. data/gemfiles/google_cloud_tasks_1.3.gemfile.lock +26 -9
  17. data/gemfiles/rails_5.2.gemfile.lock +28 -11
  18. data/gemfiles/rails_6.0.gemfile.lock +29 -12
  19. data/lib/cloudtasker.rb +1 -1
  20. data/lib/cloudtasker/backend/google_cloud_task.rb +65 -12
  21. data/lib/cloudtasker/backend/memory_task.rb +5 -3
  22. data/lib/cloudtasker/backend/redis_task.rb +24 -13
  23. data/lib/cloudtasker/batch/batch_progress.rb +11 -2
  24. data/lib/cloudtasker/batch/job.rb +18 -4
  25. data/lib/cloudtasker/cli.rb +6 -5
  26. data/lib/cloudtasker/cloud_task.rb +6 -2
  27. data/lib/cloudtasker/config.rb +33 -9
  28. data/lib/cloudtasker/cron/job.rb +2 -2
  29. data/lib/cloudtasker/cron/schedule.rb +26 -14
  30. data/lib/cloudtasker/local_server.rb +44 -22
  31. data/lib/cloudtasker/max_task_size_exceeded_error.rb +14 -0
  32. data/lib/cloudtasker/redis_client.rb +10 -7
  33. data/lib/cloudtasker/unique_job/job.rb +2 -2
  34. data/lib/cloudtasker/version.rb +1 -1
  35. data/lib/cloudtasker/worker.rb +45 -10
  36. data/lib/cloudtasker/worker_handler.rb +7 -5
  37. data/lib/cloudtasker/worker_logger.rb +1 -1
  38. data/lib/cloudtasker/worker_wrapper.rb +52 -0
  39. data/lib/tasks/setup_queue.rake +12 -2
  40. metadata +7 -6
  41. data/Gemfile.lock +0 -280
  42. data/lib/cloudtasker/railtie.rb +0 -10
@@ -2,7 +2,7 @@
2
2
 
3
3
  **Note**: this extension requires redis
4
4
 
5
- The Cloudtasker batch job extension allows to add sub-jobs to regular jobs. This adds the ability to enqueue a list of jobs and track their overall progression as a groupd of jobs (the batch). This extension allows jobs to define callbacks in their worker to track completion of the batch and take action based on that.
5
+ The Cloudtasker batch job extension allows to add sub-jobs to regular jobs. This adds the ability to enqueue a list of jobs and track their overall progression as a group of jobs (a "batch"). This extension allows jobs to define callbacks in their worker to track completion of the batch and take actions based on that.
6
6
 
7
7
  ## Configuration
8
8
 
@@ -53,14 +53,39 @@ The following callbacks are available on your workers to track the progress of t
53
53
 
54
54
  | Callback | Argument | Description |
55
55
  |------|-------------|-----------|
56
- | `on_batch_node_complete` | `The child job` | Invoked when any descendant (e.g. sub-sub job) successfully completess |
56
+ | `on_batch_node_complete` | `The child job` | Invoked when any descendant (e.g. sub-sub job) successfully completes |
57
57
  | `on_child_complete` | `The child job` | Invoked when a direct descendant successfully completes |
58
58
  | `on_child_error` | `The child job` | Invoked when a child fails |
59
59
  | `on_child_dead` | `The child job` | Invoked when a child has exhausted all of its retries |s
60
60
  | `on_batch_complete` | none | Invoked when all chidren have finished or died |
61
61
 
62
+ ## Queue management
63
+
64
+ Jobs added to a batch inherit the queue of the parent. It is possible to specify a different queue when adding a job to a batch using `add_to_queue` batch method.
65
+
66
+ E.g.
67
+
68
+ ```ruby
69
+ def perform
70
+ batch.add_to_queue(:critical, SubWorker, arg1, arg2, arg3)
71
+ end
72
+ ```
73
+
62
74
  ## Batch completion
63
75
 
64
76
  Batches complete when all children have successfully completed or died (all retries exhausted).
65
77
 
66
- Jobs that fail in a batch will be retried based on the `max_retries` setting configured globally or on the worker itself. The batch will be considered `pending` while workers retry. Therefore it may be a good idea to reduce the number of retries on your workers using `cloudtasker_options max_retries: 5` to ensure your batches don't hang for too long.
78
+ Jobs that fail in a batch will be retried based on the `max_retries` setting configured globally or on the worker itself. The batch will be considered `pending` while workers retry. Therefore it may be a good idea to reduce the number of retries on your workers using `cloudtasker_options max_retries: 5` to ensure your batches don't hang for too long.
79
+
80
+ ## Batch progress tracking
81
+
82
+ You can access progression statistics in callback using `batch.progress`. See the [BatchProgress](../lib/cloudtasker/batch/batch_progress.rb) class for more details.
83
+
84
+ E.g.
85
+ ```ruby
86
+ def on_batch_node_complete(_child_job)
87
+ logger.info("Total: #{batch.progress.total}")
88
+ logger.info("Completed: #{batch.progress.completed}")
89
+ logger.info("Progress: #{batch.progress.percent.to_i}%")
90
+ end
91
+ ```
@@ -28,7 +28,9 @@ unless Rails.env.test?
28
28
  # Run job every hour on the fifteenth minute
29
29
  other_cron_schedule: {
30
30
  worker: 'OtherCronWorker',
31
- cron: '15 * * * *'
31
+ cron: '15 * * * *',
32
+ queue: 'critical'
33
+ args: ['foo', 'bar']
32
34
  }
33
35
  )
34
36
  end
@@ -3,9 +3,21 @@
3
3
 
4
4
  require 'bundler/setup'
5
5
  require 'cloudtasker/cli'
6
+ require 'optparse'
7
+
8
+ options = {}
9
+ OptionParser.new do |opts|
10
+ opts.banner = 'Usage: cloudtasker [options]'
11
+
12
+ opts.on('-q QUEUE', '--queue=QUEUE', 'Queue to process and number of threads. ' \
13
+ "Examples: '-q critical' | '-q critical,2' | '-q critical,3 -q defaults,2'") do |o|
14
+ options[:queues] ||= []
15
+ options[:queues] << o.split(',')
16
+ end
17
+ end.parse!
6
18
 
7
19
  begin
8
- Cloudtasker::CLI.run
20
+ Cloudtasker::CLI.run(options)
9
21
  rescue StandardError => e
10
22
  raise e if $DEBUG
11
23
 
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- cloudtasker (0.2.0)
4
+ cloudtasker (0.9.1)
5
5
  activesupport
6
6
  fugit
7
7
  google-cloud-tasks
@@ -82,11 +82,21 @@ GEM
82
82
  erubi (1.9.0)
83
83
  et-orbi (1.2.2)
84
84
  tzinfo
85
- faraday (0.17.0)
85
+ faraday (0.17.1)
86
86
  multipart-post (>= 1.2, < 3)
87
+ faraday-http-cache (2.0.0)
88
+ faraday (~> 0.8)
87
89
  fugit (1.3.3)
88
90
  et-orbi (~> 1.1, >= 1.1.8)
89
91
  raabro (~> 1.1)
92
+ github_changelog_generator (1.15.0)
93
+ activesupport
94
+ faraday-http-cache
95
+ multi_json
96
+ octokit (~> 4.6)
97
+ rainbow (>= 2.2.1)
98
+ rake (>= 10.0)
99
+ retriable (~> 3.0)
90
100
  globalid (0.4.2)
91
101
  activesupport (>= 4.2.0)
92
102
  google-cloud-tasks (1.0.0)
@@ -99,7 +109,7 @@ GEM
99
109
  googleauth (~> 0.9)
100
110
  grpc (~> 1.24)
101
111
  rly (~> 0.2.3)
102
- google-protobuf (3.10.1)
112
+ google-protobuf (3.11.1)
103
113
  googleapis-common-protos (1.3.9)
104
114
  google-protobuf (~> 3.0)
105
115
  googleapis-common-protos-types (~> 1.0)
@@ -124,14 +134,14 @@ GEM
124
134
  concurrent-ruby (~> 1.0)
125
135
  jaro_winkler (1.5.4)
126
136
  jwt (2.2.1)
127
- loofah (2.3.1)
137
+ loofah (2.4.0)
128
138
  crass (~> 1.0.2)
129
139
  nokogiri (>= 1.5.9)
130
140
  mail (2.7.1)
131
141
  mini_mime (>= 0.1.1)
132
142
  marcel (0.3.3)
133
143
  mimemagic (~> 0.3.2)
134
- memoist (0.16.1)
144
+ memoist (0.16.2)
135
145
  method_source (0.9.2)
136
146
  mimemagic (0.3.3)
137
147
  mini_mime (1.0.2)
@@ -140,10 +150,12 @@ GEM
140
150
  multi_json (1.14.1)
141
151
  multipart-post (2.1.1)
142
152
  nio4r (2.5.2)
143
- nokogiri (1.10.5)
153
+ nokogiri (1.10.7)
144
154
  mini_portile2 (~> 2.4.0)
155
+ octokit (4.14.0)
156
+ sawyer (~> 0.8.0, >= 0.5.3)
145
157
  os (1.0.1)
146
- parallel (1.19.0)
158
+ parallel (1.19.1)
147
159
  parser (2.6.5.0)
148
160
  ast (~> 2.4.0)
149
161
  public_suffix (4.0.1)
@@ -180,6 +192,7 @@ GEM
180
192
  rainbow (3.0.0)
181
193
  rake (10.5.0)
182
194
  redis (4.1.3)
195
+ retriable (3.1.2)
183
196
  rly (0.2.3)
184
197
  rspec (3.9.0)
185
198
  rspec-core (~> 3.9.0)
@@ -209,10 +222,13 @@ GEM
209
222
  rainbow (>= 2.2.2, < 4.0)
210
223
  ruby-progressbar (~> 1.7)
211
224
  unicode-display_width (>= 1.4.0, < 1.7)
212
- rubocop-rspec (1.36.0)
225
+ rubocop-rspec (1.37.0)
213
226
  rubocop (>= 0.68.1)
214
227
  ruby-progressbar (1.10.1)
215
228
  safe_yaml (1.0.5)
229
+ sawyer (0.8.2)
230
+ addressable (>= 2.3.5)
231
+ faraday (> 0.8, < 2.0)
216
232
  signet (0.12.0)
217
233
  addressable (~> 2.3)
218
234
  faraday (~> 0.9)
@@ -239,7 +255,7 @@ GEM
239
255
  websocket-driver (0.7.1)
240
256
  websocket-extensions (>= 0.1.0)
241
257
  websocket-extensions (0.1.4)
242
- zeitwerk (2.2.1)
258
+ zeitwerk (2.2.2)
243
259
 
244
260
  PLATFORMS
245
261
  ruby
@@ -248,6 +264,7 @@ DEPENDENCIES
248
264
  appraisal
249
265
  bundler (~> 2.0)
250
266
  cloudtasker!
267
+ github_changelog_generator
251
268
  google-cloud-tasks (= 1.0)
252
269
  rails
253
270
  rake (~> 10.0)
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- cloudtasker (0.2.0)
4
+ cloudtasker (0.9.1)
5
5
  activesupport
6
6
  fugit
7
7
  google-cloud-tasks
@@ -82,11 +82,21 @@ GEM
82
82
  erubi (1.9.0)
83
83
  et-orbi (1.2.2)
84
84
  tzinfo
85
- faraday (0.17.0)
85
+ faraday (0.17.1)
86
86
  multipart-post (>= 1.2, < 3)
87
+ faraday-http-cache (2.0.0)
88
+ faraday (~> 0.8)
87
89
  fugit (1.3.3)
88
90
  et-orbi (~> 1.1, >= 1.1.8)
89
91
  raabro (~> 1.1)
92
+ github_changelog_generator (1.15.0)
93
+ activesupport
94
+ faraday-http-cache
95
+ multi_json
96
+ octokit (~> 4.6)
97
+ rainbow (>= 2.2.1)
98
+ rake (>= 10.0)
99
+ retriable (~> 3.0)
90
100
  globalid (0.4.2)
91
101
  activesupport (>= 4.2.0)
92
102
  google-cloud-tasks (1.1.0)
@@ -99,7 +109,7 @@ GEM
99
109
  googleauth (~> 0.9)
100
110
  grpc (~> 1.24)
101
111
  rly (~> 0.2.3)
102
- google-protobuf (3.10.1)
112
+ google-protobuf (3.11.1)
103
113
  googleapis-common-protos (1.3.9)
104
114
  google-protobuf (~> 3.0)
105
115
  googleapis-common-protos-types (~> 1.0)
@@ -124,14 +134,14 @@ GEM
124
134
  concurrent-ruby (~> 1.0)
125
135
  jaro_winkler (1.5.4)
126
136
  jwt (2.2.1)
127
- loofah (2.3.1)
137
+ loofah (2.4.0)
128
138
  crass (~> 1.0.2)
129
139
  nokogiri (>= 1.5.9)
130
140
  mail (2.7.1)
131
141
  mini_mime (>= 0.1.1)
132
142
  marcel (0.3.3)
133
143
  mimemagic (~> 0.3.2)
134
- memoist (0.16.1)
144
+ memoist (0.16.2)
135
145
  method_source (0.9.2)
136
146
  mimemagic (0.3.3)
137
147
  mini_mime (1.0.2)
@@ -140,10 +150,12 @@ GEM
140
150
  multi_json (1.14.1)
141
151
  multipart-post (2.1.1)
142
152
  nio4r (2.5.2)
143
- nokogiri (1.10.5)
153
+ nokogiri (1.10.7)
144
154
  mini_portile2 (~> 2.4.0)
155
+ octokit (4.14.0)
156
+ sawyer (~> 0.8.0, >= 0.5.3)
145
157
  os (1.0.1)
146
- parallel (1.19.0)
158
+ parallel (1.19.1)
147
159
  parser (2.6.5.0)
148
160
  ast (~> 2.4.0)
149
161
  public_suffix (4.0.1)
@@ -180,6 +192,7 @@ GEM
180
192
  rainbow (3.0.0)
181
193
  rake (10.5.0)
182
194
  redis (4.1.3)
195
+ retriable (3.1.2)
183
196
  rly (0.2.3)
184
197
  rspec (3.9.0)
185
198
  rspec-core (~> 3.9.0)
@@ -209,10 +222,13 @@ GEM
209
222
  rainbow (>= 2.2.2, < 4.0)
210
223
  ruby-progressbar (~> 1.7)
211
224
  unicode-display_width (>= 1.4.0, < 1.7)
212
- rubocop-rspec (1.36.0)
225
+ rubocop-rspec (1.37.0)
213
226
  rubocop (>= 0.68.1)
214
227
  ruby-progressbar (1.10.1)
215
228
  safe_yaml (1.0.5)
229
+ sawyer (0.8.2)
230
+ addressable (>= 2.3.5)
231
+ faraday (> 0.8, < 2.0)
216
232
  signet (0.12.0)
217
233
  addressable (~> 2.3)
218
234
  faraday (~> 0.9)
@@ -239,7 +255,7 @@ GEM
239
255
  websocket-driver (0.7.1)
240
256
  websocket-extensions (>= 0.1.0)
241
257
  websocket-extensions (0.1.4)
242
- zeitwerk (2.2.1)
258
+ zeitwerk (2.2.2)
243
259
 
244
260
  PLATFORMS
245
261
  ruby
@@ -248,6 +264,7 @@ DEPENDENCIES
248
264
  appraisal
249
265
  bundler (~> 2.0)
250
266
  cloudtasker!
267
+ github_changelog_generator
251
268
  google-cloud-tasks (= 1.1)
252
269
  rails
253
270
  rake (~> 10.0)
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- cloudtasker (0.2.0)
4
+ cloudtasker (0.9.1)
5
5
  activesupport
6
6
  fugit
7
7
  google-cloud-tasks
@@ -82,11 +82,21 @@ GEM
82
82
  erubi (1.9.0)
83
83
  et-orbi (1.2.2)
84
84
  tzinfo
85
- faraday (0.17.0)
85
+ faraday (0.17.1)
86
86
  multipart-post (>= 1.2, < 3)
87
+ faraday-http-cache (2.0.0)
88
+ faraday (~> 0.8)
87
89
  fugit (1.3.3)
88
90
  et-orbi (~> 1.1, >= 1.1.8)
89
91
  raabro (~> 1.1)
92
+ github_changelog_generator (1.15.0)
93
+ activesupport
94
+ faraday-http-cache
95
+ multi_json
96
+ octokit (~> 4.6)
97
+ rainbow (>= 2.2.1)
98
+ rake (>= 10.0)
99
+ retriable (~> 3.0)
90
100
  globalid (0.4.2)
91
101
  activesupport (>= 4.2.0)
92
102
  google-cloud-tasks (1.2.0)
@@ -99,7 +109,7 @@ GEM
99
109
  googleauth (~> 0.9)
100
110
  grpc (~> 1.24)
101
111
  rly (~> 0.2.3)
102
- google-protobuf (3.10.1-universal-darwin)
112
+ google-protobuf (3.11.1)
103
113
  googleapis-common-protos (1.3.9)
104
114
  google-protobuf (~> 3.0)
105
115
  googleapis-common-protos-types (~> 1.0)
@@ -113,7 +123,7 @@ GEM
113
123
  multi_json (~> 1.11)
114
124
  os (>= 0.9, < 2.0)
115
125
  signet (~> 0.12)
116
- grpc (1.25.0-universal-darwin)
126
+ grpc (1.25.0)
117
127
  google-protobuf (~> 3.8)
118
128
  googleapis-common-protos-types (~> 1.0)
119
129
  grpc-google-iam-v1 (0.6.9)
@@ -124,14 +134,14 @@ GEM
124
134
  concurrent-ruby (~> 1.0)
125
135
  jaro_winkler (1.5.4)
126
136
  jwt (2.2.1)
127
- loofah (2.3.1)
137
+ loofah (2.4.0)
128
138
  crass (~> 1.0.2)
129
139
  nokogiri (>= 1.5.9)
130
140
  mail (2.7.1)
131
141
  mini_mime (>= 0.1.1)
132
142
  marcel (0.3.3)
133
143
  mimemagic (~> 0.3.2)
134
- memoist (0.16.1)
144
+ memoist (0.16.2)
135
145
  method_source (0.9.2)
136
146
  mimemagic (0.3.3)
137
147
  mini_mime (1.0.2)
@@ -140,10 +150,12 @@ GEM
140
150
  multi_json (1.14.1)
141
151
  multipart-post (2.1.1)
142
152
  nio4r (2.5.2)
143
- nokogiri (1.10.5)
153
+ nokogiri (1.10.7)
144
154
  mini_portile2 (~> 2.4.0)
155
+ octokit (4.14.0)
156
+ sawyer (~> 0.8.0, >= 0.5.3)
145
157
  os (1.0.1)
146
- parallel (1.19.0)
158
+ parallel (1.19.1)
147
159
  parser (2.6.5.0)
148
160
  ast (~> 2.4.0)
149
161
  public_suffix (4.0.1)
@@ -180,6 +192,7 @@ GEM
180
192
  rainbow (3.0.0)
181
193
  rake (10.5.0)
182
194
  redis (4.1.3)
195
+ retriable (3.1.2)
183
196
  rly (0.2.3)
184
197
  rspec (3.9.0)
185
198
  rspec-core (~> 3.9.0)
@@ -209,10 +222,13 @@ GEM
209
222
  rainbow (>= 2.2.2, < 4.0)
210
223
  ruby-progressbar (~> 1.7)
211
224
  unicode-display_width (>= 1.4.0, < 1.7)
212
- rubocop-rspec (1.36.0)
225
+ rubocop-rspec (1.37.0)
213
226
  rubocop (>= 0.68.1)
214
227
  ruby-progressbar (1.10.1)
215
228
  safe_yaml (1.0.5)
229
+ sawyer (0.8.2)
230
+ addressable (>= 2.3.5)
231
+ faraday (> 0.8, < 2.0)
216
232
  signet (0.12.0)
217
233
  addressable (~> 2.3)
218
234
  faraday (~> 0.9)
@@ -239,7 +255,7 @@ GEM
239
255
  websocket-driver (0.7.1)
240
256
  websocket-extensions (>= 0.1.0)
241
257
  websocket-extensions (0.1.4)
242
- zeitwerk (2.2.1)
258
+ zeitwerk (2.2.2)
243
259
 
244
260
  PLATFORMS
245
261
  ruby
@@ -248,6 +264,7 @@ DEPENDENCIES
248
264
  appraisal
249
265
  bundler (~> 2.0)
250
266
  cloudtasker!
267
+ github_changelog_generator
251
268
  google-cloud-tasks (= 1.2)
252
269
  rails
253
270
  rake (~> 10.0)
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- cloudtasker (0.2.0)
4
+ cloudtasker (0.9.1)
5
5
  activesupport
6
6
  fugit
7
7
  google-cloud-tasks
@@ -82,11 +82,21 @@ GEM
82
82
  erubi (1.9.0)
83
83
  et-orbi (1.2.2)
84
84
  tzinfo
85
- faraday (0.17.0)
85
+ faraday (0.17.1)
86
86
  multipart-post (>= 1.2, < 3)
87
+ faraday-http-cache (2.0.0)
88
+ faraday (~> 0.8)
87
89
  fugit (1.3.3)
88
90
  et-orbi (~> 1.1, >= 1.1.8)
89
91
  raabro (~> 1.1)
92
+ github_changelog_generator (1.15.0)
93
+ activesupport
94
+ faraday-http-cache
95
+ multi_json
96
+ octokit (~> 4.6)
97
+ rainbow (>= 2.2.1)
98
+ rake (>= 10.0)
99
+ retriable (~> 3.0)
90
100
  globalid (0.4.2)
91
101
  activesupport (>= 4.2.0)
92
102
  google-cloud-tasks (1.3.0)
@@ -100,7 +110,7 @@ GEM
100
110
  googleauth (~> 0.9)
101
111
  grpc (~> 1.24)
102
112
  rly (~> 0.2.3)
103
- google-protobuf (3.10.1)
113
+ google-protobuf (3.11.1)
104
114
  googleapis-common-protos (1.3.9)
105
115
  google-protobuf (~> 3.0)
106
116
  googleapis-common-protos-types (~> 1.0)
@@ -125,14 +135,14 @@ GEM
125
135
  concurrent-ruby (~> 1.0)
126
136
  jaro_winkler (1.5.4)
127
137
  jwt (2.2.1)
128
- loofah (2.3.1)
138
+ loofah (2.4.0)
129
139
  crass (~> 1.0.2)
130
140
  nokogiri (>= 1.5.9)
131
141
  mail (2.7.1)
132
142
  mini_mime (>= 0.1.1)
133
143
  marcel (0.3.3)
134
144
  mimemagic (~> 0.3.2)
135
- memoist (0.16.1)
145
+ memoist (0.16.2)
136
146
  method_source (0.9.2)
137
147
  mimemagic (0.3.3)
138
148
  mini_mime (1.0.2)
@@ -141,10 +151,12 @@ GEM
141
151
  multi_json (1.14.1)
142
152
  multipart-post (2.1.1)
143
153
  nio4r (2.5.2)
144
- nokogiri (1.10.5)
154
+ nokogiri (1.10.7)
145
155
  mini_portile2 (~> 2.4.0)
156
+ octokit (4.14.0)
157
+ sawyer (~> 0.8.0, >= 0.5.3)
146
158
  os (1.0.1)
147
- parallel (1.19.0)
159
+ parallel (1.19.1)
148
160
  parser (2.6.5.0)
149
161
  ast (~> 2.4.0)
150
162
  public_suffix (4.0.1)
@@ -181,6 +193,7 @@ GEM
181
193
  rainbow (3.0.0)
182
194
  rake (10.5.0)
183
195
  redis (4.1.3)
196
+ retriable (3.1.2)
184
197
  rly (0.2.3)
185
198
  rspec (3.9.0)
186
199
  rspec-core (~> 3.9.0)
@@ -210,10 +223,13 @@ GEM
210
223
  rainbow (>= 2.2.2, < 4.0)
211
224
  ruby-progressbar (~> 1.7)
212
225
  unicode-display_width (>= 1.4.0, < 1.7)
213
- rubocop-rspec (1.36.0)
226
+ rubocop-rspec (1.37.0)
214
227
  rubocop (>= 0.68.1)
215
228
  ruby-progressbar (1.10.1)
216
229
  safe_yaml (1.0.5)
230
+ sawyer (0.8.2)
231
+ addressable (>= 2.3.5)
232
+ faraday (> 0.8, < 2.0)
217
233
  signet (0.12.0)
218
234
  addressable (~> 2.3)
219
235
  faraday (~> 0.9)
@@ -240,7 +256,7 @@ GEM
240
256
  websocket-driver (0.7.1)
241
257
  websocket-extensions (>= 0.1.0)
242
258
  websocket-extensions (0.1.4)
243
- zeitwerk (2.2.1)
259
+ zeitwerk (2.2.2)
244
260
 
245
261
  PLATFORMS
246
262
  ruby
@@ -249,6 +265,7 @@ DEPENDENCIES
249
265
  appraisal
250
266
  bundler (~> 2.0)
251
267
  cloudtasker!
268
+ github_changelog_generator
252
269
  google-cloud-tasks (= 1.3)
253
270
  rails
254
271
  rake (~> 10.0)