exercism-config 0.121.0 → 0.122.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 +4 -4
- data/Gemfile +1 -1
- data/exercism_config.gemspec +2 -1
- data/lib/exercism/tooling_job.rb +28 -30
- data/lib/exercism.rb +8 -1
- data/lib/exercism_config/version.rb +1 -1
- data/settings/local.yml +1 -0
- metadata +20 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0badaae27183f7282803b34f5bfb6d895bc42a6a3f764bfde6f4cb65d4774668
|
4
|
+
data.tar.gz: d40701deb0ffc1e957190f1f91743936c30f57b86a5aa358e759cc5d907aa44c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 44ec8919fac9f687630db472fc90f1ed04fee755b03ab3fbcfe2f81a0eb7f22f118228e5b1021fd3487e48aa3aa843dd2d02807a2bf243604e27e18ec9d28796
|
7
|
+
data.tar.gz: 2fbfe06c7de202835378a40a84b430f8613ab53bd9e5af51551b1e7aeb14bde224a61f936cae6b3b041e290d5b34e62be6d7d4b6500c2ed3d0569f86ec9c63ab
|
data/Gemfile
CHANGED
data/exercism_config.gemspec
CHANGED
@@ -45,5 +45,6 @@ Gem::Specification.new do |spec|
|
|
45
45
|
spec.add_development_dependency 'aws-sdk-sesv2'
|
46
46
|
spec.add_development_dependency 'discourse_api'
|
47
47
|
spec.add_development_dependency 'opensearch-ruby', '2.1.0'
|
48
|
-
spec.add_development_dependency 'redis'
|
48
|
+
spec.add_development_dependency 'redis', '~> 5.1'
|
49
|
+
spec.add_development_dependency 'redis-clustering', '~> 5.1'
|
49
50
|
end
|
data/lib/exercism/tooling_job.rb
CHANGED
@@ -1,14 +1,22 @@
|
|
1
1
|
module Exercism
|
2
2
|
class ToolingJob
|
3
3
|
require 'aws-sdk-s3'
|
4
|
-
require 'redis'
|
5
4
|
|
6
5
|
extend Mandate::Memoize
|
7
6
|
|
8
|
-
def self.
|
7
|
+
def self.efs_job_path(job_id)
|
8
|
+
raise ArgumentError, "job_id must be at least 7 characters" if job_id.length < 7
|
9
|
+
|
10
|
+
[job_id[0..2], job_id[3..5], job_id[6..]].join('/')
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.efs_full_path(job_id)
|
14
|
+
[Exercism.config.efs_submissions_mount_point, efs_job_path(job_id)].join('/')
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.create!(job_id, type, submission_uuid, language, exercise,
|
9
18
|
run_in_background: false,
|
10
19
|
**data)
|
11
|
-
job_id = SecureRandom.uuid.tr('-', '')
|
12
20
|
data.merge!(
|
13
21
|
id: job_id,
|
14
22
|
submission_uuid:,
|
@@ -20,14 +28,10 @@ module Exercism
|
|
20
28
|
|
21
29
|
queue_key = run_in_background ? key_for_queued_for_background_processing : key_for_queued
|
22
30
|
redis = Exercism.redis_tooling_client
|
23
|
-
redis.
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
)
|
28
|
-
transaction.rpush(queue_key, job_id)
|
29
|
-
transaction.set("submission:#{submission_uuid}:#{type}", job_id)
|
30
|
-
end
|
31
|
+
redis.set("job:#{job_id}", data.to_json)
|
32
|
+
redis.set("submission:#{submission_uuid}:#{type}", job_id)
|
33
|
+
redis.rpush(queue_key, job_id)
|
34
|
+
|
31
35
|
new(job_id, data)
|
32
36
|
end
|
33
37
|
|
@@ -78,24 +82,22 @@ module Exercism
|
|
78
82
|
transaction.lrem(key_for_queued, 1, id)
|
79
83
|
transaction.lrem(key_for_locked, 1, id)
|
80
84
|
transaction.rpush(key_for_executed, id)
|
81
|
-
|
82
|
-
transaction.set(
|
83
|
-
"job:#{id}",
|
84
|
-
data.merge(
|
85
|
-
execution_status: status,
|
86
|
-
execution_output: output
|
87
|
-
).to_json
|
88
|
-
)
|
89
85
|
end
|
86
|
+
|
87
|
+
redis.set(
|
88
|
+
"job:#{id}",
|
89
|
+
data.merge(
|
90
|
+
execution_status: status,
|
91
|
+
execution_output: output
|
92
|
+
).to_json
|
93
|
+
)
|
90
94
|
end
|
91
95
|
|
92
96
|
def processed!
|
93
97
|
redis = Exercism.redis_tooling_client
|
94
|
-
redis.
|
95
|
-
|
96
|
-
|
97
|
-
transaction.del("submission:#{data[:submission_uuid]}:#{data[:type]}")
|
98
|
-
end
|
98
|
+
redis.lrem(key_for_executed, 1, id)
|
99
|
+
redis.del("job:#{id}")
|
100
|
+
redis.del("submission:#{data[:submission_uuid]}:#{data[:type]}")
|
99
101
|
end
|
100
102
|
|
101
103
|
def cancelled!
|
@@ -158,14 +160,10 @@ module Exercism
|
|
158
160
|
end
|
159
161
|
|
160
162
|
memoize
|
161
|
-
def s3_folder
|
162
|
-
"#{Exercism.env}/#{id}"
|
163
|
-
end
|
163
|
+
def s3_folder = "#{Exercism.env}/#{id}"
|
164
164
|
|
165
165
|
memoize
|
166
|
-
def s3_bucket_name
|
167
|
-
Exercism.config.aws_tooling_jobs_bucket
|
168
|
-
end
|
166
|
+
def s3_bucket_name = Exercism.config.aws_tooling_jobs_bucket
|
169
167
|
|
170
168
|
%w[queued queued_for_background_processing locked executed cancelled].each do |key|
|
171
169
|
ToolingJob.singleton_class.class_eval do
|
data/lib/exercism.rb
CHANGED
@@ -14,7 +14,14 @@ module Exercism
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def self.redis_tooling_client
|
17
|
-
|
17
|
+
require 'redis'
|
18
|
+
require 'redis-clustering'
|
19
|
+
|
20
|
+
if Exercism.env.development? || Exercism.env.test?
|
21
|
+
Redis.new(url: config.tooling_redis_url)
|
22
|
+
else
|
23
|
+
Redis::Cluster.new(nodes: [config.tooling_redis_url])
|
24
|
+
end
|
18
25
|
end
|
19
26
|
|
20
27
|
def self.dynamodb_client
|
data/settings/local.yml
CHANGED
@@ -41,6 +41,7 @@ sidekiq_redis_url: redis://127.0.0.1:6379/2
|
|
41
41
|
# EFS Config
|
42
42
|
efs_submissions_mount_point: "/opt/exercism/efs/submissions"
|
43
43
|
efs_repositories_mount_point: "/opt/exercism/efs/repos"
|
44
|
+
efs_cache_mount_point: "/opt/exercism/efs/cache"
|
44
45
|
|
45
46
|
# GitHub Config
|
46
47
|
github_organization: fake-exercism
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: exercism-config
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.122.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Walker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-06-
|
11
|
+
date: 2025-06-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-dynamodb
|
@@ -224,16 +224,30 @@ dependencies:
|
|
224
224
|
name: redis
|
225
225
|
requirement: !ruby/object:Gem::Requirement
|
226
226
|
requirements:
|
227
|
-
- - "
|
227
|
+
- - "~>"
|
228
228
|
- !ruby/object:Gem::Version
|
229
|
-
version: '
|
229
|
+
version: '5.1'
|
230
230
|
type: :development
|
231
231
|
prerelease: false
|
232
232
|
version_requirements: !ruby/object:Gem::Requirement
|
233
233
|
requirements:
|
234
|
-
- - "
|
234
|
+
- - "~>"
|
235
235
|
- !ruby/object:Gem::Version
|
236
|
-
version: '
|
236
|
+
version: '5.1'
|
237
|
+
- !ruby/object:Gem::Dependency
|
238
|
+
name: redis-clustering
|
239
|
+
requirement: !ruby/object:Gem::Requirement
|
240
|
+
requirements:
|
241
|
+
- - "~>"
|
242
|
+
- !ruby/object:Gem::Version
|
243
|
+
version: '5.1'
|
244
|
+
type: :development
|
245
|
+
prerelease: false
|
246
|
+
version_requirements: !ruby/object:Gem::Requirement
|
247
|
+
requirements:
|
248
|
+
- - "~>"
|
249
|
+
- !ruby/object:Gem::Version
|
250
|
+
version: '5.1'
|
237
251
|
description:
|
238
252
|
email:
|
239
253
|
- jez.walker@gmail.com
|