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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2b06b277dbe5a3cafe79727af6655505e8152ff1902010e91325c9c711e19aa9
4
- data.tar.gz: dcdc8d9a46f0ca084690be6c693a785117c3d1ec0c5bc36b099f4bb5575e8a77
3
+ metadata.gz: 0badaae27183f7282803b34f5bfb6d895bc42a6a3f764bfde6f4cb65d4774668
4
+ data.tar.gz: d40701deb0ffc1e957190f1f91743936c30f57b86a5aa358e759cc5d907aa44c
5
5
  SHA512:
6
- metadata.gz: 7a5eab9d7b45b3db98cbda0505ff5b5e8dbac09b887cf332b41d04eec0bd15f590d6d24304aa55fd275299ae4ee4cb1785b6bd48730b85b4334fc1b63b02d06d
7
- data.tar.gz: 558c8bd45134feaf94a8da9308533880723fe32f4acb333aa12ba8b062b4122da89d19a5785c74a4b5e372f3d842c367b169fc1a324f60dfa98331109e8a60e2
6
+ metadata.gz: 44ec8919fac9f687630db472fc90f1ed04fee755b03ab3fbcfe2f81a0eb7f22f118228e5b1021fd3487e48aa3aa843dd2d02807a2bf243604e27e18ec9d28796
7
+ data.tar.gz: 2fbfe06c7de202835378a40a84b430f8613ab53bd9e5af51551b1e7aeb14bde224a61f936cae6b3b041e290d5b34e62be6d7d4b6500c2ed3d0569f86ec9c63ab
data/Gemfile CHANGED
@@ -11,4 +11,4 @@ gem 'rubocop'
11
11
  gem 'rubocop-minitest'
12
12
  gem 'rubocop-performance'
13
13
 
14
- gem 'octokit'
14
+ gem 'octokit'
@@ -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
@@ -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.create!(type, submission_uuid, language, exercise,
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.multi do |transaction|
24
- transaction.set(
25
- "job:#{job_id}",
26
- data.to_json
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.multi do |transaction|
95
- transaction.lrem(key_for_executed, 1, id)
96
- transaction.del("job:#{id}")
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
- Redis.new(url: config.tooling_redis_url)
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
@@ -1,3 +1,3 @@
1
1
  module ExercismConfig
2
- VERSION = '0.121.0'.freeze
2
+ VERSION = '0.122.0'.freeze
3
3
  end
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.121.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-04 00:00:00.000000000 Z
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: '0'
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: '0'
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