souls 1.19.2 → 1.19.6
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/cli/create/index.rb +3 -3
- 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 +9 -7
- 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: 0b5f7b94188e33045595ee50df3761dc486c786992aea9f803560f27500f4aae
|
4
|
+
data.tar.gz: 6d0659f46eb9ca1f9154c4cec5b97381cc04ca2f773b2bd1752eb82c0f6dac2e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ff3dcf7fa1cf290a4998ec3bf1428f2c4fc94973095e9d7a678ccd7b528fdbdaf5f8c5f58149784f97a0219467c992bc0ccbd75b989fefd428a88d0d248ec4a
|
7
|
+
data.tar.gz: 20e054999324d5d082544a4ca31e11bdde030aec3f664bf127df8a8912fbffa62864eb8ece8a701f75e0df37bf7126105438b44ef13c4d5ed4ab19836d85ab67
|
@@ -170,12 +170,12 @@ end
|
|
170
170
|
bundle exec rake db:migrate RACK_ENV=test
|
171
171
|
bundle exec rspec
|
172
172
|
|
173
|
-
- name: Sync Tasks
|
174
|
-
run: cd apps/#{worker_name} && souls gcloud scheduler sync_schedules --timezone=${{ secrets.TZ }}
|
175
|
-
|
176
173
|
- name: Sync PubSub
|
177
174
|
run: cd apps/#{worker_name} && souls sync pubsub
|
178
175
|
|
176
|
+
- name: Sync Tasks
|
177
|
+
run: cd apps/#{worker_name} && souls gcloud scheduler sync_schedules --timezone=${{ secrets.TZ }}
|
178
|
+
|
179
179
|
- name: Configure Docker
|
180
180
|
run: gcloud auth configure-docker --quiet
|
181
181
|
|
@@ -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,7 +10,8 @@ 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
|
@@ -36,8 +37,9 @@ module SOULs
|
|
36
37
|
souls_topics = topic_names.select { |n| n.include?("souls-#{worker_name}") }
|
37
38
|
|
38
39
|
souls_topics.each do |name|
|
39
|
-
|
40
|
-
workers[
|
40
|
+
file_name = name.gsub("-", "_")
|
41
|
+
value = workers[file_name.to_sym] || 0
|
42
|
+
workers[file_name.to_sym] = value - 1
|
41
43
|
end
|
42
44
|
|
43
45
|
workers.each do |key, value|
|
@@ -56,7 +58,7 @@ module SOULs
|
|
56
58
|
project_id = SOULs.configuration.project_id
|
57
59
|
pubsub = Google::Cloud::Pubsub.new(project_id: project_id)
|
58
60
|
topic = pubsub.create_topic(topic_id.to_s)
|
59
|
-
|
61
|
+
SOULs::Painter.success("Topic #{topic.name} created.")
|
60
62
|
end
|
61
63
|
|
62
64
|
def delete_topic(topic_id: "worker-mailer")
|
@@ -64,7 +66,7 @@ module SOULs
|
|
64
66
|
pubsub = Google::Cloud::Pubsub.new(project_id: project_id)
|
65
67
|
topic = pubsub.topic(topic_id.to_s)
|
66
68
|
topic.delete
|
67
|
-
|
69
|
+
SOULs::Painter.error("Topic #{topic_id} deleted.")
|
68
70
|
end
|
69
71
|
|
70
72
|
def delete_subscription(topic_id: "worker-mailer")
|
@@ -78,7 +80,7 @@ module SOULs
|
|
78
80
|
def create_push_subscription(worker_url:, topic_id: "worker-mailer")
|
79
81
|
souls_endpoint = SOULs.configuration.endpoint
|
80
82
|
subscription_id = "#{topic_id}-sub"
|
81
|
-
endpoint = "#{worker_url}
|
83
|
+
endpoint = "#{worker_url}#{souls_endpoint}"
|
82
84
|
|
83
85
|
project_id = SOULs.configuration.project_id
|
84
86
|
pubsub = Google::Cloud::Pubsub.new(project_id: project_id)
|
@@ -86,7 +88,7 @@ module SOULs
|
|
86
88
|
topic = pubsub.topic(topic_id)
|
87
89
|
sub = topic.subscribe(subscription_id, endpoint: endpoint, deadline: 20)
|
88
90
|
sub.expires_in = nil
|
89
|
-
|
91
|
+
SOULs::Painter.success("Push subscription #{subscription_id} created.")
|
90
92
|
end
|
91
93
|
|
92
94
|
def get_workers_file_paths
|
data/lib/souls/version.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.19.
|
1
|
+
1.19.6
|
@@ -1 +1 @@
|
|
1
|
-
1.19.
|
1
|
+
1.19.6
|
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.6
|
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
|