tayo 0.1.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.
@@ -0,0 +1,374 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "colorize"
4
+
5
+ module Tayo
6
+ module Commands
7
+ class Init
8
+ def execute
9
+ puts "๐Ÿ  Tayo ์ดˆ๊ธฐํ™”๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค...".colorize(:green)
10
+
11
+ unless rails_project?
12
+ puts "โŒ Rails ํ”„๋กœ์ ํŠธ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. Rails ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์—์„œ ์‹คํ–‰ํ•ด์ฃผ์„ธ์š”.".colorize(:red)
13
+ return
14
+ end
15
+
16
+ check_orbstack
17
+ add_to_gemfile
18
+ bundle_install
19
+ add_linux_platform
20
+ create_welcome_page
21
+ commit_changes
22
+ clear_docker_cache
23
+
24
+ puts "โœ… Tayo๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค!".colorize(:green)
25
+ end
26
+
27
+ private
28
+
29
+ def rails_project?
30
+ File.exist?("Gemfile") && File.exist?("config/application.rb")
31
+ end
32
+
33
+ def check_orbstack
34
+ puts "๐Ÿณ OrbStack ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค...".colorize(:yellow)
35
+
36
+ # OrbStack ์‹คํ–‰ ์ƒํƒœ ํ™•์ธ
37
+ orbstack_running = system("pgrep -x OrbStack > /dev/null 2>&1")
38
+
39
+ if orbstack_running
40
+ puts "โœ… OrbStack์ด ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.".colorize(:green)
41
+ else
42
+ puts "๐Ÿš€ OrbStack์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค...".colorize(:yellow)
43
+
44
+ # OrbStack ์‹คํ–‰
45
+ if system("open -a OrbStack")
46
+ puts "โœ… OrbStack์ด ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.".colorize(:green)
47
+
48
+ # OrbStack์ด ์™„์ „ํžˆ ์‹œ์ž‘๋  ๋•Œ๊นŒ์ง€ ์ž ์‹œ ๋Œ€๊ธฐ
49
+ print "Docker ์„œ๋น„์Šค๊ฐ€ ์ค€๋น„๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ ์ค‘".colorize(:yellow)
50
+ 5.times do
51
+ sleep 1
52
+ print ".".colorize(:yellow)
53
+ end
54
+ puts ""
55
+
56
+ # Docker๊ฐ€ ์ค€๋น„๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
57
+ if system("docker ps > /dev/null 2>&1")
58
+ puts "โœ… Docker๊ฐ€ ์ค€๋น„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.".colorize(:green)
59
+ else
60
+ puts "โš ๏ธ Docker๊ฐ€ ์•„์ง ์ค€๋น„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ž ์‹œ ํ›„ ๋‹ค์‹œ ์‹œ๋„ํ•ด์ฃผ์„ธ์š”.".colorize(:yellow)
61
+ end
62
+ else
63
+ puts "โŒ OrbStack์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.".colorize(:red)
64
+ puts "OrbStack์ด ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์ฃผ์„ธ์š”.".colorize(:yellow)
65
+ puts "https://orbstack.dev ์—์„œ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.".colorize(:cyan)
66
+ end
67
+ end
68
+ end
69
+
70
+ def add_to_gemfile
71
+ gemfile_content = File.read("Gemfile")
72
+
73
+ if gemfile_content.include?("tayo")
74
+ puts "โ„น๏ธ Tayo๊ฐ€ ์ด๋ฏธ Gemfile์— ์žˆ์Šต๋‹ˆ๋‹ค.".colorize(:yellow)
75
+ return
76
+ end
77
+
78
+ development_group = gemfile_content.match(/group :development do\n(.*?)\nend/m)
79
+
80
+ if development_group
81
+ updated_content = gemfile_content.sub(
82
+ /group :development do\n/,
83
+ "group :development do\n gem 'tayo'\n"
84
+ )
85
+ else
86
+ updated_content = gemfile_content + "\n\ngroup :development do\n gem 'tayo'\nend\n"
87
+ end
88
+
89
+ File.write("Gemfile", updated_content)
90
+ puts "โœ… Gemfile์— Tayo๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.".colorize(:green)
91
+ end
92
+
93
+ def bundle_install
94
+ puts "๐Ÿ“ฆ bundle install์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค...".colorize(:yellow)
95
+ system("bundle install")
96
+ end
97
+
98
+ def add_linux_platform
99
+ puts "๐Ÿง Linux ํ”Œ๋žซํผ์„ ํ™•์ธํ•˜๊ณ  ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค...".colorize(:yellow)
100
+
101
+ # Gemfile.lock ํŒŒ์ผ ํ™•์ธ
102
+ unless File.exist?("Gemfile.lock")
103
+ puts "โš ๏ธ Gemfile.lock ํŒŒ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค. bundle install์„ ๋จผ์ € ์‹คํ–‰ํ•ด์ฃผ์„ธ์š”.".colorize(:yellow)
104
+ return
105
+ end
106
+
107
+ gemfile_lock_content = File.read("Gemfile.lock")
108
+ platforms_needed = []
109
+
110
+ # ํ•„์š”ํ•œ ํ”Œ๋žซํผ ํ™•์ธ
111
+ unless gemfile_lock_content.include?("x86_64-linux")
112
+ platforms_needed << "x86_64-linux"
113
+ end
114
+
115
+ unless gemfile_lock_content.include?("aarch64-linux")
116
+ platforms_needed << "aarch64-linux"
117
+ end
118
+
119
+ if platforms_needed.empty?
120
+ puts "โœ… ํ•„์š”ํ•œ Linux ํ”Œ๋žซํผ์ด ์ด๋ฏธ ์ถ”๊ฐ€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.".colorize(:green)
121
+ return
122
+ end
123
+
124
+ # ํ”Œ๋žซํผ ์ถ”๊ฐ€
125
+ platforms_needed.each do |platform|
126
+ puts "๐Ÿ“ฆ #{platform} ํ”Œ๋žซํผ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค...".colorize(:yellow)
127
+ if system("bundle lock --add-platform #{platform}")
128
+ puts "โœ… #{platform} ํ”Œ๋žซํผ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.".colorize(:green)
129
+ else
130
+ puts "โŒ #{platform} ํ”Œ๋žซํผ ์ถ”๊ฐ€์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.".colorize(:red)
131
+ end
132
+ end
133
+
134
+ # Dockerfile ํ™•์ธ ๋ฐ ์ƒ์„ฑ
135
+ ensure_dockerfile_exists
136
+ end
137
+
138
+ def ensure_dockerfile_exists
139
+ unless File.exist?("Dockerfile")
140
+ puts "๐Ÿณ Dockerfile์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ Dockerfile์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค...".colorize(:yellow)
141
+
142
+ # Rails 7์˜ ๊ธฐ๋ณธ Dockerfile ์ƒ์„ฑ
143
+ if system("rails app:update:bin")
144
+ system("./bin/rails generate dockerfile")
145
+ puts "โœ… Dockerfile์ด ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.".colorize(:green)
146
+ else
147
+ puts "โš ๏ธ Dockerfile ์ƒ์„ฑ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”.".colorize(:yellow)
148
+ puts " ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”: ./bin/rails generate dockerfile".colorize(:cyan)
149
+ end
150
+ else
151
+ puts "โœ… Dockerfile์ด ์ด๋ฏธ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.".colorize(:green)
152
+ end
153
+ end
154
+
155
+ def create_welcome_page
156
+ # Welcome ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ด๋ฏธ ์žˆ๋Š”์ง€ ํ™•์ธ
157
+ if File.exist?("app/controllers/welcome_controller.rb")
158
+ puts "โ„น๏ธ Welcome ํŽ˜์ด์ง€๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.".colorize(:yellow)
159
+ @welcome_page_created = false
160
+ return
161
+ end
162
+
163
+ puts "๐ŸŽจ Welcome ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค...".colorize(:yellow)
164
+
165
+ # Welcome ์ปจํŠธ๋กค๋Ÿฌ ์ƒ์„ฑ
166
+ system("rails generate controller Welcome index --skip-routes --no-helper --no-assets")
167
+
168
+ # ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ๊ฐ€์ ธ์˜ค๊ธฐ
169
+ project_name = File.basename(Dir.pwd).gsub(/[-_]/, ' ').split.map(&:capitalize).join(' ')
170
+
171
+ # Welcome ํŽ˜์ด์ง€ HTML ์ƒ์„ฑ
172
+ welcome_html = <<~HTML
173
+ <!DOCTYPE html>
174
+ <html>
175
+ <head>
176
+ <title>#{project_name} - Welcome</title>
177
+ <meta name="viewport" content="width=device-width,initial-scale=1">
178
+ <style>
179
+ * { margin: 0; padding: 0; box-sizing: border-box; }
180
+ body {
181
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
182
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
183
+ min-height: 100vh;
184
+ display: flex;
185
+ align-items: center;
186
+ justify-content: center;
187
+ color: white;
188
+ }
189
+ .container {
190
+ text-align: center;
191
+ padding: 2rem;
192
+ max-width: 800px;
193
+ animation: fadeIn 1s ease-out;
194
+ }
195
+ h1 {
196
+ font-size: 4rem;
197
+ margin-bottom: 1rem;
198
+ text-shadow: 2px 2px 4px rgba(0,0,0,0.3);
199
+ animation: slideDown 0.8s ease-out;
200
+ }
201
+ .subtitle {
202
+ font-size: 1.5rem;
203
+ margin-bottom: 3rem;
204
+ opacity: 0.9;
205
+ animation: slideUp 0.8s ease-out 0.2s both;
206
+ }
207
+ .info-grid {
208
+ display: grid;
209
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
210
+ gap: 2rem;
211
+ margin-top: 3rem;
212
+ }
213
+ .info-card {
214
+ background: rgba(255,255,255,0.1);
215
+ backdrop-filter: blur(10px);
216
+ padding: 2rem;
217
+ border-radius: 10px;
218
+ border: 1px solid rgba(255,255,255,0.2);
219
+ animation: fadeIn 0.8s ease-out 0.4s both;
220
+ }
221
+ .info-card h3 {
222
+ font-size: 1.2rem;
223
+ margin-bottom: 0.5rem;
224
+ }
225
+ .info-card p {
226
+ opacity: 0.8;
227
+ font-size: 0.9rem;
228
+ }
229
+ .deploy-badge {
230
+ display: inline-block;
231
+ background: rgba(255,255,255,0.2);
232
+ padding: 0.5rem 1rem;
233
+ border-radius: 20px;
234
+ margin-top: 2rem;
235
+ font-size: 0.9rem;
236
+ animation: pulse 2s infinite;
237
+ }
238
+ @keyframes fadeIn {
239
+ from { opacity: 0; transform: translateY(20px); }
240
+ to { opacity: 1; transform: translateY(0); }
241
+ }
242
+ @keyframes slideDown {
243
+ from { opacity: 0; transform: translateY(-30px); }
244
+ to { opacity: 1; transform: translateY(0); }
245
+ }
246
+ @keyframes slideUp {
247
+ from { opacity: 0; transform: translateY(30px); }
248
+ to { opacity: 1; transform: translateY(0); }
249
+ }
250
+ @keyframes pulse {
251
+ 0%, 100% { opacity: 1; }
252
+ 50% { opacity: 0.8; }
253
+ }
254
+ </style>
255
+ </head>
256
+ <body>
257
+ <div class="container">
258
+ <h1>๐Ÿ  #{project_name}</h1>
259
+ <p class="subtitle">Welcome to your Tayo-powered Rails application!</p>
260
+
261
+ <div class="info-grid">
262
+ <div class="info-card">
263
+ <h3>๐Ÿ“ฆ Container Ready</h3>
264
+ <p>Your app is configured for container deployment</p>
265
+ </div>
266
+ <div class="info-card">
267
+ <h3>๐Ÿš€ GitHub Integration</h3>
268
+ <p>Ready to push to GitHub Container Registry</p>
269
+ </div>
270
+ <div class="info-card">
271
+ <h3>โ˜๏ธ Cloudflare DNS</h3>
272
+ <p>Domain management simplified</p>
273
+ </div>
274
+ </div>
275
+
276
+ <div class="deploy-badge">
277
+ Deployed with Tayo ๐ŸŽ‰
278
+ </div>
279
+ </div>
280
+ </body>
281
+ </html>
282
+ HTML
283
+
284
+ # Welcome ๋ทฐ ํŒŒ์ผ์— ์ €์žฅ
285
+ welcome_view_path = "app/views/welcome/index.html.erb"
286
+ File.write(welcome_view_path, welcome_html)
287
+
288
+ # routes.rb ์—…๋ฐ์ดํŠธ
289
+ routes_file = "config/routes.rb"
290
+ routes_content = File.read(routes_file)
291
+
292
+ # root ๊ฒฝ๋กœ ์„ค์ • - welcome#index๊ฐ€ ์ด๋ฏธ ์žˆ๋Š”์ง€ ํ™•์ธ
293
+ unless routes_content.include?("welcome#index")
294
+ if routes_content.match?(/^\s*root\s+/)
295
+ # ๊ธฐ์กด root ์„ค์ •์ด ์žˆ์œผ๋ฉด ๊ต์ฒด
296
+ routes_content.gsub!(/^\s*root\s+.*$/, " root 'welcome#index'")
297
+ else
298
+ # root ์„ค์ •์ด ์—†์œผ๋ฉด ์ถ”๊ฐ€
299
+ routes_content.gsub!(/Rails\.application\.routes\.draw do\s*\n/, "Rails.application.routes.draw do\n root 'welcome#index'\n")
300
+ end
301
+
302
+ File.write(routes_file, routes_content)
303
+ puts " โœ… routes.rb์— root ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.".colorize(:green)
304
+ else
305
+ puts " โ„น๏ธ routes.rb์— welcome#index๊ฐ€ ์ด๋ฏธ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.".colorize(:yellow)
306
+ end
307
+
308
+ puts "โœ… Welcome ํŽ˜์ด์ง€๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!".colorize(:green)
309
+ puts " ๊ฒฝ๋กœ: /".colorize(:gray)
310
+ puts " ์ปจํŠธ๋กค๋Ÿฌ: app/controllers/welcome_controller.rb".colorize(:gray)
311
+ puts " ๋ทฐ: app/views/welcome/index.html.erb".colorize(:gray)
312
+
313
+ @welcome_page_created = true
314
+ end
315
+
316
+ def commit_changes
317
+ # Git ์ €์žฅ์†Œ์ธ์ง€ ํ™•์ธ
318
+ unless Dir.exist?(".git")
319
+ puts "โš ๏ธ Git ์ €์žฅ์†Œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ปค๋ฐ‹์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.".colorize(:yellow)
320
+ return
321
+ end
322
+
323
+ # Welcome ํŽ˜์ด์ง€๊ฐ€ ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๊ฒฝ์šฐ์—๋งŒ ์ปค๋ฐ‹
324
+ unless @welcome_page_created
325
+ puts "โ„น๏ธ ์ƒˆ๋กœ์šด ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์—†์–ด ์ปค๋ฐ‹์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.".colorize(:yellow)
326
+ return
327
+ end
328
+
329
+ puts "๐Ÿ“ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ Git์— ์ปค๋ฐ‹ํ•ฉ๋‹ˆ๋‹ค...".colorize(:yellow)
330
+
331
+ # Git ์ƒํƒœ ํ™•์ธ
332
+ git_status = `git status --porcelain`
333
+
334
+ if git_status.strip.empty?
335
+ puts "โ„น๏ธ ์ปค๋ฐ‹ํ•  ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์—†์Šต๋‹ˆ๋‹ค.".colorize(:yellow)
336
+ return
337
+ end
338
+
339
+ # ๋ณ€๊ฒฝ์‚ฌํ•ญ ์Šคํ…Œ์ด์ง•
340
+ system("git add .")
341
+
342
+ # ์ปค๋ฐ‹
343
+ commit_message = "Add Tayo configuration and Welcome page"
344
+ if system("git commit -m '#{commit_message}'")
345
+ puts "โœ… ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ปค๋ฐ‹๋˜์—ˆ์Šต๋‹ˆ๋‹ค.".colorize(:green)
346
+ puts " ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€: #{commit_message}".colorize(:gray)
347
+ else
348
+ puts "โš ๏ธ ์ปค๋ฐ‹์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.".colorize(:yellow)
349
+ end
350
+ end
351
+
352
+ def clear_docker_cache
353
+ puts "๐Ÿงน Docker ์บ์‹œ๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค...".colorize(:yellow)
354
+
355
+ # Docker system prune
356
+ if system("docker system prune -f > /dev/null 2>&1")
357
+ puts "โœ… Docker ์‹œ์Šคํ…œ ์บ์‹œ๊ฐ€ ์ •๋ฆฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.".colorize(:green)
358
+ else
359
+ puts "โš ๏ธ Docker ์‹œ์Šคํ…œ ์ •๋ฆฌ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.".colorize(:yellow)
360
+ end
361
+
362
+ # Kamal build cache clear
363
+ if File.exist?("config/deploy.yml")
364
+ puts "๐Ÿšข Kamal ๋นŒ๋“œ ์บ์‹œ๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค...".colorize(:yellow)
365
+ if system("kamal build --clear-cache > /dev/null 2>&1")
366
+ puts "โœ… Kamal ๋นŒ๋“œ ์บ์‹œ๊ฐ€ ์ •๋ฆฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.".colorize(:green)
367
+ else
368
+ puts "โš ๏ธ Kamal ๋นŒ๋“œ ์บ์‹œ ์ •๋ฆฌ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.".colorize(:yellow)
369
+ end
370
+ end
371
+ end
372
+ end
373
+ end
374
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tayo
4
+ VERSION = "0.1.0"
5
+ end
data/lib/tayo.rb ADDED
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "tayo/version"
4
+ require_relative "tayo/cli"
5
+
6
+ module Tayo
7
+ class Error < StandardError; end
8
+ end
Binary file
data/sig/tayo.rbs ADDED
@@ -0,0 +1,4 @@
1
+ module Tayo
2
+ VERSION: String
3
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
+ end
metadata ADDED
@@ -0,0 +1,112 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tayo
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - ์ด์›์„ญwonsup Lee/Alfonso
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: thor
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '1.3'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '1.3'
26
+ - !ruby/object:Gem::Dependency
27
+ name: git
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '1.18'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.18'
40
+ - !ruby/object:Gem::Dependency
41
+ name: colorize
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '1.1'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.1'
54
+ - !ruby/object:Gem::Dependency
55
+ name: tty-prompt
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '0.23'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '0.23'
68
+ description: Tayo is a deployment tool for Rails applications to home servers using
69
+ GitHub Container Registry and Cloudflare CLI.
70
+ email:
71
+ - onesup.lee@gmail.com
72
+ executables:
73
+ - tayo
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - ".DS_Store"
78
+ - README.md
79
+ - Rakefile
80
+ - exe/tayo
81
+ - lib/tayo.rb
82
+ - lib/tayo/cli.rb
83
+ - lib/tayo/commands/cf.rb
84
+ - lib/tayo/commands/gh.rb
85
+ - lib/tayo/commands/init.rb
86
+ - lib/tayo/version.rb
87
+ - pkg/homebody-0.1.0.gem
88
+ - sig/tayo.rbs
89
+ homepage: https://github.com/onesup/tayo
90
+ licenses: []
91
+ metadata:
92
+ homepage_uri: https://github.com/onesup/tayo
93
+ source_code_uri: https://github.com/onesup/tayo
94
+ changelog_uri: https://github.com/onesup/tayo/blob/main/CHANGELOG.md
95
+ rdoc_options: []
96
+ require_paths:
97
+ - lib
98
+ required_ruby_version: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 3.1.0
103
+ required_rubygems_version: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ requirements: []
109
+ rubygems_version: 3.6.9
110
+ specification_version: 4
111
+ summary: Rails deployment tool for home servers
112
+ test_files: []