bld 0.1.7 → 0.1.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/bld +1 -1
- data/bin/build +1 -1
- data/lib/commands.rb +116 -25
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b5e6157af2b5e12d5ee9490b4343789f7e7acf5932d3cb883bb21ec2fa68e221
|
4
|
+
data.tar.gz: 9d46125734793f9bd09a6d78b24bf873d9515b83add285d4ce978262a4cbe18f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dc0eb8a516a0b3bf1f2d6e827159b73c3ea996049e65b2dbe3a7c9128790a51bbe62a8a694622fc73454ae9cf5bbed32a96ce350b7996c787e7904bf0734fb5c
|
7
|
+
data.tar.gz: 5e0aabe38039a3cc9e6f7e1647a5e4cc93e23bd7493f12202c53d6194021ab10bf5673ff64c5af237442598095c5afd4fb5ec1ea67c6e51c0810cf9947c45600
|
data/bin/bld
CHANGED
data/bin/build
CHANGED
data/lib/commands.rb
CHANGED
@@ -2,8 +2,81 @@
|
|
2
2
|
class BuildCLICommands
|
3
3
|
def self.index
|
4
4
|
return {
|
5
|
+
"ps": {
|
6
|
+
cli_details: { :syntax => "build ps -a <app>", :description => "List all the processes of an app",
|
7
|
+
:options => [["-a", "--app=<value>", String, "(required) app to run command against"]] },
|
8
|
+
cli_perform: Proc.new { |args, options|
|
9
|
+
app_name = options.app
|
10
|
+
if app_name.nil? || app_name.strip == ""
|
11
|
+
puts(CLI::UI.fmt("{{red:›}} Error: The following error occurred:"))
|
12
|
+
puts(CLI::UI.fmt("{{red:›}} {{gray:Missing required flag app}}"))
|
13
|
+
puts(CLI::UI.fmt("{{red:›}} See more help with --help"))
|
14
|
+
exit(1)
|
15
|
+
end
|
16
|
+
user_netrc = Netrc.read
|
17
|
+
user_token = user_netrc.[]("build.io")&.password
|
18
|
+
if user_token.nil?
|
19
|
+
puts(CLI::UI.fmt("{{red:›}} Error: not logged in"))
|
20
|
+
exit(1)
|
21
|
+
end
|
22
|
+
auth = "Bearer #{user_token}"
|
23
|
+
query_params = {}
|
24
|
+
query_params.[]=(:app, app_name)
|
25
|
+
query_string = URI.encode_www_form(query_params)
|
26
|
+
res = HTTParty.get("#{ANTIMONY_HOST}/api/cli/command/ps?#{query_string}",
|
27
|
+
{ headers: { "Authorization" => auth } })
|
28
|
+
if res.code != 200
|
29
|
+
if res.body && res.body != "" && JSON.parse(res.body)&.key?("error")
|
30
|
+
puts(CLI::UI.fmt("{{red:›}} Error: #{JSON.parse(res.body).[]("error")}"))
|
31
|
+
else
|
32
|
+
puts(CLI::UI.fmt("{{red:›}} Error: An unknown error occurred"))
|
33
|
+
end
|
34
|
+
exit(1)
|
35
|
+
end
|
36
|
+
processes = JSON.parse(res.body).[]("processes")
|
37
|
+
if processes.empty?
|
38
|
+
puts(CLI::UI.fmt("{{green:›}} No processes found for app #{app_name}"))
|
39
|
+
exit(1)
|
40
|
+
end
|
41
|
+
processes.each { |process,|
|
42
|
+
puts(CLI::UI.fmt("{{gray:===}} {{bold:{{green:#{process.[]("type")}}} ({{cyan:#{process.[]("size")}}}): {{white:#{[
|
43
|
+
process.[]("command"), process.[]("args")
|
44
|
+
].compact.join(" ")}}} ({{yellow:#{process.[]("quantity")}}})}}"))
|
45
|
+
process.[]("processes").each { |instance,|
|
46
|
+
started_at = Time.parse(instance.[]("started_at")).localtime
|
47
|
+
status = if instance.[]("status") == "Running"
|
48
|
+
"{{green:up}}"
|
49
|
+
else
|
50
|
+
"{{red:down}}"
|
51
|
+
end
|
52
|
+
days_ago = ((Time.now - started_at) / 86400).to_i
|
53
|
+
hours_ago = ((Time.now - started_at) / 3600).to_i % 24
|
54
|
+
minutes_ago = ((Time.now - started_at) / 60).to_i % 60
|
55
|
+
seconds_ago = (Time.now - started_at).to_i % 60
|
56
|
+
dotiw = ""
|
57
|
+
if days_ago > 0
|
58
|
+
dotiw = "#{days_ago}d "
|
59
|
+
end
|
60
|
+
if hours_ago > 0 || days_ago > 0
|
61
|
+
dotiw += "#{hours_ago}h "
|
62
|
+
end
|
63
|
+
if minutes_ago > 0 || hours_ago > 0 || days_ago > 0
|
64
|
+
dotiw += "#{minutes_ago}m "
|
65
|
+
end
|
66
|
+
if seconds_ago > 0 || minutes_ago > 0 || hours_ago > 0 || days_ago > 0
|
67
|
+
dotiw += "#{seconds_ago}s"
|
68
|
+
end
|
69
|
+
if dotiw == ""
|
70
|
+
dotiw = "0s"
|
71
|
+
end
|
72
|
+
puts(CLI::UI.fmt("{{white:#{process.[]("type")}.#{instance.[]("index")}}}: #{status} {{gray:#{started_at} (~ #{dotiw} ago)}}"))
|
73
|
+
}
|
74
|
+
puts("")
|
75
|
+
}
|
76
|
+
},
|
77
|
+
},
|
5
78
|
"ps:restart": {
|
6
|
-
cli_details: { :syntax => "build ps:restart -a <app>", :description => "Restart all the processes of an app",
|
79
|
+
cli_details: { :syntax => "build ps:restart [PROCESS] -a <app>", :description => "Restart all the processes of an app",
|
7
80
|
:options => [["-a", "--app=<value>", String, "(required) app to run command against"]] },
|
8
81
|
cli_perform: Proc.new { |args, options|
|
9
82
|
app_name = options.app
|
@@ -13,6 +86,13 @@ class BuildCLICommands
|
|
13
86
|
puts(CLI::UI.fmt("{{red:›}} See more help with --help"))
|
14
87
|
exit(1)
|
15
88
|
end
|
89
|
+
if args.length > 1
|
90
|
+
puts(CLI::UI.fmt("{{red:›}} Error: The following error occurred:"))
|
91
|
+
puts(CLI::UI.fmt("{{red:›}} {{gray:Too many arguments provided}}"))
|
92
|
+
puts(CLI::UI.fmt("{{red:›}} See more help with --help"))
|
93
|
+
exit(1)
|
94
|
+
end
|
95
|
+
process = args.first
|
16
96
|
user_netrc = Netrc.read
|
17
97
|
user_token = user_netrc.[]("build.io")&.password
|
18
98
|
if user_token.nil?
|
@@ -22,19 +102,25 @@ class BuildCLICommands
|
|
22
102
|
auth = "Bearer #{user_token}"
|
23
103
|
query_params = {}
|
24
104
|
query_params.[]=(:app, app_name)
|
105
|
+
if process
|
106
|
+
query_params.[]=(:process, process)
|
107
|
+
end
|
25
108
|
query_string = URI.encode_www_form(query_params)
|
26
109
|
res = HTTParty.get("#{ANTIMONY_HOST}/api/cli/command/ps/restart?#{query_string}",
|
27
110
|
{ headers: { "Authorization" => auth } })
|
28
111
|
if res.code != 200
|
29
|
-
if res.body.
|
30
|
-
puts(CLI::UI.fmt("{{red:›}} Error: #{res.body.[]("error")}"))
|
31
|
-
exit(1)
|
112
|
+
if res.body && res.body != "" && JSON.parse(res.body)&.key?("error")
|
113
|
+
puts(CLI::UI.fmt("{{red:›}} Error: #{JSON.parse(res.body).[]("error")}"))
|
32
114
|
else
|
33
115
|
puts(CLI::UI.fmt("{{red:›}} Error: An unknown error occurred"))
|
34
|
-
exit(1)
|
35
116
|
end
|
117
|
+
exit(1)
|
118
|
+
end
|
119
|
+
if process
|
120
|
+
puts(CLI::UI.fmt("{{v}} Restarted process {{cyan:#{process}}} for app {{cyan:#{app_name}}}"))
|
121
|
+
else
|
122
|
+
puts(CLI::UI.fmt("{{v}} Restarted all processes for app {{cyan:#{app_name}}}"))
|
36
123
|
end
|
37
|
-
puts(CLI::UI.fmt("{{v}} Restarted all processes for app {{cyan:#{app_name}}}"))
|
38
124
|
},
|
39
125
|
},
|
40
126
|
"config": {
|
@@ -61,8 +147,8 @@ class BuildCLICommands
|
|
61
147
|
res = HTTParty.get("#{ANTIMONY_HOST}/api/cli/command/config?#{query_string}",
|
62
148
|
{ headers: { "Authorization" => auth } })
|
63
149
|
if res.code != 200
|
64
|
-
if res.body.
|
65
|
-
puts(CLI::UI.fmt("{{red:›}} Error: #{res.body.[]("error")}"))
|
150
|
+
if res.body && res.body != "" && JSON.parse(res.body)&.key?("error")
|
151
|
+
puts(CLI::UI.fmt("{{red:›}} Error: #{JSON.parse(res.body).[]("error")}"))
|
66
152
|
else
|
67
153
|
puts(CLI::UI.fmt("{{red:›}} Error: An unknown error occurred"))
|
68
154
|
end
|
@@ -105,13 +191,12 @@ class BuildCLICommands
|
|
105
191
|
res = HTTParty.get("#{ANTIMONY_HOST}/api/cli/command/config/get?#{query_string}",
|
106
192
|
{ headers: { "Authorization" => auth } })
|
107
193
|
if res.code != 200
|
108
|
-
if res.body.
|
109
|
-
puts(CLI::UI.fmt("{{red:›}} Error: #{res.body.[]("error")}"))
|
110
|
-
exit(1)
|
194
|
+
if res.body && res.body != "" && JSON.parse(res.body)&.key?("error")
|
195
|
+
puts(CLI::UI.fmt("{{red:›}} Error: #{JSON.parse(res.body).[]("error")}"))
|
111
196
|
else
|
112
197
|
puts(CLI::UI.fmt("{{red:›}} Error: An unknown error occurred"))
|
113
|
-
exit(1)
|
114
198
|
end
|
199
|
+
exit(1)
|
115
200
|
end
|
116
201
|
puts(res.body)
|
117
202
|
},
|
@@ -150,8 +235,8 @@ class BuildCLICommands
|
|
150
235
|
res = HTTParty.get("#{ANTIMONY_HOST}/api/cli/command/config/set?#{query_string}",
|
151
236
|
{ headers: { "Authorization" => auth } })
|
152
237
|
if res.code != 200
|
153
|
-
if res.body && res.body.
|
154
|
-
puts(CLI::UI.fmt("{{red:›}} Error: #{res.body.[]("error")}"))
|
238
|
+
if res.body && res.body != "" && JSON.parse(res.body)&.key?("error")
|
239
|
+
puts(CLI::UI.fmt("{{red:›}} Error: #{JSON.parse(res.body).[]("error")}"))
|
155
240
|
else
|
156
241
|
puts(CLI::UI.fmt("{{red:›}} Error: An unknown error occurred"))
|
157
242
|
end
|
@@ -192,8 +277,8 @@ class BuildCLICommands
|
|
192
277
|
res = HTTParty.get("#{ANTIMONY_HOST}/api/cli/command/config/unset?#{query_string}",
|
193
278
|
{ headers: { "Authorization" => auth } })
|
194
279
|
if res.code != 200
|
195
|
-
if res.body && res.body.
|
196
|
-
puts(CLI::UI.fmt("{{red:›}} Error: #{res.body.[]("error")}"))
|
280
|
+
if res.body && res.body != "" && JSON.parse(res.body)&.key?("error")
|
281
|
+
puts(CLI::UI.fmt("{{red:›}} Error: #{JSON.parse(res.body).[]("error")}"))
|
197
282
|
else
|
198
283
|
puts(CLI::UI.fmt("{{red:›}} Error: An unknown error occurred"))
|
199
284
|
end
|
@@ -273,10 +358,14 @@ class BuildCLICommands
|
|
273
358
|
break
|
274
359
|
end
|
275
360
|
}
|
276
|
-
user_netrc = Netrc.read
|
277
|
-
user_netrc.[]=("build.io", ["#{user_email}", "#{user_token}"])
|
278
|
-
user_netrc.save
|
279
361
|
}
|
362
|
+
if user_token.nil? || user_email.nil? || user_token.empty? || user_email.empty?
|
363
|
+
puts(CLI::UI.fmt("{{red:Login failed}}"))
|
364
|
+
exit(1)
|
365
|
+
end
|
366
|
+
user_netrc = Netrc.read
|
367
|
+
user_netrc.[]=("build.io", ["#{user_email}", "#{user_token}"])
|
368
|
+
user_netrc.save
|
280
369
|
puts(CLI::UI.fmt("Logged in as {{green:#{user_email}}}"))
|
281
370
|
},
|
282
371
|
},
|
@@ -318,9 +407,11 @@ class BuildCLICommands
|
|
318
407
|
res = HTTParty.get("#{ANTIMONY_HOST}/api/apps/#{app_name}/logs/log_url?#{query_string}",
|
319
408
|
{ headers: { "Authorization" => auth } })
|
320
409
|
if res.code != 200
|
321
|
-
|
322
|
-
|
323
|
-
|
410
|
+
if res.body && res.body != "" && JSON.parse(res.body)&.key?("error")
|
411
|
+
puts(CLI::UI.fmt("{{red:›}} Error: #{JSON.parse(res.body).[]("error")}"))
|
412
|
+
else
|
413
|
+
puts(CLI::UI.fmt("{{red:›}} Error: An unknown error occurred"))
|
414
|
+
end
|
324
415
|
exit(1)
|
325
416
|
end
|
326
417
|
log_url = res.[]("url")
|
@@ -380,10 +471,10 @@ class BuildCLICommands
|
|
380
471
|
res = HTTParty.get("#{ANTIMONY_HOST}/api/cli/command/run?#{query_string}",
|
381
472
|
{ headers: { "Authorization" => auth } })
|
382
473
|
if res.code != 200
|
383
|
-
if res.body.
|
384
|
-
puts(CLI::UI.fmt("{{red:›}} Error: #{res.body.[]("error")}"))
|
474
|
+
if res.body && res.body != "" && JSON.parse(res.body)&.key?("error")
|
475
|
+
puts(CLI::UI.fmt("{{red:›}} Error: #{JSON.parse(res.body).[]("error")}"))
|
385
476
|
else
|
386
|
-
puts(CLI::UI.fmt("{{red:›}} Error:
|
477
|
+
puts(CLI::UI.fmt("{{red:›}} Error: An unknown error occurred"))
|
387
478
|
end
|
388
479
|
exit(1)
|
389
480
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bld
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- usiegl00
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-02-
|
11
|
+
date: 2024-02-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: abbrev
|