bld 0.1.4 → 0.1.7

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.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/bin/bld +2 -1
  3. data/bin/build +2 -1
  4. data/lib/commands.rb +271 -71
  5. metadata +79 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e58ad6d7f83190c1e03e61c08d300cf30d34ca0a565935c902739712968999b4
4
- data.tar.gz: e9836c61883993fac85828620cf0129ea2b6fe5e3b2939742189bdd833389c88
3
+ metadata.gz: 0a83ec4051e6559929aaf5a9bd63b4942e720a38e1646585b45dd92118dd9c64
4
+ data.tar.gz: 4830cfc9f99c939fe2d6d5cf5cb51d8f1944006d9cd100398def42bb9f2b53f5
5
5
  SHA512:
6
- metadata.gz: 2d103b0fad23903d458d79a6b6b6d5a23ab72ea117ef248511bb7e733d4b9622f91fd11c77b845ec4096ee5024b87f63e45d393ea58762165b6e3976aeb614c7
7
- data.tar.gz: 9f6a7f68f081c9e66667cf3cb345727e528df706040d6006cdd6e5fc2bffa2dab7bb7bda05e4611d4659fb0780ccfb696e1830770b18b027401d691df011c72a
6
+ metadata.gz: 3f46dbef1d40982c49622fae11a1ac9c3122e0e6c976daad1140e1d2c560edafbdd65a0dd9419ba54b03e732502e6235e32158ce6ea574a1e7eb18d073867128
7
+ data.tar.gz: d731e18fecd9c703d9bc992ffbcaf467d877ad5dd9601f9f42b774cb576268eb67c56b451d02231df21510d1cccb8390fdb990a31da70a21ad4f4fac540588de
data/bin/bld CHANGED
@@ -5,6 +5,7 @@ require 'cli/ui'
5
5
  require 'launchy'
6
6
  require 'netrc'
7
7
  require 'httparty'
8
+ require 'net/ssh'
8
9
  require_relative '../lib/commands'
9
10
 
10
11
  ANTIMONY_HOST = "https://app.build.io"
@@ -19,7 +20,7 @@ class BuildCLI
19
20
 
20
21
  def run
21
22
  program :name, 'Build CLI'
22
- program :version, '0.1.4'
23
+ program :version, '0.1.7'
23
24
  program :description, "Build's Command Line Interface"
24
25
  program :int_block, -> { exit }
25
26
  default_command :help
data/bin/build CHANGED
@@ -5,6 +5,7 @@ require 'cli/ui'
5
5
  require 'launchy'
6
6
  require 'netrc'
7
7
  require 'httparty'
8
+ require 'net/ssh'
8
9
  require_relative '../lib/commands'
9
10
 
10
11
  ANTIMONY_HOST = "https://app.build.io"
@@ -19,7 +20,7 @@ class BuildCLI
19
20
 
20
21
  def run
21
22
  program :name, 'Build CLI'
22
- program :version, '0.1.4'
23
+ program :version, '0.1.7'
23
24
  program :description, "Build's Command Line Interface"
24
25
  program :int_block, -> { exit }
25
26
  default_command :help
data/lib/commands.rb CHANGED
@@ -2,43 +2,242 @@
2
2
  class BuildCLICommands
3
3
  def self.index
4
4
  return {
5
- "apps:create": {
6
- cli_details: { :syntax => "apps:create [options] -a <app>", :description => "Create a new app",
7
- :options => [["-t", "--team=<value>", String, "team to use"], ["-r", "--region=<value>", String, "specify region for the app to run in"], ["-s", "--stack=<value>", String, "the stack to create the app on"], ["-a", "--app=<value>", String, "(required) the name of the app to create"]] },
5
+ "ps:restart": {
6
+ cli_details: { :syntax => "build ps:restart -a <app>", :description => "Restart all the processes of an app",
7
+ :options => [["-a", "--app=<value>", String, "(required) app to run command against"]] },
8
8
  cli_perform: Proc.new { |args, options|
9
- begin
10
- user_netrc = Netrc.read
11
- user_token = user_netrc.[]("build.io").[](1)
12
- auth = "Bearer #{user_token}"
13
- app_name = options.app
14
- if app_name.nil?
15
- puts(CLI::UI.fmt("{{red:›}} Error: no app name specified"))
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/restart?#{query_string}",
27
+ { headers: { "Authorization" => auth } })
28
+ if res.code != 200
29
+ if res.body.[]("error")
30
+ puts(CLI::UI.fmt("{{red:›}} Error: #{res.body.[]("error")}"))
31
+ exit(1)
32
+ else
33
+ puts(CLI::UI.fmt("{{red:›}} Error: An unknown error occurred"))
16
34
  exit(1)
17
35
  end
18
- query_params = {}
19
- query_params.[]=(:app, app_name)
20
- if options.team
21
- query_params.[]=(:team, options.team)
36
+ end
37
+ puts(CLI::UI.fmt("{{v}} Restarted all processes for app {{cyan:#{app_name}}}"))
38
+ },
39
+ },
40
+ "config": {
41
+ cli_details: { :syntax => "build config -a <app>", :description => "Get the config variables for an app",
42
+ :options => [["-a", "--app=<value>", String, "(required) app to run command against"]] },
43
+ cli_perform: Proc.new { |args, options|
44
+ app_name = options.app
45
+ if app_name.nil? || app_name.strip == ""
46
+ puts(CLI::UI.fmt("{{red:›}} Error: The following error occurred:"))
47
+ puts(CLI::UI.fmt("{{red:›}} {{gray:Missing required flag app}}"))
48
+ puts(CLI::UI.fmt("{{red:›}} See more help with --help"))
49
+ exit(1)
50
+ end
51
+ user_netrc = Netrc.read
52
+ user_token = user_netrc.[]("build.io")&.password
53
+ if user_token.nil?
54
+ puts(CLI::UI.fmt("{{red:›}} Error: not logged in"))
55
+ exit(1)
56
+ end
57
+ auth = "Bearer #{user_token}"
58
+ query_params = {}
59
+ query_params.[]=(:app, app_name)
60
+ query_string = URI.encode_www_form(query_params)
61
+ res = HTTParty.get("#{ANTIMONY_HOST}/api/cli/command/config?#{query_string}",
62
+ { headers: { "Authorization" => auth } })
63
+ if res.code != 200
64
+ if res.body.[]("error")
65
+ puts(CLI::UI.fmt("{{red:›}} Error: #{res.body.[]("error")}"))
66
+ else
67
+ puts(CLI::UI.fmt("{{red:›}} Error: An unknown error occurred"))
22
68
  end
23
- if options.region
24
- query_params.[]=(:region, options.region)
69
+ exit(1)
70
+ end
71
+ JSON.parse(res.body).each { |key, value|
72
+ puts("#{key}=#{value}")
73
+ }
74
+ },
75
+ },
76
+ "config:get": {
77
+ cli_details: { :syntax => "build config:get VARIABLE -a <app>", :description => "Get a config variable for an app",
78
+ :options => [["-a", "--app=<value>", String, "(required) app to run command against"]] },
79
+ cli_perform: Proc.new { |args, options|
80
+ app_name = options.app
81
+ if app_name.nil? || app_name.strip == ""
82
+ puts(CLI::UI.fmt("{{red:›}} Error: The following error occurred:"))
83
+ puts(CLI::UI.fmt("{{red:›}} {{gray:Missing required flag app}}"))
84
+ puts(CLI::UI.fmt("{{red:›}} See more help with --help"))
85
+ exit(1)
86
+ end
87
+ config_variable = args.[](0)
88
+ if config_variable.nil? || config_variable.strip == ""
89
+ puts(CLI::UI.fmt("{{red:›}} Error: The following error occurred:"))
90
+ puts(CLI::UI.fmt("{{red:›}} {{gray:Missing required argument VARIABLE}}"))
91
+ puts(CLI::UI.fmt("{{red:›}} See more help with --help"))
92
+ exit(1)
93
+ end
94
+ user_netrc = Netrc.read
95
+ user_token = user_netrc.[]("build.io")&.password
96
+ if user_token.nil?
97
+ puts(CLI::UI.fmt("{{red:›}} Error: not logged in"))
98
+ exit(1)
99
+ end
100
+ auth = "Bearer #{user_token}"
101
+ query_params = {}
102
+ query_params.[]=(:app, app_name)
103
+ query_params.[]=(:key, config_variable)
104
+ query_string = URI.encode_www_form(query_params)
105
+ res = HTTParty.get("#{ANTIMONY_HOST}/api/cli/command/config/get?#{query_string}",
106
+ { headers: { "Authorization" => auth } })
107
+ if res.code != 200
108
+ if res.body.[]("error")
109
+ puts(CLI::UI.fmt("{{red:›}} Error: #{res.body.[]("error")}"))
110
+ exit(1)
111
+ else
112
+ puts(CLI::UI.fmt("{{red:›}} Error: An unknown error occurred"))
113
+ exit(1)
25
114
  end
26
- if options.stack
27
- query_params.[]=(:stack, options.stack)
115
+ end
116
+ puts(res.body)
117
+ },
118
+ },
119
+ "config:set": {
120
+ cli_details: { :syntax => "build config:set VARIABLE=VALUE -a <app>", :description => "Set config variables for an app",
121
+ :options => [["-a", "--app=<value>", String, "(required) app to run command against"]] },
122
+ cli_perform: Proc.new { |args, options|
123
+ app_name = options.app
124
+ if app_name.nil? || app_name.strip == ""
125
+ puts(CLI::UI.fmt("{{red:›}} Error: The following error occurred:"))
126
+ puts(CLI::UI.fmt("{{red:›}} {{gray:Missing required flag app}}"))
127
+ puts(CLI::UI.fmt("{{red:›}} See more help with --help"))
128
+ exit(1)
129
+ end
130
+ config_variables = args.map { |arg,|
131
+ arg.split("=")
132
+ }.to_h
133
+ if config_variables.empty?
134
+ puts(CLI::UI.fmt("{{red:›}} Error: The following error occurred:"))
135
+ puts(CLI::UI.fmt("{{red:›}} {{gray:No config variables provided}}"))
136
+ puts(CLI::UI.fmt("{{red:›}} See more help with --help"))
137
+ exit(1)
138
+ end
139
+ user_netrc = Netrc.read
140
+ user_token = user_netrc.[]("build.io")&.password
141
+ if user_token.nil?
142
+ puts(CLI::UI.fmt("{{red:›}} Error: not logged in"))
143
+ exit(1)
144
+ end
145
+ auth = "Bearer #{user_token}"
146
+ query_params = {}
147
+ query_params.[]=(:app, app_name)
148
+ query_params.[]=(:config, config_variables.to_json)
149
+ query_string = URI.encode_www_form(query_params)
150
+ res = HTTParty.get("#{ANTIMONY_HOST}/api/cli/command/config/set?#{query_string}",
151
+ { headers: { "Authorization" => auth } })
152
+ if res.code != 200
153
+ if res.body && res.body.[]("error")
154
+ puts(CLI::UI.fmt("{{red:›}} Error: #{res.body.[]("error")}"))
155
+ else
156
+ puts(CLI::UI.fmt("{{red:›}} Error: An unknown error occurred"))
28
157
  end
29
- query_string = URI.encode_www_form(query_params)
30
- res = HTTParty.get("#{ANTIMONY_HOST}/api/cli/command/apps/create?#{query_string}",
31
- { headers: { "Authorization" => auth } })
32
- if res.code != 200
33
- puts(CLI::UI.fmt("{{red:›}} Error: not authorized to create app (#{app_name})"))
34
- exit(1)
158
+ exit(1)
159
+ end
160
+ puts(CLI::UI.fmt("{{green:›}} Config variable(s) set successfully"))
161
+ },
162
+ },
163
+ "config:unset": {
164
+ cli_details: { :syntax => "build config:unset VARIABLE -a <app>", :description => "Un-Set config variables for an app",
165
+ :options => [["-a", "--app=<value>", String, "(required) app to run command against"]] },
166
+ cli_perform: Proc.new { |args, options|
167
+ app_name = options.app
168
+ if app_name.nil? || app_name.strip == ""
169
+ puts(CLI::UI.fmt("{{red:›}} Error: The following error occurred:"))
170
+ puts(CLI::UI.fmt("{{red:›}} {{gray:Missing required flag app}}"))
171
+ puts(CLI::UI.fmt("{{red:›}} See more help with --help"))
172
+ exit(1)
173
+ end
174
+ config_variables = args.compact
175
+ if config_variables.empty?
176
+ puts(CLI::UI.fmt("{{red:›}} Error: The following error occurred:"))
177
+ puts(CLI::UI.fmt("{{red:›}} {{gray:No config variables provided}}"))
178
+ puts(CLI::UI.fmt("{{red:›}} See more help with --help"))
179
+ exit(1)
180
+ end
181
+ user_netrc = Netrc.read
182
+ user_token = user_netrc.[]("build.io")&.password
183
+ if user_token.nil?
184
+ puts(CLI::UI.fmt("{{red:›}} Error: not logged in"))
185
+ exit(1)
186
+ end
187
+ auth = "Bearer #{user_token}"
188
+ query_params = {}
189
+ query_params.[]=(:app, app_name)
190
+ query_params.[]=(:config, config_variables)
191
+ query_string = URI.encode_www_form(query_params)
192
+ res = HTTParty.get("#{ANTIMONY_HOST}/api/cli/command/config/unset?#{query_string}",
193
+ { headers: { "Authorization" => auth } })
194
+ if res.code != 200
195
+ if res.body && res.body.[]("error")
196
+ puts(CLI::UI.fmt("{{red:›}} Error: #{res.body.[]("error")}"))
197
+ else
198
+ puts(CLI::UI.fmt("{{red:›}} Error: An unknown error occurred"))
35
199
  end
36
- app_name = JSON.parse(res.body).[]("name")
37
- puts("https://#{app_name}.#{region}.antimony.io | #{app_name}")
38
- rescue
200
+ exit(1)
201
+ end
202
+ puts(CLI::UI.fmt("{{green:›}} Config variable(s) unset successfully"))
203
+ },
204
+ },
205
+ "apps:create": {
206
+ cli_details: { :syntax => "apps:create [options] -a <app>", :description => "Create a new app",
207
+ :options => [["-t", "--team=<value>", String, "team to use"], ["-r", "--region=<value>", String, "specify region for the app to run in"], ["-s", "--stack=<value>", String, "the stack to create the app on"], ["-a", "--app=<value>", String, "(required) the name of the app to create"]] },
208
+ cli_perform: Proc.new { |args, options|
209
+ user_netrc = Netrc.read
210
+ user_token = user_netrc.[]("build.io")&.password
211
+ if user_token.nil?
39
212
  puts(CLI::UI.fmt("{{red:›}} Error: not logged in"))
40
213
  exit(1)
41
214
  end
215
+ auth = "Bearer #{user_token}"
216
+ app_name = options.app
217
+ if app_name.nil?
218
+ puts(CLI::UI.fmt("{{red:›}} Error: no app name specified"))
219
+ exit(1)
220
+ end
221
+ query_params = {}
222
+ query_params.[]=(:app, app_name)
223
+ if options.team
224
+ query_params.[]=(:team, options.team)
225
+ end
226
+ if options.region
227
+ query_params.[]=(:region, options.region)
228
+ end
229
+ if options.stack
230
+ query_params.[]=(:stack, options.stack)
231
+ end
232
+ query_string = URI.encode_www_form(query_params)
233
+ res = HTTParty.get("#{ANTIMONY_HOST}/api/cli/command/apps/create?#{query_string}",
234
+ { headers: { "Authorization" => auth } })
235
+ if res.code != 200
236
+ puts(CLI::UI.fmt("{{red:›}} Error: not authorized to create app (#{app_name})"))
237
+ exit(1)
238
+ end
239
+ app_name = JSON.parse(res.body).[]("name")
240
+ puts("https://#{app_name}.#{region}.antimony.io | #{app_name}")
42
241
  },
43
242
  },
44
243
  "login": {
@@ -49,9 +248,10 @@ class BuildCLICommands
49
248
  exit
50
249
  end
51
250
  (user_token, user_email) = nil
251
+ client_secret = SecureRandom.uuid
252
+ oauth_url = "#{ANTIMONY_HOST}/cli_auth/authorize/#{client_secret}"
253
+ puts(CLI::UI.fmt("Opening browser to {{underline:#{oauth_url}}}"))
52
254
  CLI::UI::Spinner.spin("Waiting for login") { |spinner,|
53
- client_secret = SecureRandom.uuid
54
- oauth_url = "#{ANTIMONY_HOST}/cli_auth/authorize/#{client_secret}"
55
255
  Launchy.open(oauth_url)
56
256
  poll_interval = 1
57
257
  timeout = (5 * 60)
@@ -91,15 +291,13 @@ class BuildCLICommands
91
291
  puts(CLI::UI.fmt("{{red:›}} See more help with --help"))
92
292
  exit(1)
93
293
  end
94
-
95
- begin
96
- user_netrc = Netrc.read
97
- user_token = user_netrc.[]("build.io").[](1)
98
- auth = "Bearer #{user_token}"
99
- rescue
294
+ user_netrc = Netrc.read
295
+ user_token = user_netrc.[]("build.io")&.password
296
+ if user_token.nil?
100
297
  puts(CLI::UI.fmt("{{red:›}} Error: not logged in"))
101
298
  exit(1)
102
299
  end
300
+ auth = "Bearer #{user_token}"
103
301
  query_params = {}
104
302
  if options.num
105
303
  query_params.[]=(:num, options.num)
@@ -143,54 +341,56 @@ class BuildCLICommands
143
341
  cli_details: { :syntax => "build whoami", :description => "Display the current logged in user",
144
342
  :options => [] },
145
343
  cli_perform: Proc.new { |args, options|
146
- begin
147
- user_netrc = Netrc.read
148
- user_token = user_netrc.[]("build.io").[](1)
149
- auth = "Bearer #{user_token}"
150
- res = HTTParty.get("#{ANTIMONY_HOST}/api/cli/command/whoami",
151
- { headers: { "Authorization" => auth } })
152
- if res.code != 200
153
- puts(CLI::UI.fmt("{{red:›}} Error: not logged in"))
154
- exit(1)
155
- end
156
- puts(JSON.parse(res.body).[]("email"))
157
- rescue
344
+ user_netrc = Netrc.read
345
+ user_token = user_netrc.[]("build.io")&.password
346
+ if user_token.nil?
347
+ puts(CLI::UI.fmt("{{red:›}} Error: not logged in"))
348
+ exit(1)
349
+ end
350
+ auth = "Bearer #{user_token}"
351
+ res = HTTParty.get("#{ANTIMONY_HOST}/api/cli/command/whoami",
352
+ { headers: { "Authorization" => auth } })
353
+ if res.code != 200
158
354
  puts(CLI::UI.fmt("{{red:›}} Error: not logged in"))
159
355
  exit(1)
160
356
  end
357
+ puts(JSON.parse(res.body).[]("email"))
161
358
  },
162
359
  },
163
360
  "run": {
164
361
  cli_details: { :syntax => "build run COMMAND -a <app>", :description => "Run a once-off process in an app",
165
362
  :options => [["-a", "--app=<value>", String, "(required) app to run command against"]] },
166
363
  cli_perform: Proc.new { |args, options|
167
- begin
168
- if args.empty?
169
- puts(CLI::UI.fmt("{{red:›}} Error: no command provided"))
170
- exit(1)
171
- end
172
- user_netrc = Netrc.read
173
- user_token = user_netrc.[]("build.io").[](1)
174
- auth = "Bearer #{user_token}"
175
- query_params = {}
176
- if options.app
177
- query_params.[]=(:app, options.app)
178
- end
179
- query_string = URI.encode_www_form(query_params)
180
- res = HTTParty.get("#{ANTIMONY_HOST}/api/cli/command/run?#{query_string}",
181
- { headers: { "Authorization" => auth } })
182
- if res.code != 200
183
- puts(CLI::UI.fmt("{{red:›}} Error: app not found"))
184
- exit(1)
185
- end
186
- ruby = JSON.parse(res.body).[]("ruby")
187
- require("shellwords")
188
- command = "/cnb/lifecycle/launcher #{Shellwords.join(args)}"
189
- eval(ruby)
190
- rescue
364
+ if args.empty?
365
+ puts(CLI::UI.fmt("{{red:›}} Error: no command provided"))
366
+ exit(1)
367
+ end
368
+ user_netrc = Netrc.read
369
+ user_token = user_netrc.[]("build.io")&.password
370
+ if user_token.nil?
191
371
  puts(CLI::UI.fmt("{{red:›}} Error: not logged in"))
192
372
  exit(1)
193
373
  end
374
+ auth = "Bearer #{user_token}"
375
+ query_params = {}
376
+ if options.app
377
+ query_params.[]=(:app, options.app)
378
+ end
379
+ query_string = URI.encode_www_form(query_params)
380
+ res = HTTParty.get("#{ANTIMONY_HOST}/api/cli/command/run?#{query_string}",
381
+ { headers: { "Authorization" => auth } })
382
+ if res.code != 200
383
+ if res.body.[]("error")
384
+ puts(CLI::UI.fmt("{{red:›}} Error: #{res.body.[]("error")}"))
385
+ else
386
+ puts(CLI::UI.fmt("{{red:›}} Error: not logged in"))
387
+ end
388
+ exit(1)
389
+ end
390
+ ruby = JSON.parse(res.body).[]("ruby")
391
+ require("shellwords")
392
+ command = "/cnb/lifecycle/launcher #{Shellwords.join(args)}"
393
+ eval(ruby)
194
394
  },
195
395
  }
196
396
  }
metadata CHANGED
@@ -1,15 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bld
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - usiegl00
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-01-30 00:00:00.000000000 Z
11
+ date: 2024-02-05 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: abbrev
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: base64
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bigdecimal
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: csv
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
13
69
  - !ruby/object:Gem::Dependency
14
70
  name: public_suffix
15
71
  requirement: !ruby/object:Gem::Requirement
@@ -120,6 +176,26 @@ dependencies:
120
176
  - - ">="
121
177
  - !ruby/object:Gem::Version
122
178
  version: 2.5.2
179
+ - !ruby/object:Gem::Dependency
180
+ name: net-ssh
181
+ requirement: !ruby/object:Gem::Requirement
182
+ requirements:
183
+ - - ">="
184
+ - !ruby/object:Gem::Version
185
+ version: 6.1.0
186
+ - - "<="
187
+ - !ruby/object:Gem::Version
188
+ version: 7.2.1
189
+ type: :runtime
190
+ prerelease: false
191
+ version_requirements: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - ">="
194
+ - !ruby/object:Gem::Version
195
+ version: 6.1.0
196
+ - - "<="
197
+ - !ruby/object:Gem::Version
198
+ version: 7.2.1
123
199
  description: CLI for build.io
124
200
  email: 50933431+usiegl00@users.noreply.github.com
125
201
  executables:
@@ -161,7 +237,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
161
237
  - !ruby/object:Gem::Version
162
238
  version: '0'
163
239
  requirements: []
164
- rubygems_version: 3.4.21
240
+ rubygems_version: 3.5.3
165
241
  signing_key:
166
242
  specification_version: 4
167
243
  summary: build cli