souls 1.20.0 → 1.20.4
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/graphql/souls_mutation.rb +21 -4
- data/lib/souls/app/graphql/souls_query.rb +5 -0
- data/lib/souls/cli/create/functions.rb +13 -0
- data/lib/souls/cli/create/index.rb +2 -4
- data/lib/souls/cli/gcloud/functions/index.rb +4 -3
- data/lib/souls/cli/gcloud/scheduler/index.rb +7 -8
- data/lib/souls/cli/gcloud/sql/index.rb +30 -8
- data/lib/souls/cli/release/release.rb +2 -0
- 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 +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b0d0a4fbbf0be1899a5c0b8a8b6c6f6a64342c882a9254a7fb382484cb0b67d9
|
4
|
+
data.tar.gz: f6c7d30d7cf6e7898a05603846c94d6f460e8f726bd40300b88762a3b4aefc55
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b66aba97ed7631f61dc44ea3b05ab66f9bf263a9638a2f87889b4fa32cf1f303753228d53b4eb7cd7380068dd40ab20fc97a4789cf391f8823f6a43d0cc0c22
|
7
|
+
data.tar.gz: 35a69e66fbf2768a19189802a94d0751cfca7b40d39e0532d81b7384b1e544d82d708ba0aea39fce4c9f5da00f226cc91de5dc91d325798d5c34cd5773c92615
|
@@ -1,5 +1,23 @@
|
|
1
1
|
module SOULs
|
2
2
|
class SOULsMutation < GraphQL::Schema::RelayClassicMutation
|
3
|
+
def self.post(url:, payload: {}, content_type: "application/json")
|
4
|
+
response = Faraday.post(url, payload.to_json, "Content-Type": content_type)
|
5
|
+
response.body
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.souls_worker_trigger(worker_name:, query_file_name:)
|
9
|
+
query_file_name = query_file_name.gsub("_", "-")
|
10
|
+
topic_name = "souls-#{worker_name}-#{query_file_name}"
|
11
|
+
query = query_file_name.underscore.camelize(:lower)
|
12
|
+
query_string = souls_make_graphql_query(query: query)
|
13
|
+
case ENV["RACK_ENV"]
|
14
|
+
when "production"
|
15
|
+
souls_publish_pubsub_queue(topic_name: topic_name, message: query_string)
|
16
|
+
when "development"
|
17
|
+
puts(souls_post_to_dev(worker_name: worker_name, query_string: query_string))
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
3
21
|
def self.souls_check_user_permissions(user, obj, method)
|
4
22
|
raise(StandardError, "Invalid or Missing Token") unless user
|
5
23
|
|
@@ -43,8 +61,7 @@ module SOULs
|
|
43
61
|
end
|
44
62
|
|
45
63
|
def self.souls_post_to_dev(worker_name: "", query_string: "")
|
46
|
-
|
47
|
-
port = souls_get_worker(worker_name: "souls-#{app}-#{worker_name}")[0][:port]
|
64
|
+
port = souls_get_worker(worker_name: worker_name)[0][:port]
|
48
65
|
endpoint = SOULs.configuration.endpoint
|
49
66
|
res = Net::HTTP.post_form(URI.parse("http://localhost:#{port}#{endpoint}"), { query: query_string })
|
50
67
|
res.body
|
@@ -59,11 +76,11 @@ module SOULs
|
|
59
76
|
raise(GraphQL::ExecutionError, "You need to sign in!!") if context[:user].nil?
|
60
77
|
end
|
61
78
|
|
62
|
-
def production?
|
79
|
+
def self.production?
|
63
80
|
ENV["RACK_ENV"] == "production"
|
64
81
|
end
|
65
82
|
|
66
|
-
def get_instance_id
|
83
|
+
def self.get_instance_id
|
67
84
|
`curl http://metadata.google.internal/computeMetadata/v1/instance/id -H Metadata-Flavor:Google`
|
68
85
|
end
|
69
86
|
end
|
@@ -5,6 +5,11 @@ module SOULs
|
|
5
5
|
attr_accessor :schedule
|
6
6
|
end
|
7
7
|
|
8
|
+
def self.post(url:, payload: {}, content_type: "application/json")
|
9
|
+
response = Faraday.post(url, payload.to_json, "Content-Type": content_type)
|
10
|
+
response.body
|
11
|
+
end
|
12
|
+
|
8
13
|
def self.check_user_permissions(user, obj, method)
|
9
14
|
raise(StandardError, "Invalid or Missing Token") unless user
|
10
15
|
|
@@ -47,6 +47,19 @@ module SOULs
|
|
47
47
|
SOULs::Painter.create_file(file_path)
|
48
48
|
end
|
49
49
|
create_env_yaml(file_dir: file_dir)
|
50
|
+
endroll = <<~TEXT
|
51
|
+
|
52
|
+
♤ Deploy Cloud Functions ♤
|
53
|
+
|
54
|
+
$ cd apps/cf-#{version_string}-#{function_name}
|
55
|
+
$ souls functions deploy
|
56
|
+
|
57
|
+
$ souls functions help
|
58
|
+
|
59
|
+
|
60
|
+
Doc: https://souls.elsoul.nl
|
61
|
+
TEXT
|
62
|
+
puts(Paint[endroll, :white])
|
50
63
|
end
|
51
64
|
|
52
65
|
private
|
@@ -10,12 +10,10 @@ module SOULs
|
|
10
10
|
raise(StandardError, "Same Worker Already Exist!") if Dir.exist?(file_dir)
|
11
11
|
|
12
12
|
workers = SOULs.configuration.workers
|
13
|
-
app = SOULs.configuration.app
|
14
13
|
port = 3000 + workers.size
|
15
|
-
souls_worker_name = "souls-#{app}-#{worker_name}"
|
16
14
|
download_worker(worker_name: worker_name)
|
17
|
-
souls_conf_update(worker_name:
|
18
|
-
souls_conf_update(worker_name:
|
15
|
+
souls_conf_update(worker_name: worker_name)
|
16
|
+
souls_conf_update(worker_name: worker_name, strain: "api")
|
19
17
|
workflow(worker_name: worker_name)
|
20
18
|
procfile(worker_name: worker_name, port: port)
|
21
19
|
mother_procfile(worker_name: worker_name)
|
@@ -11,7 +11,7 @@ module SOULs
|
|
11
11
|
end
|
12
12
|
|
13
13
|
runtime = current_dir.match(/cf-(\D+\d+)-/)[1]
|
14
|
-
runtime_lang = current_dir.match(/^cf-(\D+)\d+-/)
|
14
|
+
runtime_lang = current_dir.match(/^cf-(\D+)\d+-/)[1]
|
15
15
|
entry_point =
|
16
16
|
case runtime_lang
|
17
17
|
when "nodejs"
|
@@ -21,11 +21,12 @@ module SOULs
|
|
21
21
|
when "go"
|
22
22
|
current_dir.underscore.camelize
|
23
23
|
else
|
24
|
+
system("bundle install")
|
24
25
|
current_dir
|
25
26
|
end
|
26
27
|
system(
|
27
28
|
"
|
28
|
-
gcloud functions deploy #{current_dir} --entry-point
|
29
|
+
gcloud functions deploy #{current_dir} --entry-point='#{entry_point}' --project=#{project_id} \
|
29
30
|
--runtime #{runtime} --trigger-http --allow-unauthenticated --env-vars-file .env.yaml
|
30
31
|
"
|
31
32
|
)
|
@@ -47,7 +48,7 @@ module SOULs
|
|
47
48
|
Dir.chdir(SOULs.get_mother_path.to_s) do
|
48
49
|
FileUtils.rm_rf("apps/#{name}")
|
49
50
|
end
|
50
|
-
SOULs::Painter.
|
51
|
+
SOULs::Painter.warning("Deleted #{name} functions!", "✨")
|
51
52
|
end
|
52
53
|
|
53
54
|
desc "url", "Get SOULs Functions URL"
|
@@ -1,12 +1,11 @@
|
|
1
1
|
module SOULs
|
2
2
|
class CloudScheduler < Thor
|
3
|
-
desc "awake", "Set Ping Every 15min by Google Cloud Scheduler"
|
4
|
-
|
5
|
-
def awake
|
3
|
+
desc "awake [url]", "Set Ping Every 15min by Google Cloud Scheduler"
|
4
|
+
def awake(url)
|
6
5
|
app_name = SOULs.configuration.app
|
7
6
|
system(
|
8
7
|
"gcloud scheduler jobs create http #{app_name}-awake
|
9
|
-
--schedule '0,10,20,30,40,50 * * * *' --uri #{
|
8
|
+
--schedule '0,10,20,30,40,50 * * * *' --uri #{url} --http-method GET"
|
10
9
|
)
|
11
10
|
end
|
12
11
|
|
@@ -18,11 +17,11 @@ module SOULs
|
|
18
17
|
project_id = SOULs.configuration.project_id
|
19
18
|
|
20
19
|
schedules_list = current_schedules
|
21
|
-
worker_name = FileUtils.pwd.split("/").last
|
20
|
+
worker_name = FileUtils.pwd.split("/").last.underscore
|
22
21
|
Queries::BaseQuery.all_schedules.each do |k, v|
|
23
22
|
worker_name = FileUtils.pwd.split("/").last
|
24
|
-
job_name = "
|
25
|
-
topic = "
|
23
|
+
job_name = "souls-#{worker_name}-#{k.to_s.underscore}".to_sym
|
24
|
+
topic = "souls-#{worker_name}-#{k.to_s.underscore}"
|
26
25
|
message_body = "query { #{k.to_s.camelize(:lower)} { response }}"
|
27
26
|
|
28
27
|
if schedules_list.include?(job_name)
|
@@ -43,7 +42,7 @@ module SOULs
|
|
43
42
|
end
|
44
43
|
|
45
44
|
schedules_list.each do |k, _|
|
46
|
-
next unless k.match?(/^
|
45
|
+
next unless k.match?(/^souls-#{worker_name}/)
|
47
46
|
|
48
47
|
system("gcloud scheduler jobs delete #{k} -q >/dev/null 2>&1")
|
49
48
|
end
|
@@ -13,19 +13,41 @@ module SOULs
|
|
13
13
|
|
14
14
|
zone = "#{region}-b"
|
15
15
|
system("gcloud config set project #{project_id} >/dev/null 2>&1")
|
16
|
-
|
17
|
-
|
18
|
-
"gcloud sql instances create #{instance_name} \
|
16
|
+
system(
|
17
|
+
"gcloud sql instances create #{instance_name} \
|
19
18
|
--database-version=#{db_type} --cpu=1 --memory=4096MB --zone=#{zone} \
|
20
19
|
--root-password='#{password}' --database-flags cloudsql.iam_authentication=on"
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
end
|
20
|
+
)
|
21
|
+
SOULs::Sql.new.env(password: password)
|
22
|
+
SOULs::Github.new.secret_set
|
23
|
+
SOULs::Painter.success("Cloud SQL #{instance_name} is successfully created! You can push to deploy!")
|
26
24
|
true
|
27
25
|
end
|
28
26
|
|
27
|
+
desc "stop", "Stop Cloud SQL Instance"
|
28
|
+
def stop
|
29
|
+
project_id = SOULs.configuration.project_id
|
30
|
+
instance_name = SOULs.configuration.instance_name
|
31
|
+
system("gcloud sql instances patch #{instance_name} --project=#{project_id} --activation-policy=NEVER")
|
32
|
+
SOULs::Painter.warning("Cloud SQL #{instance_name} is stopped!")
|
33
|
+
end
|
34
|
+
|
35
|
+
desc "restart", "Restart Cloud SQL Instance"
|
36
|
+
def restart
|
37
|
+
project_id = SOULs.configuration.project_id
|
38
|
+
instance_name = SOULs.configuration.instance_name
|
39
|
+
system("gcloud sql instances restart #{instance_name} --project=#{project_id}")
|
40
|
+
SOULs::Painter.success("Cloud SQL #{instance_name} is restarted!")
|
41
|
+
end
|
42
|
+
|
43
|
+
desc "delete", "Delete Cloud SQL Instance"
|
44
|
+
def delete
|
45
|
+
project_id = SOULs.configuration.project_id
|
46
|
+
instance_name = SOULs.configuration.instance_name
|
47
|
+
system("gcloud sql instances delete #{instance_name} --project=#{project_id}")
|
48
|
+
SOULs::Painter.warning("Cloud SQL #{instance_name} is deleted!", "✨")
|
49
|
+
end
|
50
|
+
|
29
51
|
desc "env", "Generate .env.production file to deploy"
|
30
52
|
def env(password: "Password")
|
31
53
|
require(SOULs.get_mother_path.to_s + "/config/souls")
|
@@ -5,6 +5,8 @@ module SOULs
|
|
5
5
|
desc "release", "Release Gem"
|
6
6
|
def release
|
7
7
|
SOULs::Painter.error("hey! It's Broken!") unless system("rspec")
|
8
|
+
FileUtils.rm("apps/api/Gemfile.lock") if File.exist?("apps/api/Gemfile.lock")
|
9
|
+
FileUtils.rm("apps/worker/Gemfile.lock") if File.exist?("apps/worker/Gemfile.lock")
|
8
10
|
|
9
11
|
system("gem install souls")
|
10
12
|
sleep(3)
|
data/lib/souls/version.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.20.
|
1
|
+
1.20.4
|
@@ -1 +1 @@
|
|
1
|
-
1.20.
|
1
|
+
1.20.4
|
metadata
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: souls
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.20.
|
4
|
+
version: 1.20.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- POPPIN-FUMI
|
8
8
|
- KishiTheMechanic
|
9
9
|
- James Neve
|
10
|
-
autorequire:
|
10
|
+
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2022-01-
|
13
|
+
date: 2022-01-09 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|
@@ -299,7 +299,7 @@ licenses:
|
|
299
299
|
- Apache-2.0
|
300
300
|
metadata:
|
301
301
|
rubygems_mfa_required: 'true'
|
302
|
-
post_install_message:
|
302
|
+
post_install_message:
|
303
303
|
rdoc_options: []
|
304
304
|
require_paths:
|
305
305
|
- lib
|
@@ -315,7 +315,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
315
315
|
version: '0'
|
316
316
|
requirements: []
|
317
317
|
rubygems_version: 3.2.32
|
318
|
-
signing_key:
|
318
|
+
signing_key:
|
319
319
|
specification_version: 4
|
320
320
|
summary: Ruby Serverless Framework 'SOULs' | Ruby サーバーレスフレームワーク SOULs. Powered by
|
321
321
|
Ruby GraphQL, RBS/Steep, Active Record, RSpec, RuboCop, and Google Cloud.
|