bld 0.1.7 → 0.1.9
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/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
|