souls 1.16.4 → 1.17.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/souls/cli/create/functions.rb +1 -1
- data/lib/souls/cli/create/index.rb +27 -27
- data/lib/souls/cli/github/index.rb +1 -2
- data/lib/souls/cli/sync/pubsub.rb +39 -49
- data/lib/souls/version.rb +1 -1
- data/lib/souls/versions/.souls_api_version +1 -1
- data/lib/souls/versions/.souls_worker_version +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f4cc729425eab2ed36694f36ccf139073767e24704cf28ca9aacf29667e1eb3e
|
4
|
+
data.tar.gz: 6966f1f77c229a66e38b8cf3466ae7677f0c56256094871b659bf1cee6f8e694
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 79ee3df57517aa7342591da910fe7b853bde51819070cb4c0aae49c972e3500b194f50ccf1b3e8e33f36af733503c5a6c8d7217698a7809f76a5125ed5ac1e9a
|
7
|
+
data.tar.gz: fdeb3916a7cd4449254fe9c0e2d4d76fe627c8784af93b1d9ce6ada36b1fb1f061b22bf2aa39cbb24724534340588cecb145b09f32bb761543a267457f86107c
|
@@ -1,36 +1,36 @@
|
|
1
1
|
require_relative "./functions"
|
2
2
|
module Souls
|
3
3
|
class Create < Thor
|
4
|
-
desc "worker", "Create SOULs Worker"
|
5
|
-
|
6
|
-
def worker
|
4
|
+
desc "worker [name]", "Create SOULs Worker"
|
5
|
+
def worker(name)
|
7
6
|
require("#{Souls.get_mother_path}/config/souls")
|
8
7
|
Dir.chdir(Souls.get_mother_path.to_s) do
|
9
|
-
|
8
|
+
worker_name = "worker-#{name}"
|
9
|
+
file_dir = "apps/worker-#{name}"
|
10
10
|
raise(StandardError, "Same Worker Already Exist!") if Dir.exist?(file_dir)
|
11
11
|
|
12
12
|
workers = Souls.configuration.workers
|
13
13
|
app = Souls.configuration.app
|
14
14
|
port = 3000 + workers.size
|
15
|
-
souls_worker_name = "souls-#{app}-#{
|
16
|
-
download_worker(worker_name:
|
15
|
+
souls_worker_name = "souls-#{app}-#{worker_name}"
|
16
|
+
download_worker(worker_name: worker_name)
|
17
17
|
souls_conf_update(worker_name: souls_worker_name)
|
18
18
|
souls_conf_update(worker_name: souls_worker_name, strain: "api")
|
19
|
-
workflow(worker_name:
|
20
|
-
procfile(worker_name:
|
21
|
-
mother_procfile(worker_name:
|
22
|
-
souls_config_init(worker_name:
|
23
|
-
steepfile(worker_name:
|
24
|
-
souls_helper_rbs(worker_name:
|
25
|
-
system("cd
|
26
|
-
souls_worker_credit(worker_name:
|
19
|
+
workflow(worker_name: worker_name)
|
20
|
+
procfile(worker_name: worker_name, port: port)
|
21
|
+
mother_procfile(worker_name: worker_name)
|
22
|
+
souls_config_init(worker_name: worker_name)
|
23
|
+
steepfile(worker_name: worker_name)
|
24
|
+
souls_helper_rbs(worker_name: worker_name)
|
25
|
+
system("cd #{file_dir} && bundle")
|
26
|
+
souls_worker_credit(worker_name: worker_name)
|
27
27
|
end
|
28
28
|
true
|
29
29
|
end
|
30
30
|
|
31
31
|
private
|
32
32
|
|
33
|
-
def steepfile(worker_name: "mailer")
|
33
|
+
def steepfile(worker_name: "worker-mailer")
|
34
34
|
file_path = "./Steepfile"
|
35
35
|
|
36
36
|
write_txt = ""
|
@@ -49,21 +49,21 @@ module Souls
|
|
49
49
|
File.open(file_path, "w") { |f| f.write(write_txt) }
|
50
50
|
end
|
51
51
|
|
52
|
-
def procfile(worker_name: "mailer", port: 123)
|
52
|
+
def procfile(worker_name: "worker-mailer", port: 123)
|
53
53
|
file_path = "apps/#{worker_name}/Procfile.dev"
|
54
54
|
File.open(file_path, "w") do |f|
|
55
55
|
f.write("#{worker_name}: bundle exec puma -p #{port} -e development")
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
-
def mother_procfile(worker_name: "mailer")
|
59
|
+
def mother_procfile(worker_name: "worker-mailer")
|
60
60
|
file_path = "Procfile.dev"
|
61
61
|
File.open(file_path, "a") do |f|
|
62
62
|
f.write("\n#{worker_name}: foreman start -f ./apps/#{worker_name}/Procfile.dev")
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
|
-
def souls_conf_update(worker_name: "mailer", strain: "mother")
|
66
|
+
def souls_conf_update(worker_name: "worker-mailer", strain: "mother")
|
67
67
|
workers = Souls.configuration.workers
|
68
68
|
port = 3000 + workers.size
|
69
69
|
file_path = strain == "mother" ? "config/souls.rb" : "apps/api/config/souls.rb"
|
@@ -84,7 +84,6 @@ module Souls
|
|
84
84
|
write_txt += <<-TEXT
|
85
85
|
{
|
86
86
|
name: "#{worker[:name]}",
|
87
|
-
endpoint: "#{worker[:endpoint]}",
|
88
87
|
port: #{worker[:port]}
|
89
88
|
},
|
90
89
|
TEXT
|
@@ -95,7 +94,6 @@ module Souls
|
|
95
94
|
write_txt += <<-TEXT
|
96
95
|
{
|
97
96
|
name: "#{worker_name}",
|
98
|
-
endpoint: "",
|
99
97
|
port: #{port}
|
100
98
|
}
|
101
99
|
]
|
@@ -105,12 +103,11 @@ end
|
|
105
103
|
File.open(file_path, "w") { |f| f.write(write_txt) }
|
106
104
|
end
|
107
105
|
|
108
|
-
def workflow(worker_name: "mailer")
|
106
|
+
def workflow(worker_name: "worker-mailer")
|
109
107
|
file_dir = ".github/workflows"
|
110
108
|
FileUtils.mkdir_p(file_dir) unless Dir.exist?(file_dir)
|
111
109
|
file_path = "#{file_dir}/#{worker_name}.yml"
|
112
|
-
|
113
|
-
worker_name_camelize = worker_name.camelize
|
110
|
+
worker_name_camelize = worker_name.gsub("-", "_").camelize
|
114
111
|
File.open(file_path, "w") do |f|
|
115
112
|
f.write(<<~TEXT)
|
116
113
|
name: #{worker_name_camelize}
|
@@ -176,6 +173,9 @@ end
|
|
176
173
|
- name: Sync Tasks
|
177
174
|
run: cd apps/#{worker_name} && souls gcloud scheduler sync_schedules --timezone=${{ secrets.TZ }}
|
178
175
|
|
176
|
+
- name: Sync PubSub
|
177
|
+
run: cd apps/#{worker_name} && souls sync pubsub
|
178
|
+
|
179
179
|
- name: Configure Docker
|
180
180
|
run: gcloud auth configure-docker --quiet
|
181
181
|
|
@@ -210,7 +210,7 @@ end
|
|
210
210
|
file_path
|
211
211
|
end
|
212
212
|
|
213
|
-
def souls_config_init(worker_name: "mailer")
|
213
|
+
def souls_config_init(worker_name: "worker-mailer")
|
214
214
|
app_name = Souls.configuration.app
|
215
215
|
project_id = Souls.configuration.project_id
|
216
216
|
config_dir = "apps/#{worker_name}/config"
|
@@ -232,7 +232,7 @@ end
|
|
232
232
|
end
|
233
233
|
end
|
234
234
|
|
235
|
-
def souls_helper_rbs(worker_name: "mailer")
|
235
|
+
def souls_helper_rbs(worker_name: "worker-mailer")
|
236
236
|
file_dir = "./sig/#{worker_name}/app/utils"
|
237
237
|
FileUtils.mkdir_p(file_dir) unless Dir.exist?(file_dir)
|
238
238
|
file_path = "#{file_dir}/souls_helper.rbs"
|
@@ -273,7 +273,7 @@ end
|
|
273
273
|
end
|
274
274
|
end
|
275
275
|
|
276
|
-
def download_worker(worker_name: "mailer")
|
276
|
+
def download_worker(worker_name: "worker-mailer")
|
277
277
|
version = Souls.get_latest_version_txt(service_name: "worker").join(".")
|
278
278
|
file_name = "worker-v#{version}.tgz"
|
279
279
|
url = "https://storage.googleapis.com/souls-bucket/boilerplates/workers/#{file_name}"
|
@@ -285,7 +285,7 @@ end
|
|
285
285
|
FileUtils.rm_f(file_name)
|
286
286
|
end
|
287
287
|
|
288
|
-
def souls_worker_credit(worker_name: "mailer")
|
288
|
+
def souls_worker_credit(worker_name: "worker-mailer")
|
289
289
|
line = Paint["====================================", :yellow]
|
290
290
|
puts("\n")
|
291
291
|
puts(line)
|
@@ -89,8 +89,7 @@ module Souls
|
|
89
89
|
|
90
90
|
def update_workers_env(key:, value:, dqm: false)
|
91
91
|
Dir.chdir(Souls.get_mother_path.to_s) do
|
92
|
-
workers = Dir["apps
|
93
|
-
workers.delete("apps/api")
|
92
|
+
workers = Dir["apps/worker-*"]
|
94
93
|
workers.each do |worker_path|
|
95
94
|
file_path = "#{worker_path}/.env"
|
96
95
|
File.open(file_path, "a") do |line|
|
@@ -1,37 +1,38 @@
|
|
1
1
|
module Souls
|
2
2
|
class Sync < Thor
|
3
|
-
desc "pubsub", "Sync Worker Jobs & Google Cloud Pubsub Subscriptions"
|
3
|
+
desc "pubsub", "Sync Worker Jobs & Google Cloud Pubsub Topics/Subscriptions"
|
4
4
|
def pubsub
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
worker_name = FileUtils.pwd.split("/").last
|
6
|
+
|
7
|
+
unless worker_name.match(/^worker-(\d|\w)+(-)*(\d|\w)+$/)
|
8
|
+
Souls::Painter.error("You are at wrong dir!\nPlease go to worker-* dir!")
|
9
|
+
return false
|
10
|
+
end
|
11
|
+
|
12
|
+
url = `gcloud run services list |grep souls-#{project_id}-#{worker_name}| awk '{print $4}'`.strip
|
13
|
+
return false if url.blank?
|
14
|
+
|
15
|
+
worker_file_names = get_workers_file_paths
|
16
|
+
return false if worker_file_names.blank?
|
17
|
+
|
18
|
+
sync_pubsub_topics_and_subscriptions(workers: worker_file_names, worker_url: url)
|
8
19
|
Souls::Painter.sync("All Jobs with PubSub Subscription!")
|
9
20
|
end
|
10
21
|
|
11
22
|
private
|
12
23
|
|
13
|
-
def
|
14
|
-
require("#{Souls.get_mother_path}/config/souls")
|
15
|
-
worker_paths = Souls.configuration.workers
|
16
|
-
worker_paths.each do |worker|
|
17
|
-
endpoint = worker[:endpoint]
|
18
|
-
unless endpoint.include?("https://")
|
19
|
-
raise(StandardError, "You need to set endpoint.\nPlease Run:\n\n$ souls sync conf\n\n")
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def get_topics(workers: {})
|
24
|
+
def sync_pubsub_topics_and_subscriptions(worker_url:, workers: {})
|
25
25
|
project_id = Souls.configuration.project_id
|
26
26
|
pubsub = Google::Cloud::Pubsub.new(project_id: project_id)
|
27
27
|
topics = pubsub.topics
|
28
|
+
worker_name = FileUtils.pwd.split("/").last
|
28
29
|
|
29
30
|
topic_names =
|
30
31
|
topics.map do |topic|
|
31
32
|
topic.name.gsub("projects/#{project_id}/topics/", "")
|
32
33
|
end
|
33
34
|
|
34
|
-
souls_topics = topic_names.select { |n| n.include?("
|
35
|
+
souls_topics = topic_names.select { |n| n.include?("souls-#{worker_name}") }
|
35
36
|
|
36
37
|
souls_topics.each do |name|
|
37
38
|
value = workers[name.to_sym] || 0
|
@@ -39,24 +40,25 @@ module Souls
|
|
39
40
|
end
|
40
41
|
|
41
42
|
workers.each do |key, value|
|
43
|
+
topic_id = key.to_s.gsub("_", "-")
|
42
44
|
if value == 1
|
43
|
-
create_topic(topic_id:
|
44
|
-
create_push_subscription(topic_id:
|
45
|
+
create_topic(topic_id: topic_id)
|
46
|
+
create_push_subscription(worker_url: worker_url, topic_id: topic_id)
|
45
47
|
end
|
46
|
-
delete_topic(topic_id:
|
47
|
-
delete_subscription(topic_id:
|
48
|
+
delete_topic(topic_id: topic_id) if value == -1
|
49
|
+
delete_subscription(topic_id: topic_id) if value == -1
|
48
50
|
end
|
49
51
|
workers
|
50
52
|
end
|
51
53
|
|
52
|
-
def create_topic(topic_id: "mailer")
|
54
|
+
def create_topic(topic_id: "worker-mailer")
|
53
55
|
project_id = Souls.configuration.project_id
|
54
56
|
pubsub = Google::Cloud::Pubsub.new(project_id: project_id)
|
55
57
|
topic = pubsub.create_topic(topic_id.to_s)
|
56
58
|
puts("Topic #{topic.name} created.")
|
57
59
|
end
|
58
60
|
|
59
|
-
def delete_topic(topic_id: "mailer")
|
61
|
+
def delete_topic(topic_id: "worker-mailer")
|
60
62
|
project_id = Souls.configuration.project_id
|
61
63
|
pubsub = Google::Cloud::Pubsub.new(project_id: project_id)
|
62
64
|
topic = pubsub.topic(topic_id.to_s)
|
@@ -64,25 +66,18 @@ module Souls
|
|
64
66
|
puts("Topic #{topic_id} deleted.")
|
65
67
|
end
|
66
68
|
|
67
|
-
def delete_subscription(topic_id: "mailer")
|
69
|
+
def delete_subscription(topic_id: "worker-mailer")
|
68
70
|
project_id = Souls.configuration.project_id
|
69
71
|
pubsub = Google::Cloud::Pubsub.new(project_id: project_id)
|
70
|
-
subscription_id = "#{topic_id}
|
72
|
+
subscription_id = "#{topic_id}-sub"
|
71
73
|
subscription = pubsub.subscription(subscription_id)
|
72
74
|
subscription.delete
|
73
75
|
end
|
74
76
|
|
75
|
-
def create_push_subscription(topic_id: "mailer")
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
subscription_id = "#{topic_id}_sub"
|
81
|
-
endpoint = ""
|
82
|
-
worker_paths = Souls.configuration.workers
|
83
|
-
worker_paths.each do |worker|
|
84
|
-
endpoint = worker[:endpoint] if worker[:name] == "souls-#{app}-#{worker_name}"
|
85
|
-
end
|
77
|
+
def create_push_subscription(worker_url:, topic_id: "worker-mailer")
|
78
|
+
souls_endpoint = Souls.configuration.endpoint
|
79
|
+
subscription_id = "#{topic_id}-sub"
|
80
|
+
endpoint = "#{worker_url}/#{souls_endpoint}"
|
86
81
|
|
87
82
|
project_id = Souls.configuration.project_id
|
88
83
|
pubsub = Google::Cloud::Pubsub.new(project_id: project_id)
|
@@ -93,21 +88,16 @@ module Souls
|
|
93
88
|
puts("Push subscription #{subscription_id} created.")
|
94
89
|
end
|
95
90
|
|
96
|
-
def
|
97
|
-
|
98
|
-
worker_paths = Souls.configuration.workers.map { |n| n[:name].split("-").last }
|
91
|
+
def get_workers_file_paths
|
92
|
+
worker_name = FileUtils.pwd.split("/").last
|
99
93
|
response = {}
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
Dir["apps/#{worker}/app/graphql/queries/*.rb"].map do |file|
|
104
|
-
file.gsub("apps/#{worker}/app/graphql/queries/", "").gsub(".rb", "")
|
105
|
-
end
|
106
|
-
workers.delete("base_query")
|
107
|
-
workers.each do |file|
|
108
|
-
response[:"souls_#{worker}_#{file}"] = 1
|
109
|
-
end
|
94
|
+
workers =
|
95
|
+
Dir["app/graphql/queries/*.rb"].map do |file|
|
96
|
+
file.split("/").last.gsub(".rb", "")
|
110
97
|
end
|
98
|
+
workers.delete("base_query")
|
99
|
+
workers.each do |file|
|
100
|
+
response[:"souls_#{worker_name}_#{file}"] = 1
|
111
101
|
end
|
112
102
|
response
|
113
103
|
end
|
data/lib/souls/version.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.17.0
|
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.17.0
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: souls
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.17.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- POPPIN-FUMI
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2022-01-
|
13
|
+
date: 2022-01-05 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|