souls 1.3.1 → 1.3.5

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: 9586ab30b5189eaa4af5cbd037ad0650d78a0ce8c89fd1591528d7ec4da70d8a
4
- data.tar.gz: 14087a6358389fdc3f0de14ac3cde00233add048add040f379e229239d0f954f
3
+ metadata.gz: f7be84adf2c447eaa2ecd78cd32ca799988aff10a77669daa77323829687f18d
4
+ data.tar.gz: ce581a1c2d2b42bf657ea74f04076d58820b260c48fabacd46fcb064abadfef4
5
5
  SHA512:
6
- metadata.gz: e28e330548810a8804c51b287e4991c973fc918a5c2b8dab694a9998e6d5e930dc7a53cff8b33fb23db5f4ba501bea42bd931fb0c6d769f7f1bd6f287b91a768
7
- data.tar.gz: eafd2c306469f2685fa93acd474afd51c729469bcc0721b7157c269a760364d84271ba7698f3bb20fcdd1872c2bf9ea1c20ddf583f5ce6deff795e879769ad64
6
+ metadata.gz: 7b0545fb8986cbc81658387264a3d30b545dd01e3a46522dd4b6eeafbaa7f8370969d657d536b9951f10912b1a86897066a65068d045be8e82fe16155c071734
7
+ data.tar.gz: 1b1e25eaa958bc4a5c02ee0ce0ab9775e63aba4fc26faa2d4bbf22ea0f78d4b0c1ca780cffd581992f71a2bbec5ee10ebfb1d07c18b6781378ab92e4f7ab435e
data/README.md CHANGED
@@ -68,6 +68,7 @@ It is a development environment where you can immediately notice the mistakes th
68
68
  - [Docker](https://www.docker.com/)
69
69
  - [Firebase CLI](https://firebase.google.com/docs/cli)
70
70
  - [Ruby](https://www.ruby-lang.org)
71
+ - [Github CLI](https://cli.github.com/)
71
72
 
72
73
  ## Cloud Infrastructure
73
74
 
@@ -173,39 +173,38 @@ end
173
173
  uses: google-github-actions/setup-gcloud@master
174
174
  with:
175
175
  version: "323.0.0"
176
- project_id: ${{ secrets.GCP_PROJECT_ID }}
177
- service_account_key: ${{ secrets.GCP_SA_KEY }}
176
+ project_id: ${{ secrets.SOULS_GCP_PROJECT_ID }}
177
+ service_account_key: ${{ secrets.SOULS_GCP_SA_KEY }}
178
178
  export_default_credentials: true
179
179
 
180
180
  - name: Configure Docker
181
181
  run: gcloud auth configure-docker --quiet
182
182
 
183
183
  - name: Build Docker container
184
- run: docker build -f ./apps/#{worker_name}/Dockerfile ./apps/#{worker_name} -t gcr.io/${{ secrets.GCP_PROJECT_ID }}/${{secrets.APP_NAME}}-#{worker_name}
184
+ run: docker build -f ./apps/#{worker_name}/Dockerfile ./apps/#{worker_name} -t gcr.io/${{ secrets.SOULS_GCP_PROJECT_ID }}/${{secrets.SOULS_APP_NAME}}-#{worker_name}
185
185
 
186
186
  - name: Push to Container Resistory
187
- run: docker push gcr.io/${{ secrets.GCP_PROJECT_ID }}/${{secrets.APP_NAME}}-#{worker_name}
187
+ run: docker push gcr.io/${{ secrets.SOULS_GCP_PROJECT_ID }}/${{secrets.SOULS_APP_NAME}}-#{worker_name}
188
188
 
189
189
  - name: Deploy to Cloud Run
190
190
  run: |
191
- gcloud run deploy souls-${{ secrets.APP_NAME }}-#{worker_name} \\
192
- --service-account=${{ secrets.APP_NAME }}@${{ secrets.GCP_PROJECT_ID }}.iam.gserviceaccount.com \\
193
- --image=gcr.io/${{ secrets.GCP_PROJECT_ID }}/${{secrets.APP_NAME}}-#{worker_name} \\
191
+ gcloud run deploy souls-${{ secrets.SOULS_APP_NAME }}-#{worker_name} \\
192
+ --service-account=${{ secrets.SOULS_APP_NAME }}@${{ secrets.SOULS_GCP_PROJECT_ID }}.iam.gserviceaccount.com \\
193
+ --image=gcr.io/${{ secrets.SOULS_GCP_PROJECT_ID }}/${{secrets.SOULS_APP_NAME}}-#{worker_name} \\
194
194
  --memory=4Gi \\
195
- --region=asia-northeast1 \\
195
+ --region=${{ secrets.SOULS_GCP_REGION }} \\
196
196
  --allow-unauthenticated \\
197
197
  --platform=managed \\
198
198
  --quiet \\
199
199
  --concurrency=80 \\
200
200
  --port=8080 \\
201
- --set-cloudsql-instances=${{ secrets.GCLOUDSQL_INSTANCE }} \\
202
- --set-env-vars="DB_USER=${{ secrets.DB_USER }}" \\
203
- --set-env-vars="DB_PW=${{ secrets.DB_PW }}" \\
204
- --set-env-vars="DB_HOST=${{ secrets.DB_HOST }}" \\
205
- --set-env-vars="TZ=${{ secrets.TZ }}" \\
206
- --set-env-vars="SLACK=${{ secrets.SLACK }}" \\
207
- --set-env-vars="SECRET_KEY_BASE=${{ secrets.SECRET_KEY_BASE }}" \\
208
- --set-env-vars="PROJECT_ID=${{ secrets.GCP_PROJECT_ID }}"
201
+ --set-cloudsql-instances=${{ secrets.SOULS_GCLOUDSQL_INSTANCE }} \\
202
+ --set-env-vars="SOULS_DB_USER=${{ secrets.SOULS_DB_USER }}" \\
203
+ --set-env-vars="SOULS_DB_PW=${{ secrets.SOULS_DB_PW }}" \\
204
+ --set-env-vars="SOULS_DB_HOST=${{ secrets.SOULS_DB_HOST }}" \\
205
+ --set-env-vars="SOULS_TZ=${{ secrets.SOULS_TZ }}" \\
206
+ --set-env-vars="SOULS_SECRET_KEY_BASE=${{ secrets.SOULS_SECRET_KEY_BASE }}" \\
207
+ --set-env-vars="SOULS_PROJECT_ID=${{ secrets.SOULS_GCP_PROJECT_ID }}"
209
208
  TEXT
210
209
  end
211
210
  puts(Paint % ["Created file! : %{white_text}", :green, { white_text: [file_path.to_s, :white] }])
@@ -5,23 +5,45 @@ module Souls
5
5
  method_option :root_password, default: "", aliases: "--root-password", desc: "Set Cloud SQL Root Password"
6
6
  method_option :mysql, type: :boolean, default: false, aliases: "--mysql", desc: "Set Cloud SQL Type to MySQL"
7
7
  def create_instance
8
- instance_name = "souls-#{Souls.configuration.app}-db" if instance_name.blank?
8
+ app_name = Souls.configuration.app
9
+ project_id = Souls.configuration.project_id
10
+ instance_name = Souls.configuration.instance_name if instance_name.blank?
9
11
  region = Souls.configuration.region if options[:region].blank?
10
12
  db_type = options[:mysql] ? "MYSQL_8_0" : "POSTGRES_13"
11
13
 
12
14
  zone = "#{region}-b"
13
15
  system(
14
16
  "gcloud sql instances create #{instance_name} \
15
- --database-version=#{db_type} --cpu=2 --memory=7680MB --zone=#{zone} \
17
+ --database-version=#{db_type} --cpu=1 --memory=3750MB --zone=#{zone} \
16
18
  --root-password='#{options[:root_password]}' --database-flags cloudsql.iam_authentication=on"
17
19
  )
18
20
  Dir.chdir(Souls.get_api_path.to_s) do
19
21
  file_path = ".env"
20
- lines = File.readlines(".env")
21
- lines[0] = "DB_HOST=#{get_sql_ip.strip}\n"
22
- lines[1] = "DB_PW=#{options[:root_password]}\n"
23
- lines[2] = "DB_USER=postgres\n"
24
- File.open(file_path, "w") { |f| f.write(lines.join) }
22
+ File.open(file_path, "w") do |line|
23
+ line.write(<<~TEXT)
24
+ SOULS_DB_HOST=#{get_sql_ip.strip}
25
+ SOULS_DB_PW=#{options[:root_password]}
26
+ SOULS_DB_USER=postgres
27
+ SOULS_TZ="#{region_to_timezone(region: region)}"
28
+ SOULS_SECRET_KEY_BASE="#{SecureRandom.base64(64)}"
29
+ TEXT
30
+ end
31
+ end
32
+ Dir.chdir(Souls.get_mother_path.to_s) do
33
+ file_path = ".env.production"
34
+ File.open(file_path, "w") do |line|
35
+ line.write(<<~TEXT)
36
+ SOULS_DB_HOST="/cloudsql/#{project_id}:#{region}:#{instance_name}"
37
+ SOULS_DB_PW=#{options[:root_password]}
38
+ SOULS_DB_USER=postgres
39
+ SOULS_APP_NAME=#{app_name}
40
+ SOULS_GCP_PROJECT_ID=#{project_id}
41
+ SOULS_GCP_REGION=#{region}
42
+ SOULS_GCLOUDSQL_INSTANCE="#{project_id}:#{region}:#{instance_name}"
43
+ SOULS_TZ="#{region_to_timezone(region: region)}"
44
+ SOULS_SECRET_KEY_BASE="#{SecureRandom.base64(64)}"
45
+ TEXT
46
+ end
25
47
  end
26
48
  rescue Thor::Error => e
27
49
  raise(Thor::Error, e)
@@ -46,7 +68,7 @@ module Souls
46
68
  desc "assign_network", "Assign Network"
47
69
  def assign_network
48
70
  app_name = Souls.configuration.app
49
- instance_name = "#{Souls.configuration.app}-db"
71
+ instance_name = Souls.configuration.instance_name
50
72
  project_id = Souls.configuration.project_id
51
73
  system("gcloud beta sql instances patch #{instance_name} --project=#{project_id} --network=#{app_name}")
52
74
  rescue Thor::Error => e
@@ -91,8 +113,8 @@ module Souls
91
113
  desc "assgin_ip", "Add Current Grobal IP to White List"
92
114
  def assign_ip(instance_name: "", ip: "")
93
115
  ip = `curl inet-ip.info` if ip.blank?
94
- project_id = Souls.configuration.project_id
95
- instance_name = "#{Souls.configuration.app}-db" if instance_name.blank?
116
+ project_id = Souls.configuration.project_id if instance_name.blank?
117
+ instance_name = Souls.configuration.instance_name if instance_name.blank?
96
118
  system(
97
119
  "
98
120
  gcloud beta sql instances patch #{instance_name} \
@@ -111,5 +133,15 @@ module Souls
111
133
  def get_sql_ip
112
134
  `gcloud sql instances list | grep james | awk '{print $5}'`
113
135
  end
136
+
137
+ def region_to_timezone(region: "asia-northeast1")
138
+ if region.include?("asia")
139
+ "Asia/Tokyo"
140
+ elsif region.include?("europe")
141
+ "Europe/Amsterdam"
142
+ else
143
+ "America/Los_Angeles"
144
+ end
145
+ end
114
146
  end
115
147
  end
@@ -1,8 +1,7 @@
1
1
  module Souls
2
2
  class Github < Thor
3
- desc "secret_set", "Github Secret Set by Github CLI"
3
+ desc "secret_set", "Github Secret Set from .env.production"
4
4
  def secret_set
5
- require("#{Souls.get_api_path}/config/souls")
6
5
  file_path = ".env.production"
7
6
  File.open(file_path, "r") do |file|
8
7
  file.each_line do |line|
@@ -11,5 +10,50 @@ module Souls
11
10
  end
12
11
  end
13
12
  end
13
+
14
+ desc "add_env", "Add New env and Sync Github Secret"
15
+ method_option :key, aliases: "--key", required: true, desc: "Key Name"
16
+ method_option :value, aliases: "--value", required: true, desc: "Value Name"
17
+ method_option :dqm, type: :boolean, aliases: "--dqm", default: false, desc: "Enable Double Quotation Mark"
18
+ def add_env
19
+ update_env_production(key: options[:key], value: options[:value], dqm: options[:dqm])
20
+ update_api_env(key: options[:key], value: options[:value], dqm: options[:dqm])
21
+ update_github_actions(key: options[:key])
22
+ Souls::Github.new.invoke(:secret_set)
23
+ end
24
+
25
+ private
26
+
27
+ def update_env_production(key:, value:, dqm: false)
28
+ Dir.chdir(Souls.get_mother_path.to_s) do
29
+ file_path = ".env.production"
30
+ File.open(file_path, "a") do |line|
31
+ dqm ? line.write("\n#{key.upcase}=\"#{value}\"") : line.write("\n#{key.upcase}=#{value}")
32
+ end
33
+ puts(Paint % ["Updated file! : %{white_text}", :green, { white_text: [file_path.to_s, :white] }])
34
+ end
35
+ end
36
+
37
+ def update_api_env(key:, value:, dqm: false)
38
+ Dir.chdir(Souls.get_api_path.to_s) do
39
+ file_path = ".env"
40
+ File.open(file_path, "a") do |line|
41
+ dqm ? line.write("\n#{key.upcase}=\"#{value}\"") : line.write("\n#{key.upcase}=#{value}")
42
+ end
43
+ puts(Paint % ["Updated file! : %{white_text}", :green, { white_text: [file_path.to_s, :white] }])
44
+ end
45
+ end
46
+
47
+ def update_github_actions(key:)
48
+ Dir.chdir(Souls.get_mother_path.to_s) do
49
+ file_paths = Dir["github/workflows/*.yml"]
50
+ file_paths.each do |file_path|
51
+ File.open(file_path, "a") do |line|
52
+ line.write(" \\ \n --set-env-vars=\"#{key.upcase}=${{ secrets.#{key.upcase} }}\"")
53
+ end
54
+ puts(Paint % ["Updated file! : %{white_text}", :green, { white_text: [file_path.to_s, :white] }])
55
+ end
56
+ end
57
+ end
14
58
  end
15
59
  end
@@ -119,15 +119,15 @@ module Souls
119
119
 
120
120
  gem "activesupport", "6.1.4.1"
121
121
  gem "foreman", "0.87.2"
122
- gem "google-cloud-pubsub", "2.8.1"
122
+ gem "google-cloud-pubsub", "2.9.0"
123
123
  gem "paint", "2.2.1"
124
124
  gem "parser", "3.0.2.0"
125
125
  gem "pg", "1.2.3"
126
126
  gem "rake", "13.0.6"
127
127
  gem "rspec", "3.10.0"
128
- gem "rubocop", "1.21.0"
128
+ gem "rubocop", "1.22.3"
129
129
  gem "sinatra-activerecord", "2.0.23"
130
- gem "solargraph", "0.43.2"
130
+ gem "solargraph", "0.44.0"
131
131
  gem "souls", "#{Souls::VERSION}"
132
132
  gem "steep", "0.46.0"
133
133
  gem "thor", "1.1.0"
data/lib/souls/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Souls
2
- VERSION = "1.3.1".freeze
2
+ VERSION = "1.3.5".freeze
3
3
  public_constant :VERSION
4
4
  end
@@ -1 +1 @@
1
- 1.3.1
1
+ 1.3.5
@@ -1 +1 @@
1
- 1.3.1
1
+ 1.3.5
data/lib/souls.rb CHANGED
@@ -49,5 +49,9 @@ module Souls
49
49
  @fixed_gems = nil
50
50
  @workers = nil
51
51
  end
52
+
53
+ def instance_name
54
+ "souls-#{@app}-db"
55
+ end
52
56
  end
53
57
  end
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.3.1
4
+ version: 1.3.5
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-10-29 00:00:00.000000000 Z
13
+ date: 2021-11-01 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport