souls 0.35.4 → 0.36.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: 9e4ac0165aeb1a4ebd990de69d4d1479a3a5318c99cdf8ca481efd1ba761f35d
4
- data.tar.gz: 101aba307c5c493716325d12259d50fce939f65f4c62f130a438369cf7fffa59
3
+ metadata.gz: a1c1c6b1311ed1f41d5bf6ee189cda8e899569c68957a51c107861f7986e3218
4
+ data.tar.gz: 80825c655e0c14a5459e7918c69f6bc3857dc6777dd5490d7c6c983429b818cb
5
5
  SHA512:
6
- metadata.gz: 768249fc180dc4442afc593e38eb737cd33dd0fded32e4586cb1e5ee9e5b4e6d5ac4fa4570647b5559f1616c31b9d25431006a43f97babd9f72c480b123661c2
7
- data.tar.gz: 8456b9584df445078f51915698c11564460f6de4d2a7fddb532b36f37fda84ddae7f420409d9d8eca68433068f5e7fa59dcded3c5e468fbe82ea9ae9a28d30bd
6
+ metadata.gz: b09fb73a8d2f35f440e268d8b97198f2a3fb77e8c028cfad52424a7d46b66d45f409327ddcb48139cdc5cbe6f4d2bf802ccc21a8219ad98e41aa0dfd8e84d562
7
+ data.tar.gz: 3888d33a67abfdc22d56c7e83a997d322983bcb282a781d35f01bfb5d034495e89c3782853a848b1a2e797923ecdcf766ada94840fae7d856159fdad52978a99
data/exe/souls CHANGED
@@ -151,7 +151,8 @@ begin
151
151
  service_name = ARGV[1]
152
152
  case service_name
153
153
  when "worker"
154
- Souls::Init.download_worker
154
+ worker_name = ARGV[2]
155
+ Souls::Create.worker(worker_name: worker_name)
155
156
  else
156
157
  puts(Paint["Coming Soon...", :green])
157
158
  end
@@ -1,6 +1,196 @@
1
1
  module Souls
2
2
  module Create
3
3
  class << self
4
+ def worker(worker_name: "mailer")
5
+ workers = Souls.configuration.workers
6
+ port = 3000 + workers.size
7
+ download_worker(worker_name: worker_name)
8
+ souls_conf_update(worker_name: worker_name)
9
+ souls_conf_update(worker_name: worker_name, strain: "api")
10
+ workflow(worker_name: worker_name)
11
+ procfile(worker_name: worker_name, port: port)
12
+ mother_procfile(worker_name: worker_name)
13
+ end
14
+
15
+ def procfile(worker_name: "mailer", port: 3000)
16
+ file_dir = "apps/#{worker_name}"
17
+ file_path = "#{file_dir}/Procfile.dev"
18
+ File.open(file_path, "w") do |f|
19
+ f.write("web: bundle exec puma -p #{port} -e development")
20
+ end
21
+ end
22
+
23
+ def mother_procfile(worker_name: "mailer")
24
+ file_path = "Procfile.dev"
25
+ File.open(file_path, "a") do |f|
26
+ f.write("\n#{worker_name}: foreman start -f ./apps/#{worker_name}/Procfile")
27
+ end
28
+ end
29
+
30
+ def souls_conf_update(worker_name: "", strain: "mother")
31
+ workers = Souls.configuration.workers
32
+ port = 3000 + workers.size
33
+ file_path = strain == "mother" ? "config/souls.rb" : "apps/api/config/souls.rb"
34
+ new_file_path = "tmp/souls.rb"
35
+ worker_switch = false
36
+ File.open(new_file_path, "w") do |new_line|
37
+ File.open(file_path, "r") do |f|
38
+ f.each_line do |line|
39
+ worker_switch = true if line.include?("config.workers")
40
+ break if line.strip == "end"
41
+
42
+ new_line.write(line) unless worker_switch
43
+
44
+ next unless worker_switch
45
+
46
+ new_line.write(" config.workers = [\n")
47
+ workers.each do |worker|
48
+ new_line.write(<<-TEXT)
49
+ {
50
+ name: "#{worker[:name]}",
51
+ endpoint: "#{worker[:endpoint]}",
52
+ port: #{worker[:port]}
53
+ },
54
+ TEXT
55
+ end
56
+ worker_switch = false
57
+ end
58
+ end
59
+ new_line.write(<<-TEXT)
60
+ {
61
+ name: "#{worker_name}",
62
+ endpoint: "",
63
+ port: #{port}
64
+ }
65
+ ]
66
+ end
67
+ TEXT
68
+ end
69
+ FileUtils.rm(file_path)
70
+ FileUtils.mv(new_file_path, file_path)
71
+ end
72
+
73
+ def workflow(worker_name: "")
74
+ file_dir = ".github/workflows"
75
+ FileUtils.mkdir_p(file_dir) unless Dir.exist?(file_dir)
76
+ file_path = "#{file_dir}/#{worker_name}.yml"
77
+ worker_name = worker_name.underscore
78
+ worker_name_camelize = worker_name.camelize
79
+ File.open(file_path, "w") do |f|
80
+ f.write(<<~TEXT)
81
+ name: #{worker_name_camelize}
82
+
83
+ on:
84
+ push:
85
+ branches:
86
+ - master
87
+ paths:
88
+ - "apps/#{worker_name}/**"
89
+ - ".github/workflows/#{worker_name}.yml"
90
+
91
+ jobs:
92
+ build:
93
+
94
+ runs-on: ubuntu-20.04
95
+
96
+ services:
97
+ db:
98
+ image: postgres:13
99
+ ports: ["5433:5432"]
100
+ env:
101
+ POSTGRES_PASSWORD: postgres
102
+ options: >-
103
+ --health-cmd pg_isready
104
+ --health-interval 10s
105
+ --health-timeout 5s
106
+ --health-retries 5
107
+
108
+ steps:
109
+ - uses: actions/checkout@v2
110
+ - name: Set up Ruby 3.0
111
+ uses: actions/setup-ruby@v1
112
+ with:
113
+ ruby-version: 3.0
114
+ - name: Build and test with Rake
115
+ env:
116
+ PGHOST: 127.0.0.1
117
+ PGUSER: postgres
118
+ RACK_ENV: test
119
+ run: |
120
+ sudo apt-get -yqq install libpq-dev
121
+ cd apps/worker
122
+ gem install bundler
123
+ bundle install --jobs 4 --retry 3
124
+ bundle exec rake db:create RACK_ENV=test
125
+ bundle exec rake db:migrate RACK_ENV=test
126
+ bundle exec rspec
127
+
128
+ - name: Checkout the repository
129
+ uses: actions/checkout@v2
130
+
131
+ - name: GCP Authenticate
132
+ uses: google-github-actions/setup-gcloud@master
133
+ with:
134
+ version: "323.0.0"
135
+ project_id: ${{ secrets.GCP_PROJECT_ID }}
136
+ service_account_key: ${{ secrets.GCP_SA_KEY }}
137
+ export_default_credentials: true
138
+
139
+ - name: Configure Docker
140
+ run: gcloud auth configure-docker --quiet
141
+
142
+ - name: Build Docker container
143
+ run: docker build -f ./apps/#{worker_name}/Dockerfile ./apps/#{worker_name} -t gcr.io/${{ secrets.GCP_PROJECT_ID }}/${{secrets.APP_NAME}}-#{worker_name}
144
+
145
+ - name: Push to Container Resistory
146
+ run: docker push gcr.io/${{ secrets.GCP_PROJECT_ID }}/${{secrets.APP_NAME}}-#{worker_name}
147
+
148
+ - name: Deploy to Cloud Run
149
+ run: |
150
+ gcloud run deploy ${{ secrets.APP_NAME }}-#{worker_name} \\
151
+ --service-account=${{ secrets.APP_NAME }}@${{ secrets.GCP_PROJECT_ID }}.iam.gserviceaccount.com \\
152
+ --image=gcr.io/${{ secrets.GCP_PROJECT_ID }}/${{secrets.APP_NAME}}-#{worker_name} \\
153
+ --memory=4Gi \\
154
+ --region=asia-northeast1 \\
155
+ --allow-unauthenticated \\
156
+ --platform=managed \\
157
+ --quiet \\
158
+ --concurrency=80 \\
159
+ --port=8080 \\
160
+ --set-cloudsql-instances=${{ secrets.GCLOUDSQL_INSTANCE }} \\
161
+ --set-env-vars="DB_USER=${{ secrets.DB_USER }}" \\
162
+ --set-env-vars="DB_PW=${{ secrets.DB_PW }}" \\
163
+ --set-env-vars="DB_HOST=${{ secrets.DB_HOST }}" \\
164
+ --set-env-vars="TZ=${{ secrets.TZ }}" \\
165
+ --set-env-vars="SLACK=${{ secrets.SLACK }}" \\
166
+ --set-env-vars="SECRET_KEY_BASE=${{ secrets.SECRET_KEY_BASE }}" \\
167
+ --set-env-vars="PROJECT_ID=${{ secrets.GCP_PROJECT_ID }}"
168
+ TEXT
169
+ end
170
+ puts(Paint % ["Created file! : %{white_text}", :green, { white_text: [file_path.to_s, :white] }])
171
+ file_path
172
+ rescue StandardError => e
173
+ raise(StandardError, e)
174
+ end
175
+
176
+ def download_worker(worker_name: "mailer")
177
+ raise(StandardError, "Can't use `worker` for worker. Change Name.") if worker_name == "worker"
178
+
179
+ current_dir_name = FileUtils.pwd.to_s.match(%r{/([^/]+)/?$})[1]
180
+ wrong_dir = %w[apps api worker]
181
+ if wrong_dir.include?(current_dir_name)
182
+ raise(StandardError, "You are at wrong directory!Go to Mother Directory!")
183
+ end
184
+
185
+ version = Souls.get_latest_version_txt(service_name: "worker").join(".")
186
+ file_name = "worker-v#{version}.tgz"
187
+ url = "https://storage.googleapis.com/souls-bucket/boilerplates/workers/#{file_name}"
188
+ system("curl -OL #{url}")
189
+ system("tar -zxvf ./#{file_name} -C ./apps/")
190
+ system("mv apps/worker apps/#{worker_name}")
191
+ system("cp ./apps/api/config/database.yml ./apps/#{worker_name}/config/")
192
+ FileUtils.rm(file_name)
193
+ end
4
194
  end
5
195
  end
6
196
  end
@@ -44,10 +44,11 @@ module Souls
44
44
 
45
45
  def create_connector(app_name: "", region: "asia-northeast1")
46
46
  app_name = Souls.configuration.app if app_name.blank?
47
+ project_id = Souls.configuration.project_id
47
48
  system(
48
49
  "gcloud compute networks vpc-access connectors create #{app_name}-connector \
49
50
  --region=#{region} \
50
- --subnet-project=#{app_name} \
51
+ --subnet-project=#{project_id} \
51
52
  --subnet=#{app_name}-subnet"
52
53
  )
53
54
  end
@@ -72,7 +73,7 @@ module Souls
72
73
  system("gcloud compute network list")
73
74
  end
74
75
 
75
- def nat_credit(app_name: "", worker_name: "mailer")
76
+ def nat_credit(app_name: "")
76
77
  app_name = Souls.configuration.app if app_name.blank?
77
78
  line = Paint["====================================", :yellow]
78
79
  puts("\n")
data/lib/souls/init.rb CHANGED
@@ -147,55 +147,5 @@ module Souls
147
147
  puts(cd)
148
148
  puts(line)
149
149
  end
150
-
151
- def self.download_worker
152
- current_dir_name = FileUtils.pwd.to_s.match(%r{/([^/]+)/?$})[1]
153
- wrong_dir = %w[apps api worker]
154
- raise(StandardError, "You are at wrong directory!Go to Mother Directory!") if wrong_dir.include?(current_dir_name)
155
-
156
- version = Souls.get_latest_version_txt(service_name: "worker").join(".")
157
- file_name = "worker-v#{version}.tgz"
158
- url = "https://storage.googleapis.com/souls-bucket/boilerplates/workers/#{file_name}"
159
- system("curl -OL #{url}")
160
- system("mkdir -p ./apps/worker")
161
- system("tar -zxvf ./#{file_name} -C ./apps/")
162
- system("cp ./apps/api/config/database.yml ./apps/worker/config/")
163
- FileUtils.rm(file_name)
164
- line = Paint["====================================", :yellow]
165
- puts("\n")
166
- puts(line)
167
- txt2 = <<~TEXT
168
- _____ ____ __ ____#{' '}
169
- / ___// __ \\/ / / / / %{red1}
170
- \\__ \\/ / / / / / / / %{red2}
171
- ___/ / /_/ / /_/ / /___%{red3}#{' '}
172
- /____/\\____/\\____/_____%{red4}#{' '}
173
- TEXT
174
- red1 = ["_____", :red]
175
- red2 = ["/ ___/", :red]
176
- red3 = ["(__ )", :red]
177
- red4 = ["/____/", :red]
178
- ms = Paint % [txt2, :cyan, { red1: red1, red2: red2, red3: red3, red4: red4 }]
179
- puts(ms)
180
- puts(line)
181
- welcome = Paint["SOULs Worker Activated!", :white]
182
- puts(welcome)
183
- souls_ver = Paint["SOULs Version: #{Souls::VERSION}", :white]
184
- puts(souls_ver)
185
- puts(line)
186
- endroll = <<~TEXT
187
- Easy to Run
188
- $ cd ./apps/worker
189
- $ bundle
190
- $ souls sync model
191
- $ souls s
192
- Go To : http://localhost:3000
193
-
194
- Doc: https://souls.elsoul.nl
195
- TEXT
196
- cd = Paint[endroll, :white]
197
- puts(cd)
198
- puts(line)
199
- end
200
150
  end
201
151
  end
data/lib/souls/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Souls
2
- VERSION = "0.35.4".freeze
2
+ VERSION = "0.36.0".freeze
3
3
  public_constant :VERSION
4
4
  end
@@ -1 +1 @@
1
- 0.14.4
1
+ 0.15.0
@@ -1 +1 @@
1
- 0.14.4
1
+ 0.15.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: 0.35.4
4
+ version: 0.36.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: 2021-08-31 00:00:00.000000000 Z
13
+ date: 2021-09-01 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport