superbot-cloud 0.2.5 → 0.2.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/superbot/cloud/api.rb +8 -3
- data/lib/superbot/cloud/cli/member/add_command.rb +1 -1
- data/lib/superbot/cloud/cli/member/list_command.rb +1 -1
- data/lib/superbot/cloud/cli/member/remove_command.rb +1 -1
- data/lib/superbot/cloud/cli/root_command.rb +2 -2
- data/lib/superbot/cloud/cli/run/abort_command.rb +26 -0
- data/lib/superbot/cloud/cli/run/base_command.rb +12 -0
- data/lib/superbot/cloud/cli/run/console_command.rb +99 -0
- data/lib/superbot/cloud/cli/run/create_command.rb +27 -0
- data/lib/superbot/cloud/cli/run/list_command.rb +49 -0
- data/lib/superbot/cloud/cli/run/scale_command.rb +32 -0
- data/lib/superbot/cloud/cli/run_command.rb +13 -26
- data/lib/superbot/cloud/cli/schedule/cancel_command.rb +4 -6
- data/lib/superbot/cloud/cli/schedule/create_command.rb +37 -0
- data/lib/superbot/cloud/cli/schedule_command.rb +2 -0
- data/lib/superbot/cloud/cli/test/delete_command.rb +7 -3
- data/lib/superbot/cloud/cli/test/list_command.rb +10 -5
- data/lib/superbot/cloud/version.rb +1 -1
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b7cf9f4ebda39c246a90a762bf76cb9101fa8f0a34abb8b4c87586fd77b09305
|
4
|
+
data.tar.gz: 3cf214ca9a1215afd9c76f87305da9ec7e647da163330d7a8fe447cd73d2fec6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9516b4f2711a3b345b3e89707407653b0215edaf22f1f49507d1cb078f6d1ad68f8df0c58f524feeb7235757657d3c0739abc27550675e9ae97cc0e7db647554
|
7
|
+
data.tar.gz: 01a28235edf1bc534f1704bf6f142bf78b012b25c404ca639c481d3e69cc4ea6b78c4cd277e680c0419144813167cb06adb83bcc91f97b625aa36fd23f19e8ed
|
data/Gemfile.lock
CHANGED
data/lib/superbot/cloud/api.rb
CHANGED
@@ -18,9 +18,14 @@ module Superbot
|
|
18
18
|
cancel_schedule: { method: :delete, endpoint: 'schedules', required_param: :id },
|
19
19
|
webdriver_session_list: { method: :get, endpoint: 'webdriver_sessions' },
|
20
20
|
delete_webdriver_session: { method: :delete, endpoint: 'webdriver_sessions', required_param: :session_id },
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
member_list: { method: :get, endpoint: 'members' },
|
22
|
+
add_member: { method: :post, endpoint: 'members' },
|
23
|
+
remove_member: { method: :delete, endpoint: 'members', required_param: :username },
|
24
|
+
create_interactive_run: { method: :post, endpoint: 'interactive_runs' },
|
25
|
+
abort_interactive_run: { method: :delete, endpoint: 'interactive_runs', required_param: :id },
|
26
|
+
update_interactive_run: { method: :patch, endpoint: 'interactive_runs', required_param: :id },
|
27
|
+
show_interactive_run: { method: :get, endpoint: 'interactive_runs', required_param: :id },
|
28
|
+
interactive_run_list: { method: :get, endpoint: 'interactive_runs' }
|
24
29
|
}.freeze
|
25
30
|
|
26
31
|
def self.request(type, params: {})
|
@@ -12,7 +12,7 @@ module Superbot
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def add_member
|
15
|
-
api_response = Superbot::Cloud::Api.request(:
|
15
|
+
api_response = Superbot::Cloud::Api.request(:add_member, params: { organization_name: organization, username: username })
|
16
16
|
puts "Succesfully added %<username>s to %<organization>s organization" % api_response.slice(:username, :organization)
|
17
17
|
end
|
18
18
|
end
|
@@ -10,7 +10,7 @@ module Superbot
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def list_members
|
13
|
-
api_response = Superbot::Cloud::Api.request(:
|
13
|
+
api_response = Superbot::Cloud::Api.request(:member_list, params: { organization_name: @organization })
|
14
14
|
abort api_response[:error] if api_response[:error]
|
15
15
|
puts "Organization: #{api_response[:organization]}"
|
16
16
|
puts "Members:"
|
@@ -12,7 +12,7 @@ module Superbot
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def remove_member
|
15
|
-
api_response = Superbot::Cloud::Api.request(:
|
15
|
+
api_response = Superbot::Cloud::Api.request(:remove_member, params: { organization_name: organization, username: username })
|
16
16
|
puts "Member successfully removed from organization"
|
17
17
|
end
|
18
18
|
end
|
@@ -10,8 +10,8 @@ require_relative 'organization_command'
|
|
10
10
|
require_relative 'test_command'
|
11
11
|
require_relative 'webdriver_command'
|
12
12
|
require_relative 'member_command'
|
13
|
-
require_relative 'run_command'
|
14
13
|
require_relative 'schedule_command'
|
14
|
+
require_relative 'run_command'
|
15
15
|
|
16
16
|
module Superbot
|
17
17
|
module Cloud
|
@@ -24,8 +24,8 @@ module Superbot
|
|
24
24
|
subcommand ['test'], "Manage your tests", TestCommand
|
25
25
|
subcommand ['webdriver'], "Manage your webdriver sessions", WebdriverCommand
|
26
26
|
subcommand ['member'], "Manage your organization members", MemberCommand
|
27
|
-
subcommand ['run'], "Schedule a cloud run", RunCommand
|
28
27
|
subcommand ['schedule'], "Manage your schedules", ScheduleCommand
|
28
|
+
subcommand(['run'], "Schedule a cloud run", RunCommand) if ENV['SUPERBOT_FEAT_CLOUD_RUNS'] == 'true'
|
29
29
|
|
30
30
|
option ['-v', '--version'], :flag, "Show version information" do
|
31
31
|
puts Superbot::Cloud::VERSION
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Superbot
|
4
|
+
module Cloud
|
5
|
+
module CLI
|
6
|
+
module Run
|
7
|
+
class AbortCommand < BaseCommand
|
8
|
+
parameter "ID ...", "the IDs of runs to abort", required: true
|
9
|
+
|
10
|
+
def execute
|
11
|
+
abort_run
|
12
|
+
end
|
13
|
+
|
14
|
+
def abort_run
|
15
|
+
id_list.each do |run_id|
|
16
|
+
Superbot::Cloud::Api.request(:abort_interactive_run, params: { id: run_id, organization_name: organization })
|
17
|
+
puts "Interactive run #{run_id} successfully aborted"
|
18
|
+
rescue SystemExit
|
19
|
+
p # skip to next run
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Superbot
|
4
|
+
module Cloud
|
5
|
+
module CLI
|
6
|
+
module Run
|
7
|
+
class ConsoleCommand < BaseCommand
|
8
|
+
parameter "ID", "the ID of run to bots", required: true
|
9
|
+
|
10
|
+
def execute
|
11
|
+
abort "Run is not active anymore" if fetch_interaction[:status] == 'aborted'
|
12
|
+
loop do
|
13
|
+
printf '> '
|
14
|
+
input = $stdin.gets
|
15
|
+
exit if input.nil?
|
16
|
+
cmd, arg = input.rstrip.split(' ')
|
17
|
+
invoke_command(cmd, arg)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def invoke_command(command, argument)
|
24
|
+
return if empty_value?(command)
|
25
|
+
|
26
|
+
case command
|
27
|
+
when 'bots', 'loops' then positive_number?(argument) && send(command, argument)
|
28
|
+
when 'status', 'help', 'exit' then send(command)
|
29
|
+
when 'abort' then abort_run
|
30
|
+
else
|
31
|
+
puts "Unknow command: #{command}"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def common_request_params
|
36
|
+
{
|
37
|
+
id: id,
|
38
|
+
organization_name: organization
|
39
|
+
}
|
40
|
+
end
|
41
|
+
|
42
|
+
def bots(value)
|
43
|
+
return puts("bots: #{fetch_interaction[:parallel].to_i}") if empty_value?(value)
|
44
|
+
|
45
|
+
Superbot::Cloud::Api.request(:update_interactive_run, params: common_request_params.merge(parallel: value))
|
46
|
+
puts "Number of bots scaled to #{value}"
|
47
|
+
end
|
48
|
+
|
49
|
+
def loops(value)
|
50
|
+
return puts("loops: #{fetch_interaction[:loop].to_i}") if empty_value?(value)
|
51
|
+
|
52
|
+
Superbot::Cloud::Api.request(:update_interactive_run, params: common_request_params.merge(loop: value))
|
53
|
+
puts "Number of consecutive invocations scaled to #{value}"
|
54
|
+
end
|
55
|
+
|
56
|
+
def abort_run
|
57
|
+
Superbot::Cloud::Api.request(:abort_interactive_run, params: common_request_params)
|
58
|
+
abort "Abort requested"
|
59
|
+
end
|
60
|
+
|
61
|
+
def exit
|
62
|
+
abort
|
63
|
+
end
|
64
|
+
|
65
|
+
def status
|
66
|
+
puts(fetch_interaction.map { |arr| arr.join(': ') })
|
67
|
+
end
|
68
|
+
|
69
|
+
def fetch_interaction
|
70
|
+
Superbot::Cloud::Api.request(:show_interactive_run, params: common_request_params)
|
71
|
+
end
|
72
|
+
|
73
|
+
def empty_value?(value)
|
74
|
+
value.to_s.strip.empty?
|
75
|
+
end
|
76
|
+
|
77
|
+
def positive_number?(value)
|
78
|
+
return true if empty_value?(value) || value =~ /\A\d+\z/
|
79
|
+
|
80
|
+
puts("Incorrect argument value '#{value}', should be positive number or 0")
|
81
|
+
false
|
82
|
+
end
|
83
|
+
|
84
|
+
def help
|
85
|
+
puts "Interactive run commands:
|
86
|
+
|
87
|
+
bots Output number of active bots
|
88
|
+
loops Output number of consecutive invocations
|
89
|
+
bots [n] Scale number of active bots to [n]
|
90
|
+
loops [n] Scale number of consecutive invocations
|
91
|
+
status Show current run info
|
92
|
+
abort Abort current run and exit console
|
93
|
+
exit Exit from console"
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Superbot
|
4
|
+
module Cloud
|
5
|
+
module CLI
|
6
|
+
module Run
|
7
|
+
class CreateCommand < OrganizationBasedCommand
|
8
|
+
parameter "NAME", "the name of the test to delete", required: true
|
9
|
+
option ['--region'], 'REGION', 'Region for remote webdriver'
|
10
|
+
|
11
|
+
def execute
|
12
|
+
Superbot::Cloud::Api.request(:create_interactive_run, params: run_params)
|
13
|
+
puts "Cloud interactive run has been created"
|
14
|
+
end
|
15
|
+
|
16
|
+
def run_params
|
17
|
+
{
|
18
|
+
organization_name: organization,
|
19
|
+
test_name: name,
|
20
|
+
region: region
|
21
|
+
}.compact
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Superbot
|
4
|
+
module Cloud
|
5
|
+
module CLI
|
6
|
+
module Run
|
7
|
+
class ListCommand < BaseCommand
|
8
|
+
OUTPUT_HEADERS = {
|
9
|
+
id: { name: "ID", column_size: 10 },
|
10
|
+
test_name: { name: "Test", column_size: 25 },
|
11
|
+
region: { name: "Region", column_size: 20 },
|
12
|
+
status: { name: "Status", column_size: 10 },
|
13
|
+
parallel: { name: "Bots", column_size: 10 },
|
14
|
+
loop: { name: "Loop count", column_size: 10 }
|
15
|
+
}.freeze
|
16
|
+
|
17
|
+
option %w[-q --quiet], :flag, "Only show interactive run IDs"
|
18
|
+
option %w[-a --all], :flag, "Show all the interactive runs (including finished)"
|
19
|
+
|
20
|
+
def execute
|
21
|
+
list_interactive_runs
|
22
|
+
end
|
23
|
+
|
24
|
+
def list_interactive_runs
|
25
|
+
states = all? ? nil : %w[initial running]
|
26
|
+
api_response = Superbot::Cloud::Api.request(:interactive_run_list, params: { organization_name: organization, 'aasm_state[]': states })
|
27
|
+
|
28
|
+
abort api_response[:error] if api_response[:error]
|
29
|
+
abort "No active interactive runs found for organization #{api_response[:organization]}" if api_response[:interactive_runs].empty?
|
30
|
+
|
31
|
+
if quiet?
|
32
|
+
puts(api_response[:interactive_runs].map { |interactive_run| interactive_run[:id] })
|
33
|
+
else
|
34
|
+
puts "Organization: #{api_response[:organization]}"
|
35
|
+
puts "Interactive runs:"
|
36
|
+
puts OUTPUT_HEADERS.values.map { |header| header[:name].ljust(header[:column_size]) }.join
|
37
|
+
api_response[:interactive_runs].each do |interactive_run|
|
38
|
+
row = interactive_run.slice(*OUTPUT_HEADERS.keys).map do |key, value|
|
39
|
+
value.to_s.ljust(OUTPUT_HEADERS.dig(key, :column_size))
|
40
|
+
end.join
|
41
|
+
puts row
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Superbot
|
4
|
+
module Cloud
|
5
|
+
module CLI
|
6
|
+
module Run
|
7
|
+
class ScaleCommand < BaseCommand
|
8
|
+
parameter "ID", "the ID of run to scale", required: true
|
9
|
+
|
10
|
+
option ['--bots'], 'BOTS', 'number of active bots' do |bots|
|
11
|
+
Integer(bots)
|
12
|
+
end
|
13
|
+
|
14
|
+
option ['--loop'], 'LOOP_COUNT', 'number of repeated invocations', attribute_name: :loop_count do |loop_count|
|
15
|
+
Integer(loop_count)
|
16
|
+
end
|
17
|
+
|
18
|
+
def execute
|
19
|
+
scale_run
|
20
|
+
end
|
21
|
+
|
22
|
+
def scale_run
|
23
|
+
api_response = Superbot::Cloud::Api.request(:update_interactive_run, params: { id: id, organization_name: organization, parallel: bots, loop: loop_count }.compact)
|
24
|
+
puts "Scaled"
|
25
|
+
puts "bots: #{api_response[:parallel]}"
|
26
|
+
puts "loop: #{api_response[:loop]}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -1,34 +1,21 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative 'run/base_command'
|
4
|
+
require_relative 'run/create_command'
|
5
|
+
require_relative 'run/list_command'
|
6
|
+
require_relative 'run/abort_command'
|
7
|
+
require_relative 'run/scale_command'
|
8
|
+
require_relative 'run/console_command'
|
9
|
+
|
3
10
|
module Superbot
|
4
11
|
module Cloud
|
5
12
|
module CLI
|
6
|
-
class RunCommand <
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
def execute
|
14
|
-
schedule_test
|
15
|
-
end
|
16
|
-
|
17
|
-
def schedule_test
|
18
|
-
Superbot::Cloud::Api.request(:schedule_test, params: schedule_params)
|
19
|
-
puts "Cloud run has been scheduled"
|
20
|
-
end
|
21
|
-
|
22
|
-
def schedule_params
|
23
|
-
{
|
24
|
-
test_name: name,
|
25
|
-
region: region,
|
26
|
-
organization_name: organization,
|
27
|
-
parallel: bots,
|
28
|
-
starts_at: starts_at,
|
29
|
-
loop: loop_count
|
30
|
-
}.compact
|
31
|
-
end
|
13
|
+
class RunCommand < LoginRequiredCommand
|
14
|
+
subcommand ['create'], "Create new interactive test run", Run::CreateCommand
|
15
|
+
subcommand ['list'], "List your interactive runs", Run::ListCommand
|
16
|
+
subcommand ['abort'], "Abort run", Run::AbortCommand
|
17
|
+
subcommand ['scale'], "Scale your interactive run", Run::ScaleCommand
|
18
|
+
subcommand ['console'], "Interactive run console", Run::ConsoleCommand
|
32
19
|
end
|
33
20
|
end
|
34
21
|
end
|
@@ -13,12 +13,10 @@ module Superbot
|
|
13
13
|
|
14
14
|
def delete_schedule
|
15
15
|
id_list.each do |schedule_id|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
p # skip to next schedule
|
21
|
-
end
|
16
|
+
Superbot::Cloud::Api.request(:cancel_schedule, params: { id: schedule_id, organization_name: organization })
|
17
|
+
puts "Test schedule #{schedule_id} successfully cancelled"
|
18
|
+
rescue SystemExit
|
19
|
+
p # skip to next schedule
|
22
20
|
end
|
23
21
|
end
|
24
22
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Superbot
|
4
|
+
module Cloud
|
5
|
+
module CLI
|
6
|
+
module Schedule
|
7
|
+
class CreateCommand < BaseCommand
|
8
|
+
parameter "NAME", "the name of the test to delete", required: true
|
9
|
+
option ['--region'], 'REGION', 'Region for remote webdriver'
|
10
|
+
option ['--when'], 'WHEN', "When to schedule a test (either asap or cron expression)", default: 'asap', attribute_name: :starts_at
|
11
|
+
option ['--bots'], 'BOTS', 'Number of running cloud superbots', default: 1
|
12
|
+
option ['--loop'], 'LOOP_COUNT', 'Number of runs for each bot', default: 1, attribute_name: :loop_count
|
13
|
+
|
14
|
+
def execute
|
15
|
+
schedule_test
|
16
|
+
end
|
17
|
+
|
18
|
+
def schedule_test
|
19
|
+
Superbot::Cloud::Api.request(:schedule_test, params: schedule_params)
|
20
|
+
puts "Cloud run has been scheduled"
|
21
|
+
end
|
22
|
+
|
23
|
+
def schedule_params
|
24
|
+
{
|
25
|
+
test_name: name,
|
26
|
+
region: region,
|
27
|
+
organization_name: organization,
|
28
|
+
parallel: bots,
|
29
|
+
starts_at: starts_at,
|
30
|
+
loop: loop_count
|
31
|
+
}.compact
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -3,11 +3,13 @@
|
|
3
3
|
require_relative 'schedule/base_command'
|
4
4
|
require_relative 'schedule/list_command'
|
5
5
|
require_relative 'schedule/cancel_command'
|
6
|
+
require_relative 'schedule/create_command'
|
6
7
|
|
7
8
|
module Superbot
|
8
9
|
module Cloud
|
9
10
|
module CLI
|
10
11
|
class ScheduleCommand < LoginRequiredCommand
|
12
|
+
subcommand ['create'], "Create new scheduled run", Schedule::CreateCommand
|
11
13
|
subcommand ['list'], "List your schedules", Schedule::ListCommand
|
12
14
|
subcommand ['cancel'], "Cancel your schedule", Schedule::CancelCommand
|
13
15
|
end
|
@@ -5,15 +5,19 @@ module Superbot
|
|
5
5
|
module CLI
|
6
6
|
module Test
|
7
7
|
class DeleteCommand < BaseCommand
|
8
|
-
parameter "NAME", "the name of the test to delete", required: true
|
8
|
+
parameter "NAME ...", "the name of the test to delete", required: true
|
9
9
|
|
10
10
|
def execute
|
11
11
|
delete_test
|
12
12
|
end
|
13
13
|
|
14
14
|
def delete_test
|
15
|
-
|
16
|
-
|
15
|
+
name_list.each do |name|
|
16
|
+
Superbot::Cloud::Api.request(:delete_test, params: { name: name, organization_name: organization })
|
17
|
+
puts "Tests #{name} successfully deleted"
|
18
|
+
rescue SystemExit => e
|
19
|
+
puts "Test #{name} removal failed: #{e.message}"
|
20
|
+
end
|
17
21
|
end
|
18
22
|
end
|
19
23
|
end
|
@@ -5,17 +5,22 @@ module Superbot
|
|
5
5
|
module CLI
|
6
6
|
module Test
|
7
7
|
class ListCommand < BaseCommand
|
8
|
+
option %w[-q --quiet], :flag, "Only show test names"
|
9
|
+
|
8
10
|
def execute
|
9
11
|
list_tests
|
10
12
|
end
|
11
13
|
|
12
14
|
def list_tests
|
13
15
|
api_response = Superbot::Cloud::Api.request(:test_list, params: { organization_name: organization })
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
puts
|
16
|
+
if quiet?
|
17
|
+
puts(api_response[:tests].map { |test| test[:name] })
|
18
|
+
else
|
19
|
+
puts "Organization: #{api_response[:organization]}"
|
20
|
+
puts "Tests:"
|
21
|
+
api_response[:tests].each do |test|
|
22
|
+
puts(test[:name], test[:files].map { |f| "- #{f[:filename]}" })
|
23
|
+
end
|
19
24
|
end
|
20
25
|
end
|
21
26
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: superbot-cloud
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Superbots
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-01-
|
11
|
+
date: 2019-01-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: multipart-post
|
@@ -148,9 +148,16 @@ files:
|
|
148
148
|
- lib/superbot/cloud/cli/organization_based_command.rb
|
149
149
|
- lib/superbot/cloud/cli/organization_command.rb
|
150
150
|
- lib/superbot/cloud/cli/root_command.rb
|
151
|
+
- lib/superbot/cloud/cli/run/abort_command.rb
|
152
|
+
- lib/superbot/cloud/cli/run/base_command.rb
|
153
|
+
- lib/superbot/cloud/cli/run/console_command.rb
|
154
|
+
- lib/superbot/cloud/cli/run/create_command.rb
|
155
|
+
- lib/superbot/cloud/cli/run/list_command.rb
|
156
|
+
- lib/superbot/cloud/cli/run/scale_command.rb
|
151
157
|
- lib/superbot/cloud/cli/run_command.rb
|
152
158
|
- lib/superbot/cloud/cli/schedule/base_command.rb
|
153
159
|
- lib/superbot/cloud/cli/schedule/cancel_command.rb
|
160
|
+
- lib/superbot/cloud/cli/schedule/create_command.rb
|
154
161
|
- lib/superbot/cloud/cli/schedule/list_command.rb
|
155
162
|
- lib/superbot/cloud/cli/schedule_command.rb
|
156
163
|
- lib/superbot/cloud/cli/test/base_command.rb
|