bld 0.1.4 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
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