souls 1.19.3 → 1.19.7
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/lib/souls/app/utils/painter.rb +18 -6
- data/lib/souls/cli/create/templates/go/function.rb +1 -2
- data/lib/souls/cli/create/templates/nodejs/index.rb +1 -2
- data/lib/souls/cli/create/templates/python/main.rb +1 -2
- data/lib/souls/cli/gcloud/iam/index.rb +21 -16
- data/lib/souls/cli/gcloud/index.rb +2 -0
- data/lib/souls/cli/gcloud/sql/index.rb +50 -33
- data/lib/souls/cli/sync/index.rb +0 -1
- data/lib/souls/cli/sync/pubsub.rb +28 -18
- 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
- data/lib/souls.rb +1 -0
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7397cc9eb56f0420edff1764b05af2411bc28df50fcaacf53e1babc6af2531d1
|
4
|
+
data.tar.gz: fb3283fb3e09e06e1e37f00870f9d9f577fac509cd2564d2f97cf9be0d614f37
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c164ae100be15a59717e16d991f8fb4ce3520eca314a16d3e82dfd6f54b87eed01ea99efd56a86e8d6a68cedc9999b103713696ae06f395f8898597ccd2b34f
|
7
|
+
data.tar.gz: ecbb2177e6ba224cea34fba5b8f7af6951c8dbfdc49a45e60f33d3df7e60fb7c9c6b3051733cba703c784e6af4fcc43d5f173c60afd56350c4b3b653cb8d4f50
|
@@ -13,16 +13,28 @@ module SOULs
|
|
13
13
|
puts(Paint % ["✓ %{white_text}", :red, { white_text: ["Deleted file #{text}", :white] }])
|
14
14
|
end
|
15
15
|
|
16
|
-
def error(text)
|
17
|
-
|
16
|
+
def error(text, emoji = nil)
|
17
|
+
if emoji
|
18
|
+
puts(Paint["#{emoji} #{text}", :red])
|
19
|
+
else
|
20
|
+
puts(Paint["🚨 #{text}", :red])
|
21
|
+
end
|
18
22
|
end
|
19
23
|
|
20
|
-
def warning(text)
|
21
|
-
|
24
|
+
def warning(text, emoji = nil)
|
25
|
+
if emoji
|
26
|
+
puts(Paint["#{emoji} #{text}", :yellow])
|
27
|
+
else
|
28
|
+
puts(Paint["🚨 #{text}", :yellow])
|
29
|
+
end
|
22
30
|
end
|
23
31
|
|
24
|
-
def success(text)
|
25
|
-
|
32
|
+
def success(text, emoji = nil)
|
33
|
+
if emoji
|
34
|
+
puts(Paint["#{emoji} #{text}", :green])
|
35
|
+
else
|
36
|
+
puts(Paint["🎉 #{text}", :green])
|
37
|
+
end
|
26
38
|
end
|
27
39
|
|
28
40
|
def sync(text)
|
@@ -1,7 +1,6 @@
|
|
1
1
|
module Template
|
2
2
|
module Go
|
3
3
|
def self.function(file_name)
|
4
|
-
file_name.underscore.camelize
|
5
4
|
<<~APP
|
6
5
|
// Package p contains an HTTP Cloud Function.
|
7
6
|
package p
|
@@ -17,7 +16,7 @@ module Template
|
|
17
16
|
|
18
17
|
// HelloWorld prints the JSON encoded "message" field in the body
|
19
18
|
// of the request or "Hello, World!" if there isn't one.
|
20
|
-
func #{file_name}(w http.ResponseWriter, r *http.Request) {
|
19
|
+
func #{file_name.underscore.camelize}(w http.ResponseWriter, r *http.Request) {
|
21
20
|
var d struct {
|
22
21
|
Message string `json:"message"`
|
23
22
|
}
|
@@ -1,7 +1,6 @@
|
|
1
1
|
module Template
|
2
2
|
module Nodejs
|
3
3
|
def self.index(file_name)
|
4
|
-
file_name.underscore.camelize(:lower)
|
5
4
|
<<~APP
|
6
5
|
const express = require('express');
|
7
6
|
const bodyParser = require('body-parser');
|
@@ -20,7 +19,7 @@ module Template
|
|
20
19
|
app.post('/souls-functions-post', (req, res)=>{
|
21
20
|
res.json(req.body)
|
22
21
|
});
|
23
|
-
exports.#{file_name} = app;
|
22
|
+
exports.#{file_name.underscore.camelize(:lower)} = app;
|
24
23
|
APP
|
25
24
|
end
|
26
25
|
end
|
@@ -2,23 +2,28 @@ module SOULs
|
|
2
2
|
class Iam < Thor
|
3
3
|
desc "setup_key", "Create Google Cloud IAM Service Account Key And Set All Permissions"
|
4
4
|
def setup_key
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
5
|
+
Whirly.start(spinner: "clock", interval: 420, stop: "🎉") do
|
6
|
+
Whirly.status = "Setting up credentials and permissions..."
|
7
|
+
region = SOULs.configuration.region
|
8
|
+
SOULs::Gcloud.new.auth_login
|
9
|
+
SOULs::Upgrade.new.config
|
10
|
+
create_service_account
|
11
|
+
create_service_account_key
|
12
|
+
SOULs::Gcloud.new.enable_permissions
|
13
|
+
add_permissions
|
14
|
+
begin
|
15
|
+
system("gcloud app create --region=#{region} --quiet")
|
16
|
+
rescue StandardError, error
|
17
|
+
puts("gcloud app region is Already exist! - SOULs::Gcloud::Iam.setup_key")
|
18
|
+
end
|
19
|
+
begin
|
20
|
+
set_gh_secret_json
|
21
|
+
rescue StandardError
|
22
|
+
export_key_to_console
|
23
|
+
end
|
21
24
|
end
|
25
|
+
SOULs::Painter.success("You're all set!")
|
26
|
+
true
|
22
27
|
end
|
23
28
|
|
24
29
|
private
|
@@ -62,6 +62,8 @@ module SOULs
|
|
62
62
|
system("gcloud services enable cloudresourcemanager.googleapis.com")
|
63
63
|
system("gcloud services enable translate.googleapis.com")
|
64
64
|
system("gcloud services enable firestore.googleapis.com")
|
65
|
+
system("gcloud services enable cloudfunctions.googleapis.com")
|
66
|
+
system("gcloud services enable cloudbuild.googleapis.com")
|
65
67
|
end
|
66
68
|
end
|
67
69
|
end
|
@@ -6,7 +6,6 @@ module SOULs
|
|
6
6
|
def create_instance
|
7
7
|
prompt = TTY::Prompt.new
|
8
8
|
password = prompt.mask("Set DB PassWord:")
|
9
|
-
app_name = SOULs.configuration.app
|
10
9
|
project_id = SOULs.configuration.project_id
|
11
10
|
instance_name = SOULs.configuration.instance_name
|
12
11
|
region = SOULs.configuration.region if options[:region].blank?
|
@@ -20,43 +19,57 @@ module SOULs
|
|
20
19
|
--database-version=#{db_type} --cpu=1 --memory=4096MB --zone=#{zone} \
|
21
20
|
--root-password='#{password}' --database-flags cloudsql.iam_authentication=on"
|
22
21
|
)
|
23
|
-
|
24
|
-
Dir.chdir(SOULs.get_api_path.to_s) do
|
25
|
-
file_path = ".env"
|
26
|
-
File.open(file_path, "w") do |line|
|
27
|
-
line.write(<<~TEXT)
|
28
|
-
GOOGLE_AUTH_SUPPRESS_CREDENTIALS_WARNINGS=1
|
29
|
-
SOULS_DB_HOST=#{instance_ip}
|
30
|
-
SOULS_DB_PW=#{password}
|
31
|
-
SOULS_DB_USER=postgres
|
32
|
-
SOULS_GCP_PROJECT_ID=#{project_id}
|
33
|
-
SOULS_SECRET_KEY_BASE='#{SecureRandom.base64(64)}'
|
34
|
-
TZ="#{region_to_timezone(region: region)}"
|
35
|
-
TEXT
|
36
|
-
end
|
37
|
-
end
|
38
|
-
Dir.chdir(SOULs.get_mother_path.to_s) do
|
39
|
-
file_path = ".env.production"
|
40
|
-
File.open(file_path, "w") do |line|
|
41
|
-
line.write(<<~TEXT)
|
42
|
-
SOULS_DB_HOST="/cloudsql/#{project_id}:#{region}:#{instance_name}"
|
43
|
-
SOULS_DB_PW=#{password}
|
44
|
-
SOULS_DB_USER=postgres
|
45
|
-
SOULS_APP_NAME=#{app_name}
|
46
|
-
SOULS_GCP_PROJECT_ID=#{project_id}
|
47
|
-
SOULS_GCP_REGION=#{region}
|
48
|
-
SOULS_GCLOUDSQL_INSTANCE="#{project_id}:#{region}:#{instance_name}"
|
49
|
-
SOULS_SECRET_KEY_BASE='#{SecureRandom.base64(64)}'
|
50
|
-
TZ="#{region_to_timezone(region: region)}"
|
51
|
-
TEXT
|
52
|
-
end
|
53
|
-
end
|
22
|
+
SOULs::Sql.new.env(password: password)
|
54
23
|
SOULs::Github.new.secret_set
|
55
24
|
Whirly.status = Paint["Cloud SQL #{instance_name} is successfully created! You can push to deploy!", :green]
|
56
25
|
end
|
57
26
|
true
|
58
27
|
end
|
59
28
|
|
29
|
+
desc "env", "Generate .env.production file to deploy"
|
30
|
+
def env(password: "Password")
|
31
|
+
require(SOULs.get_mother_path.to_s + "/config/souls")
|
32
|
+
project_id = SOULs.configuration.project_id
|
33
|
+
instance_name = SOULs.configuration.instance_name
|
34
|
+
region = SOULs.configuration.region
|
35
|
+
app_name = SOULs.configuration.app
|
36
|
+
prompt = TTY::Prompt.new
|
37
|
+
db_password = password == "Password" ? prompt.mask("Set DB PassWord:") : password
|
38
|
+
instance_ip = `gcloud sql instances list --project=#{project_id} | grep #{instance_name} | awk '{print $5}'`.strip
|
39
|
+
Dir.chdir(SOULs.get_api_path.to_s) do
|
40
|
+
file_path = ".env"
|
41
|
+
File.open(file_path, "w") do |line|
|
42
|
+
line.write(<<~TEXT)
|
43
|
+
GOOGLE_AUTH_SUPPRESS_CREDENTIALS_WARNINGS=1
|
44
|
+
SOULS_DB_HOST=#{instance_ip}
|
45
|
+
SOULS_DB_PW=#{db_password}
|
46
|
+
SOULS_DB_USER=postgres
|
47
|
+
SOULS_GCP_PROJECT_ID=#{project_id}
|
48
|
+
SOULS_SECRET_KEY_BASE='#{SecureRandom.base64(64)}'
|
49
|
+
TZ="#{region_to_timezone(region: region)}"
|
50
|
+
TEXT
|
51
|
+
end
|
52
|
+
SOULs::Painter.create_file(file_path)
|
53
|
+
end
|
54
|
+
Dir.chdir(SOULs.get_mother_path.to_s) do
|
55
|
+
file_path = ".env.production"
|
56
|
+
File.open(file_path, "w") do |line|
|
57
|
+
line.write(<<~TEXT)
|
58
|
+
SOULS_DB_HOST="/cloudsql/#{project_id}:#{region}:#{instance_name}"
|
59
|
+
SOULS_DB_PW=#{db_password}
|
60
|
+
SOULS_DB_USER=postgres
|
61
|
+
SOULS_APP_NAME=#{app_name}
|
62
|
+
SOULS_GCP_PROJECT_ID=#{project_id}
|
63
|
+
SOULS_GCP_REGION=#{region}
|
64
|
+
SOULS_GCLOUDSQL_INSTANCE="#{project_id}:#{region}:#{instance_name}"
|
65
|
+
SOULS_SECRET_KEY_BASE='#{SecureRandom.base64(64)}'
|
66
|
+
TZ="#{region_to_timezone(region: region)}"
|
67
|
+
TEXT
|
68
|
+
end
|
69
|
+
SOULs::Painter.create_file(file_path)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
60
73
|
desc "list", "Show Cloud SQL Instances List"
|
61
74
|
def list
|
62
75
|
system("gcloud sql instances list")
|
@@ -111,6 +124,7 @@ module SOULs
|
|
111
124
|
desc "assgin_ip", "Add Current Grobal IP to White List"
|
112
125
|
method_option :ip, default: "", aliases: "--ip", desc: "Adding IP to Google Cloud SQL White List: e.g.'11.11.1.1'"
|
113
126
|
def assign_ip
|
127
|
+
require(SOULs.get_mother_path.to_s + "/config/souls")
|
114
128
|
project_id = SOULs.configuration.project_id
|
115
129
|
instance_name = SOULs.configuration.instance_name
|
116
130
|
ips = []
|
@@ -126,12 +140,15 @@ module SOULs
|
|
126
140
|
-H "Authorization: Bearer "$(gcloud auth print-access-token) \
|
127
141
|
"https://sqladmin.googleapis.com/v1/projects/#{project_id}/instances/#{instance_name}?fields=settings"`
|
128
142
|
)
|
129
|
-
|
143
|
+
begin
|
144
|
+
cloud_sql["settings"]["ipConfiguration"]["authorizedNetworks"].blank?
|
130
145
|
white_ips =
|
131
146
|
cloud_sql["settings"]["ipConfiguration"]["authorizedNetworks"].map do |sql_ips|
|
132
147
|
sql_ips["value"]
|
133
148
|
end
|
134
149
|
ips = (ips + white_ips).uniq
|
150
|
+
rescue StandardError => e
|
151
|
+
puts(e)
|
135
152
|
end
|
136
153
|
ips = ips.join(",")
|
137
154
|
Whirly.start(spinner: "clock", interval: 420, stop: "🎉") do
|
data/lib/souls/cli/sync/index.rb
CHANGED
@@ -10,19 +10,19 @@ module SOULs
|
|
10
10
|
return false
|
11
11
|
end
|
12
12
|
|
13
|
-
url = `gcloud run services list
|
13
|
+
url = `gcloud run services list --platform=managed \
|
14
|
+
--project=#{project_id} |grep souls-#{project_id}-#{worker_name}| awk '{print $4}'`.strip
|
14
15
|
return false if url.blank?
|
15
16
|
|
16
17
|
worker_file_names = get_workers_file_paths
|
17
|
-
return false if worker_file_names.blank?
|
18
18
|
|
19
|
-
sync_pubsub_topics_and_subscriptions(
|
19
|
+
sync_pubsub_topics_and_subscriptions(worker_file_names: worker_file_names, worker_url: url)
|
20
20
|
SOULs::Painter.sync("All Jobs with PubSub Subscription!")
|
21
21
|
end
|
22
22
|
|
23
23
|
private
|
24
24
|
|
25
|
-
def sync_pubsub_topics_and_subscriptions(worker_url:,
|
25
|
+
def sync_pubsub_topics_and_subscriptions(worker_url:, worker_file_names: {})
|
26
26
|
project_id = SOULs.configuration.project_id
|
27
27
|
pubsub = Google::Cloud::Pubsub.new(project_id: project_id)
|
28
28
|
topics = pubsub.topics
|
@@ -36,27 +36,37 @@ module SOULs
|
|
36
36
|
souls_topics = topic_names.select { |n| n.include?("souls-#{worker_name}") }
|
37
37
|
|
38
38
|
souls_topics.each do |name|
|
39
|
-
|
40
|
-
|
39
|
+
file_name = name.gsub("-", "_")
|
40
|
+
value = worker_file_names[file_name.to_sym] || 0
|
41
|
+
worker_file_names[file_name.to_sym] = value - 1
|
41
42
|
end
|
42
43
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
44
|
+
if worker_file_names.blank?
|
45
|
+
return if souls_topics.blank?
|
46
|
+
|
47
|
+
souls_topics.each do |topic_id|
|
48
|
+
delete_topic(topic_id: topic_id)
|
49
|
+
delete_subscription(topic_id: topic_id)
|
50
|
+
end
|
51
|
+
else
|
52
|
+
worker_file_names.each do |key, value|
|
53
|
+
topic_id = key.to_s.gsub("_", "-")
|
54
|
+
if value == 1
|
55
|
+
create_topic(topic_id: topic_id)
|
56
|
+
create_push_subscription(worker_url: worker_url, topic_id: topic_id)
|
57
|
+
end
|
58
|
+
delete_topic(topic_id: topic_id) if value == -1
|
59
|
+
delete_subscription(topic_id: topic_id) if value == -1
|
48
60
|
end
|
49
|
-
delete_topic(topic_id: topic_id) if value == -1
|
50
|
-
delete_subscription(topic_id: topic_id) if value == -1
|
51
61
|
end
|
52
|
-
|
62
|
+
worker_file_names
|
53
63
|
end
|
54
64
|
|
55
65
|
def create_topic(topic_id: "worker-mailer")
|
56
66
|
project_id = SOULs.configuration.project_id
|
57
67
|
pubsub = Google::Cloud::Pubsub.new(project_id: project_id)
|
58
68
|
topic = pubsub.create_topic(topic_id.to_s)
|
59
|
-
|
69
|
+
SOULs::Painter.success("Topic #{topic.name} created.")
|
60
70
|
end
|
61
71
|
|
62
72
|
def delete_topic(topic_id: "worker-mailer")
|
@@ -64,7 +74,7 @@ module SOULs
|
|
64
74
|
pubsub = Google::Cloud::Pubsub.new(project_id: project_id)
|
65
75
|
topic = pubsub.topic(topic_id.to_s)
|
66
76
|
topic.delete
|
67
|
-
|
77
|
+
SOULs::Painter.warning("Topic #{topic_id} deleted.", "✨")
|
68
78
|
end
|
69
79
|
|
70
80
|
def delete_subscription(topic_id: "worker-mailer")
|
@@ -78,7 +88,7 @@ module SOULs
|
|
78
88
|
def create_push_subscription(worker_url:, topic_id: "worker-mailer")
|
79
89
|
souls_endpoint = SOULs.configuration.endpoint
|
80
90
|
subscription_id = "#{topic_id}-sub"
|
81
|
-
endpoint = "#{worker_url}
|
91
|
+
endpoint = "#{worker_url}#{souls_endpoint}"
|
82
92
|
|
83
93
|
project_id = SOULs.configuration.project_id
|
84
94
|
pubsub = Google::Cloud::Pubsub.new(project_id: project_id)
|
@@ -86,7 +96,7 @@ module SOULs
|
|
86
96
|
topic = pubsub.topic(topic_id)
|
87
97
|
sub = topic.subscribe(subscription_id, endpoint: endpoint, deadline: 20)
|
88
98
|
sub.expires_in = nil
|
89
|
-
|
99
|
+
SOULs::Painter.success("Push subscription #{subscription_id} created.")
|
90
100
|
end
|
91
101
|
|
92
102
|
def get_workers_file_paths
|
data/lib/souls/version.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.19.
|
1
|
+
1.19.7
|
@@ -1 +1 @@
|
|
1
|
-
1.19.
|
1
|
+
1.19.7
|
data/lib/souls.rb
CHANGED
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.19.
|
4
|
+
version: 1.19.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- POPPIN-FUMI
|
@@ -124,6 +124,20 @@ dependencies:
|
|
124
124
|
- - ">="
|
125
125
|
- !ruby/object:Gem::Version
|
126
126
|
version: 0.3.0
|
127
|
+
- !ruby/object:Gem::Dependency
|
128
|
+
name: httpclient
|
129
|
+
requirement: !ruby/object:Gem::Requirement
|
130
|
+
requirements:
|
131
|
+
- - ">="
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: 2.8.3
|
134
|
+
type: :runtime
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
requirements:
|
138
|
+
- - ">="
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
version: 2.8.3
|
127
141
|
- !ruby/object:Gem::Dependency
|
128
142
|
name: thor
|
129
143
|
requirement: !ruby/object:Gem::Requirement
|