cloudtasker 0.8.2 → 0.9.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/test.yml +45 -0
- data/.rubocop.yml +1 -1
- data/Appraisals +16 -0
- data/CHANGELOG.md +46 -0
- data/README.md +3 -1
- data/app/controllers/cloudtasker/worker_controller.rb +21 -3
- data/cloudtasker.gemspec +4 -3
- data/gemfiles/google_cloud_tasks_1.0.gemfile +3 -5
- data/gemfiles/google_cloud_tasks_1.1.gemfile +3 -5
- data/gemfiles/google_cloud_tasks_1.2.gemfile +3 -5
- data/gemfiles/google_cloud_tasks_1.3.gemfile +3 -5
- data/gemfiles/rails_5.2.gemfile +3 -5
- data/gemfiles/rails_6.0.gemfile +3 -5
- data/gemfiles/semantic_logger_3.4.gemfile +7 -0
- data/gemfiles/semantic_logger_4.6.gemfile +7 -0
- data/gemfiles/semantic_logger_4.7.0.gemfile +7 -0
- data/gemfiles/semantic_logger_4.7.2.gemfile +7 -0
- data/gemfiles/semantic_logger_4.7.gemfile +9 -0
- data/lib/cloudtasker.rb +1 -0
- data/lib/cloudtasker/backend/google_cloud_task.rb +25 -5
- data/lib/cloudtasker/cloud_task.rb +2 -0
- data/lib/cloudtasker/config.rb +12 -0
- data/lib/cloudtasker/max_task_size_exceeded_error.rb +14 -0
- data/lib/cloudtasker/redis_client.rb +5 -1
- data/lib/cloudtasker/version.rb +1 -1
- data/lib/cloudtasker/worker_handler.rb +2 -2
- data/lib/cloudtasker/worker_logger.rb +2 -1
- metadata +32 -13
- data/.travis.yml +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 79a19719ba7b8f5572cc36b390d2c9c6a84149911dda847cd6f3dda6f3f9aa86
|
4
|
+
data.tar.gz: ae5c92c86c5363caaf5143f576c181a3a500c661c93120ff2d7545bebf05cc85
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 626cbfb8be6e316a50e76b9d082fb709c0b0a637752ed888e07a5af9ba0804bac01afa2a853d8b2d72743579afafda5e0c92ef32e6f0ec6f7a8ab1a36435c74a
|
7
|
+
data.tar.gz: b9dda9cef3b3b0278760c2fcda32e3e0abbfa1f571dd08e7636af640d3aedb447f29c097b7ccc04316a4392306dbdc96b243de715a527f29a7dd70fc13d9997c
|
@@ -0,0 +1,45 @@
|
|
1
|
+
name: Test
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ master, 0.9-stable ]
|
6
|
+
pull_request:
|
7
|
+
branches: [ master, 0.9-stable ]
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
build:
|
11
|
+
runs-on: ubuntu-latest
|
12
|
+
strategy:
|
13
|
+
matrix:
|
14
|
+
ruby:
|
15
|
+
- '2.5.x'
|
16
|
+
- '2.6.x'
|
17
|
+
appraisal:
|
18
|
+
- 'google-cloud-tasks-1.0'
|
19
|
+
- 'google-cloud-tasks-1.1'
|
20
|
+
- 'google-cloud-tasks-1.2'
|
21
|
+
- 'google-cloud-tasks-1.3'
|
22
|
+
- 'rails-5.2'
|
23
|
+
- 'rails-6.0'
|
24
|
+
- 'semantic_logger-3.4'
|
25
|
+
- 'semantic_logger-4.6'
|
26
|
+
- 'semantic_logger-4.7.0'
|
27
|
+
- 'semantic_logger-4.7.2'
|
28
|
+
steps:
|
29
|
+
- name: Setup System
|
30
|
+
run: sudo apt-get install libsqlite3-dev
|
31
|
+
- uses: actions/checkout@v2
|
32
|
+
- uses: zhulik/redis-action@1.1.0
|
33
|
+
- name: Set up Ruby 2.6
|
34
|
+
uses: actions/setup-ruby@v1
|
35
|
+
with:
|
36
|
+
ruby-version: ${{ matrix.ruby }}
|
37
|
+
- name: Build and test with Rake
|
38
|
+
env:
|
39
|
+
APPRAISAL_CONTEXT: ${{ matrix.appraisal }}
|
40
|
+
run: |
|
41
|
+
gem install bundler
|
42
|
+
bundle install --jobs 4 --retry 3
|
43
|
+
bundle exec rubocop
|
44
|
+
bundle exec appraisal ${APPRAISAL_CONTEXT} bundle
|
45
|
+
bundle exec appraisal ${APPRAISAL_CONTEXT} rspec
|
data/.rubocop.yml
CHANGED
data/Appraisals
CHANGED
@@ -23,3 +23,19 @@ end
|
|
23
23
|
appraise 'rails-6.0' do
|
24
24
|
gem 'rails', '6.0'
|
25
25
|
end
|
26
|
+
|
27
|
+
appraise 'semantic_logger-3.4' do
|
28
|
+
gem 'semantic_logger', '3.4.1'
|
29
|
+
end
|
30
|
+
|
31
|
+
appraise 'semantic_logger-4.6' do
|
32
|
+
gem 'semantic_logger', '4.6.1'
|
33
|
+
end
|
34
|
+
|
35
|
+
appraise 'semantic_logger-4.7.0' do
|
36
|
+
gem 'semantic_logger', '4.7.0'
|
37
|
+
end
|
38
|
+
|
39
|
+
appraise 'semantic_logger-4.7.2' do
|
40
|
+
gem 'semantic_logger', '4.7.2'
|
41
|
+
end
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,51 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [v0.9.4](https://github.com/keypup-io/cloudtasker/tree/v0.9.4) (2020-10-05)
|
4
|
+
|
5
|
+
[Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.9.3...v0.9.4)
|
6
|
+
|
7
|
+
**Fixed bugs:**
|
8
|
+
- Logging: fix log processing with `semantic_logger` `v4.7.2`. Accept any args on block passed to the logger.
|
9
|
+
|
10
|
+
## [v0.9.3](https://github.com/keypup-io/cloudtasker/tree/v0.9.3) (2020-06-25)
|
11
|
+
|
12
|
+
[Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.9.2...v0.9.3)
|
13
|
+
|
14
|
+
**Fixed bugs:**
|
15
|
+
- Google Cloud Tasks: lock version to `~> 1.0` (Google recently released a v2 which changes its bindings completely). An [issue](https://github.com/keypup-io/cloudtasker/issues/11) has been raised to upgrade Cloudtasker to `google-cloud-tasks` `v2`.
|
16
|
+
|
17
|
+
## [v0.9.2](https://github.com/keypup-io/cloudtasker/tree/v0.9.2) (2020-03-04)
|
18
|
+
|
19
|
+
[Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.9.1...v0.9.2)
|
20
|
+
|
21
|
+
**Fixed bugs:**
|
22
|
+
- Cloud Task: ignore "not found" errors when trying to delete an already deleted task.
|
23
|
+
|
24
|
+
## [v0.9.1](https://github.com/keypup-io/cloudtasker/tree/v0.9.1) (2020-02-11)
|
25
|
+
|
26
|
+
[Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.9.0...v0.9.1)
|
27
|
+
|
28
|
+
**Fixed bugs:**
|
29
|
+
- Cloud Task: raise `Cloudtasker::MaxTaskSizeExceededError` if job payload exceeds 100 KB. This is mainly to have production parity in development when running the local processing server.
|
30
|
+
|
31
|
+
## [v0.9.0](https://github.com/keypup-io/cloudtasker/tree/v0.9.0) (2020-01-23)
|
32
|
+
|
33
|
+
[Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.8.2...v0.9.0)
|
34
|
+
|
35
|
+
**Fixed bugs:**
|
36
|
+
- Cloud Task: Base64 encode task body to support UTF-8 characters (e.g. emojis).
|
37
|
+
- Redis: Restrict to one connection (class level) to avoid too many DNS lookups
|
38
|
+
|
39
|
+
**Migration**
|
40
|
+
For Sinatra applications please update your Cloudtasker controller according to [this diff](https://github.com/keypup-io/cloudtasker/commit/311fa8f9beec91fbae012164a25b2ee6e261a2e4#diff-c2a0ea6c6e6c31c749d2e1acdc574f0f).
|
41
|
+
|
42
|
+
## [v0.8.2](https://github.com/keypup-io/cloudtasker/tree/v0.8.2) (2019-12-05)
|
43
|
+
|
44
|
+
[Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.8.1...v0.8.2)
|
45
|
+
|
46
|
+
**Fixed bugs:**
|
47
|
+
- Config: do not add processor host to `Rails.application.config.hosts` if originally empty.
|
48
|
+
|
3
49
|
## [v0.8.1](https://github.com/keypup-io/cloudtasker/tree/v0.8.1) (2019-12-03)
|
4
50
|
|
5
51
|
[Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.8.0...v0.8.1)
|
data/README.md
CHANGED
@@ -635,7 +635,9 @@ If you enqueue this worker by omitting the second argument `MyWorker.perform_asy
|
|
635
635
|
- The `time_at` argument will be ignored by the `unique-job` extension, meaning that job uniqueness will be only based on the `user_id` argument.
|
636
636
|
|
637
637
|
### Handling big job payloads
|
638
|
-
|
638
|
+
Google Cloud Tasks enforces a limit of 100 KB for job payloads. Taking into accounts Cloudtasker authentication headers and meta information this leave ~85 KB of free space for JSONified job arguments.
|
639
|
+
|
640
|
+
Any excessive job payload (> 100 KB) will raise a `Cloudtasker::MaxTaskSizeExceededError`, both in production and development mode.
|
639
641
|
|
640
642
|
If you feel that a job payload is going to get big, prefer to store the payload using a datastore (e.g. Redis) and pass a reference to the job to retrieve the payload inside your job `perform` method.
|
641
643
|
|
@@ -16,9 +16,6 @@ module Cloudtasker
|
|
16
16
|
# Run a worker from a Cloud Task payload
|
17
17
|
#
|
18
18
|
def run
|
19
|
-
# Build payload
|
20
|
-
payload = JSON.parse(request.body.read).merge(job_retries: job_retries)
|
21
|
-
|
22
19
|
# Process payload
|
23
20
|
WorkerHandler.execute_from_payload!(payload)
|
24
21
|
head :no_content
|
@@ -37,6 +34,27 @@ module Cloudtasker
|
|
37
34
|
|
38
35
|
private
|
39
36
|
|
37
|
+
#
|
38
|
+
# Parse the request body and return the actual job
|
39
|
+
# payload.
|
40
|
+
#
|
41
|
+
# @return [Hash] The job payload
|
42
|
+
#
|
43
|
+
def payload
|
44
|
+
@payload ||= begin
|
45
|
+
# Get raw body
|
46
|
+
content = request.body.read
|
47
|
+
|
48
|
+
# Decode content if the body is Base64 encoded
|
49
|
+
if request.headers[Cloudtasker::Config::ENCODING_HEADER].to_s.downcase == 'base64'
|
50
|
+
content = Base64.decode64(content)
|
51
|
+
end
|
52
|
+
|
53
|
+
# Return content parsed as JSON and add job retries count
|
54
|
+
JSON.parse(content).merge(job_retries: job_retries)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
40
58
|
#
|
41
59
|
# Extract the number of times this task failed at runtime.
|
42
60
|
#
|
data/cloudtasker.gemspec
CHANGED
@@ -32,17 +32,18 @@ Gem::Specification.new do |spec|
|
|
32
32
|
|
33
33
|
spec.add_dependency 'activesupport'
|
34
34
|
spec.add_dependency 'fugit'
|
35
|
-
spec.add_dependency 'google-cloud-tasks'
|
35
|
+
spec.add_dependency 'google-cloud-tasks', '~> 1.0'
|
36
36
|
spec.add_dependency 'jwt'
|
37
37
|
spec.add_dependency 'redis'
|
38
38
|
|
39
39
|
spec.add_development_dependency 'appraisal'
|
40
40
|
spec.add_development_dependency 'bundler', '~> 2.0'
|
41
41
|
spec.add_development_dependency 'github_changelog_generator'
|
42
|
-
spec.add_development_dependency 'rake', '
|
42
|
+
spec.add_development_dependency 'rake', '>= 12.3.3'
|
43
43
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
44
44
|
spec.add_development_dependency 'rubocop', '0.76.0'
|
45
|
-
spec.add_development_dependency 'rubocop-rspec'
|
45
|
+
spec.add_development_dependency 'rubocop-rspec', '1.37.0'
|
46
|
+
spec.add_development_dependency 'semantic_logger'
|
46
47
|
spec.add_development_dependency 'timecop'
|
47
48
|
spec.add_development_dependency 'webmock'
|
48
49
|
|
data/gemfiles/rails_5.2.gemfile
CHANGED
data/gemfiles/rails_6.0.gemfile
CHANGED
data/lib/cloudtasker.rb
CHANGED
@@ -8,6 +8,7 @@ require 'cloudtasker/config'
|
|
8
8
|
require 'cloudtasker/authentication_error'
|
9
9
|
require 'cloudtasker/dead_worker_error'
|
10
10
|
require 'cloudtasker/invalid_worker_error'
|
11
|
+
require 'cloudtasker/max_task_size_exceeded_error'
|
11
12
|
|
12
13
|
require 'cloudtasker/middleware/chain'
|
13
14
|
require 'cloudtasker/authenticator'
|
@@ -82,6 +82,29 @@ module Cloudtasker
|
|
82
82
|
Google::Protobuf::Timestamp.new.tap { |e| e.seconds = schedule_time.to_i }
|
83
83
|
end
|
84
84
|
|
85
|
+
#
|
86
|
+
# Format the job payload sent to Cloud Tasks.
|
87
|
+
#
|
88
|
+
# @param [Hash] hash The worker payload.
|
89
|
+
#
|
90
|
+
# @return [Hash] The Cloud Task payloadd.
|
91
|
+
#
|
92
|
+
def self.format_task_payload(payload)
|
93
|
+
payload = JSON.parse(payload.to_json, symbolize_names: true) # deep dup
|
94
|
+
|
95
|
+
# Format schedule time to Google Protobuf timestamp
|
96
|
+
payload[:schedule_time] = format_schedule_time(payload[:schedule_time])
|
97
|
+
|
98
|
+
# Encode job content to support UTF-8. Google Cloud Task
|
99
|
+
# expect content to be ASCII-8BIT compatible (binary)
|
100
|
+
payload[:http_request][:headers] ||= {}
|
101
|
+
payload[:http_request][:headers][Cloudtasker::Config::CONTENT_TYPE_HEADER] = 'text/json'
|
102
|
+
payload[:http_request][:headers][Cloudtasker::Config::ENCODING_HEADER] = 'Base64'
|
103
|
+
payload[:http_request][:body] = Base64.encode64(payload[:http_request][:body])
|
104
|
+
|
105
|
+
payload
|
106
|
+
end
|
107
|
+
|
85
108
|
#
|
86
109
|
# Find a task by id.
|
87
110
|
#
|
@@ -104,10 +127,7 @@ module Cloudtasker
|
|
104
127
|
# @return [Cloudtasker::Backend::GoogleCloudTask, nil] The created task.
|
105
128
|
#
|
106
129
|
def self.create(payload)
|
107
|
-
|
108
|
-
payload = payload.merge(
|
109
|
-
schedule_time: format_schedule_time(payload[:schedule_time])
|
110
|
-
).compact
|
130
|
+
payload = format_task_payload(payload)
|
111
131
|
|
112
132
|
# Extract relative queue name
|
113
133
|
relative_queue = payload.delete(:queue)
|
@@ -126,7 +146,7 @@ module Cloudtasker
|
|
126
146
|
#
|
127
147
|
def self.delete(id)
|
128
148
|
client.delete_task(id)
|
129
|
-
rescue Google::Gax::RetryError
|
149
|
+
rescue Google::Gax::RetryError, GRPC::NotFound
|
130
150
|
nil
|
131
151
|
end
|
132
152
|
|
@@ -48,6 +48,8 @@ module Cloudtasker
|
|
48
48
|
# @return [Cloudtasker::CloudTask] The created task.
|
49
49
|
#
|
50
50
|
def self.create(payload)
|
51
|
+
raise MaxTaskSizeExceededError if payload.to_json.bytesize > Config::MAX_TASK_SIZE
|
52
|
+
|
51
53
|
resp = backend.create(payload)&.to_h
|
52
54
|
resp ? new(resp) : nil
|
53
55
|
end
|
data/lib/cloudtasker/config.rb
CHANGED
@@ -9,9 +9,21 @@ module Cloudtasker
|
|
9
9
|
attr_writer :secret, :gcp_location_id, :gcp_project_id,
|
10
10
|
:gcp_queue_prefix, :processor_path, :logger, :mode, :max_retries
|
11
11
|
|
12
|
+
# Max Cloud Task size in bytes
|
13
|
+
MAX_TASK_SIZE = 100 * 1024 # 100 KB
|
14
|
+
|
12
15
|
# Retry header in Cloud Task responses
|
13
16
|
RETRY_HEADER = 'X-CloudTasks-TaskExecutionCount'
|
14
17
|
|
18
|
+
# Content-Transfer-Encoding header in Cloud Task responses
|
19
|
+
ENCODING_HEADER = 'Content-Transfer-Encoding'
|
20
|
+
|
21
|
+
# Content Type
|
22
|
+
CONTENT_TYPE_HEADER = 'Content-Type'
|
23
|
+
|
24
|
+
# Authorization header
|
25
|
+
AUTHORIZATION_HEADER = 'Authorization'
|
26
|
+
|
15
27
|
# Default values
|
16
28
|
DEFAULT_LOCATION_ID = 'us-east1'
|
17
29
|
DEFAULT_PROCESSOR_PATH = '/cloudtasker/run'
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Cloudtasker
|
4
|
+
# Handle Cloud Task size quota
|
5
|
+
# See: https://cloud.google.com/appengine/quotas#Task_Queue
|
6
|
+
#
|
7
|
+
class MaxTaskSizeExceededError < StandardError
|
8
|
+
MSG = 'The size of Cloud Tasks must not exceed 100KB'
|
9
|
+
|
10
|
+
def initialize(msg = MSG)
|
11
|
+
super
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -8,13 +8,17 @@ module Cloudtasker
|
|
8
8
|
# Suffix added to cache keys when locking them
|
9
9
|
LOCK_KEY_PREFIX = 'cloudtasker/lock'
|
10
10
|
|
11
|
+
def self.client
|
12
|
+
@client ||= Redis.new(Cloudtasker.config.redis || {})
|
13
|
+
end
|
14
|
+
|
11
15
|
#
|
12
16
|
# Return the underlying redis client.
|
13
17
|
#
|
14
18
|
# @return [Redis] The redis client.
|
15
19
|
#
|
16
20
|
def client
|
17
|
-
@client ||=
|
21
|
+
@client ||= self.class.client
|
18
22
|
end
|
19
23
|
|
20
24
|
#
|
data/lib/cloudtasker/version.rb
CHANGED
@@ -42,8 +42,8 @@ module Cloudtasker
|
|
42
42
|
http_method: 'POST',
|
43
43
|
url: Cloudtasker.config.processor_url,
|
44
44
|
headers: {
|
45
|
-
|
46
|
-
|
45
|
+
Cloudtasker::Config::CONTENT_TYPE_HEADER => 'application/json',
|
46
|
+
Cloudtasker::Config::AUTHORIZATION_HEADER => "Bearer #{Authenticator.verification_token}"
|
47
47
|
},
|
48
48
|
body: worker_payload.to_json
|
49
49
|
},
|
@@ -141,7 +141,8 @@ module Cloudtasker
|
|
141
141
|
# @param [Proc] &block Optional context block.
|
142
142
|
#
|
143
143
|
def log_message(level, msg, &block)
|
144
|
-
|
144
|
+
# Merge log-specific context into worker-specific context
|
145
|
+
payload_block = ->(*_args) { log_block.call.merge(block&.call || {}) }
|
145
146
|
|
146
147
|
# ActiveSupport::Logger does not support passing a payload through a block on top
|
147
148
|
# of a message.
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cloudtasker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arnaud Lachaume
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-10-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -42,16 +42,16 @@ dependencies:
|
|
42
42
|
name: google-cloud-tasks
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
47
|
+
version: '1.0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
54
|
+
version: '1.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: jwt
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -126,16 +126,16 @@ dependencies:
|
|
126
126
|
name: rake
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- - "
|
129
|
+
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
131
|
+
version: 12.3.3
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- - "
|
136
|
+
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
138
|
+
version: 12.3.3
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: rspec
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -166,6 +166,20 @@ dependencies:
|
|
166
166
|
version: 0.76.0
|
167
167
|
- !ruby/object:Gem::Dependency
|
168
168
|
name: rubocop-rspec
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - '='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: 1.37.0
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - '='
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: 1.37.0
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: semantic_logger
|
169
183
|
requirement: !ruby/object:Gem::Requirement
|
170
184
|
requirements:
|
171
185
|
- - ">="
|
@@ -256,10 +270,10 @@ executables:
|
|
256
270
|
extensions: []
|
257
271
|
extra_rdoc_files: []
|
258
272
|
files:
|
273
|
+
- ".github/workflows/test.yml"
|
259
274
|
- ".gitignore"
|
260
275
|
- ".rspec"
|
261
276
|
- ".rubocop.yml"
|
262
|
-
- ".travis.yml"
|
263
277
|
- Appraisals
|
264
278
|
- CHANGELOG.md
|
265
279
|
- CODE_OF_CONDUCT.md
|
@@ -296,6 +310,11 @@ files:
|
|
296
310
|
- gemfiles/rails_5.2.gemfile.lock
|
297
311
|
- gemfiles/rails_6.0.gemfile
|
298
312
|
- gemfiles/rails_6.0.gemfile.lock
|
313
|
+
- gemfiles/semantic_logger_3.4.gemfile
|
314
|
+
- gemfiles/semantic_logger_4.6.gemfile
|
315
|
+
- gemfiles/semantic_logger_4.7.0.gemfile
|
316
|
+
- gemfiles/semantic_logger_4.7.2.gemfile
|
317
|
+
- gemfiles/semantic_logger_4.7.gemfile
|
299
318
|
- lib/cloudtasker.rb
|
300
319
|
- lib/cloudtasker/authentication_error.rb
|
301
320
|
- lib/cloudtasker/authenticator.rb
|
@@ -320,6 +339,7 @@ files:
|
|
320
339
|
- lib/cloudtasker/engine.rb
|
321
340
|
- lib/cloudtasker/invalid_worker_error.rb
|
322
341
|
- lib/cloudtasker/local_server.rb
|
342
|
+
- lib/cloudtasker/max_task_size_exceeded_error.rb
|
323
343
|
- lib/cloudtasker/meta_store.rb
|
324
344
|
- lib/cloudtasker/middleware/chain.rb
|
325
345
|
- lib/cloudtasker/redis_client.rb
|
@@ -367,8 +387,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
367
387
|
- !ruby/object:Gem::Version
|
368
388
|
version: '0'
|
369
389
|
requirements: []
|
370
|
-
|
371
|
-
rubygems_version: 2.7.9
|
390
|
+
rubygems_version: 3.0.0
|
372
391
|
signing_key:
|
373
392
|
specification_version: 4
|
374
393
|
summary: Background jobs for Ruby using Google Cloud Tasks (beta)
|
data/.travis.yml
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
---
|
2
|
-
language: ruby
|
3
|
-
cache: bundler
|
4
|
-
rvm:
|
5
|
-
- 2.5.5
|
6
|
-
services:
|
7
|
-
- redis-server
|
8
|
-
before_install: gem install bundler -v 2.0.2
|
9
|
-
before_script: bundle exec rubocop
|
10
|
-
gemfile:
|
11
|
-
- gemfiles/google_cloud_tasks_1.0.gemfile
|
12
|
-
- gemfiles/google_cloud_tasks_1.1.gemfile
|
13
|
-
- gemfiles/google_cloud_tasks_1.2.gemfile
|
14
|
-
- gemfiles/google_cloud_tasks_1.3.gemfile
|
15
|
-
- gemfiles/rails_5.2.gemfile
|
16
|
-
- gemfiles/rails_6.0.gemfile
|