cl-magic 1.2.9 → 1.3.1
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/Gemfile.lock +17 -10
- data/README.md +10 -2
- data/bin/cl +2 -1
- data/bin/common/process_pids +19 -0
- data/bin/install_gem +4 -4
- data/bin/world-scripts/build +135 -0
- data/bin/world-scripts/down +78 -0
- data/bin/world-scripts/get +112 -0
- data/bin/world-scripts/rm +76 -0
- data/bin/world-scripts/up +83 -0
- data/cl-magic.gemspec +1 -1
- data/lib/cl/magic/cl +1 -1
- data/lib/cl/magic/cl-ai-chat +1 -2
- data/lib/cl/magic/cl-ai-query +1 -2
- data/lib/cl/magic/cl-ai-store-jira +1 -2
- data/lib/cl/magic/cl-auth +1 -2
- data/lib/cl/magic/cl-chrome +108 -0
- data/lib/cl/magic/cl-curl +130 -0
- data/lib/cl/magic/cl-dk +4 -0
- data/lib/cl/magic/cl-dk-make +5 -3
- data/lib/cl/magic/cl-dk-make-world +10 -19
- data/lib/cl/magic/cl-dk-parts +1 -2
- data/lib/cl/magic/cl-dk-world +33 -20
- data/lib/cl/magic/cl-envkey +1 -2
- data/lib/cl/magic/cl-gc-sql +1 -2
- data/lib/cl/magic/cl-gc-tags +1 -2
- data/lib/cl/magic/cl-glab-commit +1 -2
- data/lib/cl/magic/cl-history +1 -2
- data/lib/cl/magic/cl-jira-fetch +1 -2
- data/lib/cl/magic/cl-jira-fetch-by-epics +1 -2
- data/lib/cl/magic/cl-jira-to-elastic +1 -2
- data/lib/cl/magic/cl-jira-to-markdown +1 -2
- data/lib/cl/magic/cl-jira-to-stats +1 -2
- data/lib/cl/magic/cl-kube-cp +1 -2
- data/lib/cl/magic/cl-kube-deployment +1 -2
- data/lib/cl/magic/cl-kube-ktx +1 -2
- data/lib/cl/magic/cl-kube-logs +1 -2
- data/lib/cl/magic/cl-kube-restart +1 -2
- data/lib/cl/magic/cl-kube-search +1 -2
- data/lib/cl/magic/cl-kube-search-all +1 -2
- data/lib/cl/magic/cl-kube-ssh +1 -2
- data/lib/cl/magic/cl-poll +1 -2
- data/lib/cl/magic/cl-sandbox +1 -2
- data/lib/cl/magic/cl-vault +1 -2
- data/lib/cl/magic/common/load_runner.rb +127 -0
- data/lib/cl/magic/common/sub_command.rb +51 -0
- data/lib/cl/magic/dk/world_settings.rb +26 -0
- data/lib/cl/magic/dk/yaml_arg_munger.rb +87 -8
- data/lib/cl/magic/version.rb +1 -1
- metadata +26 -16
@@ -1,7 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# Find deployment in K8 and describe it
|
3
|
-
require 'optparse'
|
4
|
-
require 'optparse/subcommand'
|
5
3
|
require 'tty-command'
|
6
4
|
require 'tty-prompt'
|
7
5
|
require 'json'
|
@@ -10,6 +8,7 @@ require 'pastel'
|
|
10
8
|
require 'cl/magic/common/common_options.rb'
|
11
9
|
require 'cl/magic/common/logging.rb'
|
12
10
|
require 'cl/magic/common/kubectl.rb'
|
11
|
+
require 'cl/magic/common/sub_command.rb'
|
13
12
|
|
14
13
|
@logger = get_logger()
|
15
14
|
@cl_cmd_name = File.basename(__FILE__).split('-').join(' ')
|
data/lib/cl/magic/cl-kube-ktx
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# Find/save K8 cluster & namespace;then '--ktx' other kube commands
|
3
|
-
require 'optparse'
|
4
|
-
require 'optparse/subcommand'
|
5
3
|
require 'tty-command'
|
6
4
|
require 'tty-prompt'
|
7
5
|
require 'json'
|
@@ -10,6 +8,7 @@ require 'pastel'
|
|
10
8
|
require 'cl/magic/common/common_options.rb'
|
11
9
|
require 'cl/magic/common/logging.rb'
|
12
10
|
require 'cl/magic/common/kubectl.rb'
|
11
|
+
require 'cl/magic/common/sub_command.rb'
|
13
12
|
|
14
13
|
@logger = get_logger()
|
15
14
|
@cl_cmd_name = File.basename(__FILE__).split('-').join(' ')
|
data/lib/cl/magic/cl-kube-logs
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# Find pods in k8 and follow the logs
|
3
|
-
require 'optparse'
|
4
|
-
require 'optparse/subcommand'
|
5
3
|
require 'tty-command'
|
6
4
|
require 'tty-prompt'
|
7
5
|
|
@@ -9,6 +7,7 @@ require 'cl/magic/common/common_options.rb'
|
|
9
7
|
require 'cl/magic/common/logging.rb'
|
10
8
|
require 'cl/magic/common/gcloud.rb'
|
11
9
|
require 'cl/magic/common/kubectl.rb'
|
10
|
+
require 'cl/magic/common/sub_command.rb'
|
12
11
|
|
13
12
|
@logger = get_logger()
|
14
13
|
@cl_cmd_name = File.basename(__FILE__).split('-').join(' ')
|
@@ -1,7 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# Find K8 deployment and reboot pods
|
3
|
-
require 'optparse'
|
4
|
-
require 'optparse/subcommand'
|
5
3
|
require 'tty-command'
|
6
4
|
require 'tty-prompt'
|
7
5
|
|
@@ -9,6 +7,7 @@ require 'cl/magic/common/common_options.rb'
|
|
9
7
|
require 'cl/magic/common/logging.rb'
|
10
8
|
require 'cl/magic/common/gcloud.rb'
|
11
9
|
require 'cl/magic/common/kubectl.rb'
|
10
|
+
require 'cl/magic/common/sub_command.rb'
|
12
11
|
|
13
12
|
@logger = get_logger()
|
14
13
|
@cl_cmd_name = File.basename(__FILE__).split('-').join(' ')
|
data/lib/cl/magic/cl-kube-search
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# Search resources in k8 and list them;then select one to describe it
|
3
|
-
require 'optparse'
|
4
|
-
require 'optparse/subcommand'
|
5
3
|
require 'tty-command'
|
6
4
|
|
7
5
|
require 'cl/magic/common/common_options.rb'
|
8
6
|
require 'cl/magic/common/logging.rb'
|
9
7
|
require 'cl/magic/common/kubectl.rb'
|
8
|
+
require 'cl/magic/common/sub_command.rb'
|
10
9
|
|
11
10
|
@logger = get_logger()
|
12
11
|
@cl_cmd_name = File.basename(__FILE__).split('-').join(' ')
|
@@ -1,7 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# Same as search, but across all clusters
|
3
|
-
require 'optparse'
|
4
|
-
require 'optparse/subcommand'
|
5
3
|
require 'tty-command'
|
6
4
|
require 'tty-prompt'
|
7
5
|
require 'json'
|
@@ -10,6 +8,7 @@ require 'pastel'
|
|
10
8
|
require 'cl/magic/common/common_options.rb'
|
11
9
|
require 'cl/magic/common/logging.rb'
|
12
10
|
require 'cl/magic/common/kubectl.rb'
|
11
|
+
require 'cl/magic/common/sub_command.rb'
|
13
12
|
|
14
13
|
@logger = get_logger()
|
15
14
|
@cl_cmd_name = File.basename(__FILE__).split('-').join(' ')
|
data/lib/cl/magic/cl-kube-ssh
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# Find container in k8 and ssh into it
|
3
|
-
require 'optparse'
|
4
|
-
require 'optparse/subcommand'
|
5
3
|
require 'tty-command'
|
6
4
|
require 'tty-prompt'
|
7
5
|
require 'json'
|
@@ -10,6 +8,7 @@ require 'pastel'
|
|
10
8
|
require 'cl/magic/common/common_options.rb'
|
11
9
|
require 'cl/magic/common/logging.rb'
|
12
10
|
require 'cl/magic/common/kubectl.rb'
|
11
|
+
require 'cl/magic/common/sub_command.rb'
|
13
12
|
|
14
13
|
@logger = get_logger()
|
15
14
|
@cl_cmd_name = File.basename(__FILE__).split('-').join(' ')
|
data/lib/cl/magic/cl-poll
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# Run any command every second
|
3
|
-
require 'optparse'
|
4
|
-
require 'optparse/subcommand'
|
5
3
|
require 'tty-command'
|
6
4
|
require 'tty-prompt'
|
7
5
|
|
@@ -9,6 +7,7 @@ require 'cl/magic/common/common_options.rb'
|
|
9
7
|
require 'cl/magic/common/logging.rb'
|
10
8
|
require 'cl/magic/common/gcloud.rb'
|
11
9
|
require 'cl/magic/common/kubectl.rb'
|
10
|
+
require 'cl/magic/common/sub_command.rb'
|
12
11
|
|
13
12
|
@logger = get_logger()
|
14
13
|
@cl_cmd_name = File.basename(__FILE__).split('-').join(' ')
|
data/lib/cl/magic/cl-sandbox
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# Where cl commands are made
|
3
|
-
require 'optparse'
|
4
|
-
require 'optparse/subcommand'
|
5
3
|
require 'tty-command'
|
6
4
|
require 'tty-prompt'
|
7
5
|
|
@@ -9,6 +7,7 @@ require 'cl/magic/common/common_options.rb'
|
|
9
7
|
require 'cl/magic/common/logging.rb'
|
10
8
|
require 'cl/magic/common/gcloud.rb'
|
11
9
|
require 'cl/magic/common/kubectl.rb'
|
10
|
+
require 'cl/magic/common/sub_command.rb'
|
12
11
|
|
13
12
|
@logger = get_logger()
|
14
13
|
@cl_cmd_name = File.basename(__FILE__).split('-').join(' ')
|
data/lib/cl/magic/cl-vault
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# Explore HashiCorp vault
|
3
|
-
require 'optparse'
|
4
|
-
require 'optparse/subcommand'
|
5
3
|
require 'tty-command'
|
6
4
|
require 'tty-prompt'
|
7
5
|
|
@@ -9,6 +7,7 @@ require 'cl/magic/common/common_options.rb'
|
|
9
7
|
require 'cl/magic/common/logging.rb'
|
10
8
|
require 'cl/magic/common/gcloud.rb'
|
11
9
|
require 'cl/magic/common/kubectl.rb'
|
10
|
+
require 'cl/magic/common/sub_command.rb'
|
12
11
|
|
13
12
|
@logger = get_logger()
|
14
13
|
@cl_cmd_name = File.basename(__FILE__).split('-').join(' ')
|
@@ -0,0 +1,127 @@
|
|
1
|
+
|
2
|
+
module LoadRunner
|
3
|
+
|
4
|
+
class Queue
|
5
|
+
attr_accessor :failures
|
6
|
+
|
7
|
+
def initialize(logger = nil)
|
8
|
+
@logger = logger if logger!=nil
|
9
|
+
|
10
|
+
# setup
|
11
|
+
@threads = []
|
12
|
+
@transactions = 0
|
13
|
+
@num_threads = 1
|
14
|
+
@failures = 0
|
15
|
+
end
|
16
|
+
|
17
|
+
def load(num_threads=1, &work)
|
18
|
+
@num_threads = num_threads
|
19
|
+
@work = work # save work for new threads
|
20
|
+
|
21
|
+
# create threads
|
22
|
+
num_threads.times do
|
23
|
+
|
24
|
+
# do work
|
25
|
+
create_thread
|
26
|
+
|
27
|
+
# log
|
28
|
+
@logger.debug "action=create|name=thread" if @logger!=nil
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def run()
|
33
|
+
@start_time = Time.now
|
34
|
+
start_all
|
35
|
+
wait_until_finished
|
36
|
+
end
|
37
|
+
|
38
|
+
def run_and_stagger(max_sleep=10)
|
39
|
+
@start_time = Time.now
|
40
|
+
start_all { rand_sleep(max_sleep) }
|
41
|
+
wait_until_finished
|
42
|
+
end
|
43
|
+
|
44
|
+
def run_for_durration(num_seconds, max_sleep=0)
|
45
|
+
@start_time = Time.now
|
46
|
+
|
47
|
+
# keep them running
|
48
|
+
to_time = Time.now + num_seconds
|
49
|
+
|
50
|
+
# log
|
51
|
+
@logger.info "action=run_for_durration|until=#{to_time}" if @logger!=nil
|
52
|
+
|
53
|
+
# durration
|
54
|
+
while (Time.now <= to_time)
|
55
|
+
|
56
|
+
# start threads
|
57
|
+
@threads.each do |t|
|
58
|
+
break if Time.now > to_time
|
59
|
+
|
60
|
+
# restart threads
|
61
|
+
if (t.status=="sleep")
|
62
|
+
rand_sleep(max_sleep)
|
63
|
+
t.run
|
64
|
+
end
|
65
|
+
|
66
|
+
if (t.status==false or t.status == nil)
|
67
|
+
@transactions += 1
|
68
|
+
@threads.delete t
|
69
|
+
thread = create_thread
|
70
|
+
rand_sleep(max_sleep)
|
71
|
+
thread.run
|
72
|
+
|
73
|
+
# log
|
74
|
+
@logger.debug "thread_count=#{@threads.count}" if @logger!=nil
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
private
|
81
|
+
|
82
|
+
def create_thread()
|
83
|
+
thread = Thread.new do
|
84
|
+
@work.call
|
85
|
+
end
|
86
|
+
@threads << thread
|
87
|
+
sleep(0.1)
|
88
|
+
return thread
|
89
|
+
end
|
90
|
+
|
91
|
+
def start_all(&block)
|
92
|
+
@threads.each do |t|
|
93
|
+
|
94
|
+
# pausing block?
|
95
|
+
block
|
96
|
+
|
97
|
+
# log
|
98
|
+
@logger.debug "action=start|name=thread|status=#{t.status}" if @logger!=nil
|
99
|
+
|
100
|
+
# run thread
|
101
|
+
t.run unless t.status==false
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
# wait for threads to complete
|
106
|
+
def wait_until_finished()
|
107
|
+
@threads.each do |t|
|
108
|
+
@logger.debug "action=check_status|name=thread|status=#{t.status}" if @logger!=nil
|
109
|
+
if (t.status=="run" or t.status=="sleep")
|
110
|
+
t.join; # wait to finish
|
111
|
+
@logger.debug "action=done|name=thread|status=#{t.status}" if @logger!=nil
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
# log
|
116
|
+
@logger.success "transactions=#{@transactions}|threads=#{@num_threads}|failures=#{@failures}|durration=#{Time.now - @start_time}" if @logger!=nil
|
117
|
+
end
|
118
|
+
|
119
|
+
# random sleep
|
120
|
+
def rand_sleep(max_sleep=10)
|
121
|
+
if max_sleep > 0
|
122
|
+
time_to_sleep = rand(max_sleep)
|
123
|
+
sleep(time_to_sleep)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
|
3
|
+
OptionParser.send(:alias_method, :summarize_without_subcommand, :summarize)
|
4
|
+
|
5
|
+
class OptionParser
|
6
|
+
module Subcommand
|
7
|
+
def subcommand(key, &block)
|
8
|
+
subcommand = lambda { OptionParser.new(&block) }
|
9
|
+
subcommands[key.to_s] = subcommand
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def parse_with_subcommand!(*args)
|
15
|
+
subcommand = catch(:subcommand) do
|
16
|
+
args.delete({:into=>nil}) # lose the {:into=>nil}
|
17
|
+
return order!(*args) { |sub| throw :subcommand, sub }
|
18
|
+
end
|
19
|
+
|
20
|
+
sub_parser = subcommands[subcommand.to_s]
|
21
|
+
if sub_parser
|
22
|
+
sub_parser.call.send(:parse!, *args)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def summarize_with_subcommand(to = [], width = @summary_width, max = width - 1, indent = @summary_indent, &blk)
|
27
|
+
summarize_without_subcommand(to, width, max, indent, &blk)
|
28
|
+
to << "\n"
|
29
|
+
subcommands.each do |key, sub_parser|
|
30
|
+
to << indent + key + "\n"
|
31
|
+
sub_parser.call.send(:summarize, to, width, max, indent + " ", &blk)
|
32
|
+
end
|
33
|
+
to
|
34
|
+
end
|
35
|
+
|
36
|
+
def subcommands
|
37
|
+
@subcommands ||= {}
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
include Subcommand
|
42
|
+
|
43
|
+
def parse!(*args)
|
44
|
+
parse_with_subcommand!(*args)
|
45
|
+
self
|
46
|
+
end
|
47
|
+
|
48
|
+
def summarize(to = [], width = @summary_width, max = width - 1, indent = @summary_indent, &blk)
|
49
|
+
summarize_with_subcommand(to, width, max, indent, &blk)
|
50
|
+
end
|
51
|
+
end
|
@@ -7,6 +7,24 @@ class WorldSettings
|
|
7
7
|
@working_dir = working_dir
|
8
8
|
end
|
9
9
|
|
10
|
+
#
|
11
|
+
# world yaml
|
12
|
+
#
|
13
|
+
|
14
|
+
def get_world_yml_hash()
|
15
|
+
yaml_filepath = File.join(self.get_world_path_from_settings, "world.yml")
|
16
|
+
if File.exist?(yaml_filepath)
|
17
|
+
contents = File.read(yaml_filepath)
|
18
|
+
contents.gsub!('<dk-working-path>', @working_dir)
|
19
|
+
return YAML.load(contents)
|
20
|
+
end
|
21
|
+
return nil
|
22
|
+
end
|
23
|
+
|
24
|
+
#
|
25
|
+
# world settings
|
26
|
+
#
|
27
|
+
|
10
28
|
def get_world_settings_hash()
|
11
29
|
filepath = get_world_settings_filepath()
|
12
30
|
return File.exist?(filepath) ? YAML.load_file(filepath) : {}
|
@@ -34,6 +52,14 @@ class WorldSettings
|
|
34
52
|
return ""
|
35
53
|
end
|
36
54
|
|
55
|
+
def get_code_path_from_settings()
|
56
|
+
world_settings = get_world_settings_hash()
|
57
|
+
if world_settings.key?(:code_path)
|
58
|
+
return File.join(world_settings[:code_path])
|
59
|
+
end
|
60
|
+
return ""
|
61
|
+
end
|
62
|
+
|
37
63
|
private
|
38
64
|
|
39
65
|
def get_repo_basename()
|
@@ -12,11 +12,10 @@ class YamlArgMunger
|
|
12
12
|
compose_hash = get_base_compose_hash()
|
13
13
|
dk_parts_hash = {}
|
14
14
|
dk_make_hash = {}
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
end
|
15
|
+
|
16
|
+
compose_hash = merge_world_files(compose_hash, show_help=ARGV.include?("--help"))
|
17
|
+
dk_parts_hash = compose_hash['x-dk-parts'] ? compose_hash.delete('x-dk-parts') : {}
|
18
|
+
dk_make_hash = compose_hash['x-dk-make'] ? compose_hash.delete('x-dk-make') : {}
|
20
19
|
return compose_hash, dk_parts_hash, dk_make_hash
|
21
20
|
end
|
22
21
|
|
@@ -48,9 +47,27 @@ class YamlArgMunger
|
|
48
47
|
private
|
49
48
|
|
50
49
|
def get_base_compose_hash()
|
51
|
-
|
52
|
-
|
53
|
-
|
50
|
+
p2_file_path=".cl-dk-config.output"
|
51
|
+
cmd = "cd #{@working_dir} && docker compose config --no-normalize 2> #{p2_file_path}"
|
52
|
+
config_output = `#{cmd}`
|
53
|
+
if $?.success?
|
54
|
+
hash = YAML.load(config_output)
|
55
|
+
hotfix_environment_array(hash)
|
56
|
+
hotfix_x_dk_settings(hash)
|
57
|
+
return hash ? hash : {}
|
58
|
+
else
|
59
|
+
|
60
|
+
# is config invalid?
|
61
|
+
p2_output = `cd #{@working_dir} && cat #{p2_file_path}` # get p2 output
|
62
|
+
`cd #{@working_dir} && rm #{p2_file_path}` # clean up file
|
63
|
+
unless p2_output.include? "no configuration file provided"
|
64
|
+
puts "🔥 invalid docker config"
|
65
|
+
exit 1
|
66
|
+
end
|
67
|
+
|
68
|
+
# otherwise support no base config
|
69
|
+
return {}
|
70
|
+
end
|
54
71
|
end
|
55
72
|
|
56
73
|
def merge_world_files(compose_hash, show_help=false)
|
@@ -75,12 +92,74 @@ class YamlArgMunger
|
|
75
92
|
|
76
93
|
# yml merge
|
77
94
|
yml_hash = YAML.load(contents)
|
95
|
+
hotfix_environment_array(yml_hash)
|
78
96
|
compose_hash = dk_merge_and_remove(compose_hash, yml_hash)
|
79
97
|
end
|
80
98
|
end
|
81
99
|
return compose_hash
|
82
100
|
end
|
83
101
|
|
102
|
+
#
|
103
|
+
# docker compose config - converts 'environment' into an object
|
104
|
+
# and that messes up munging. So we are reversing that
|
105
|
+
#
|
106
|
+
|
107
|
+
def hotfix_environment_array(h)
|
108
|
+
stack = [h]
|
109
|
+
while stack.any?
|
110
|
+
ch = stack.pop
|
111
|
+
ch.each do |key, value|
|
112
|
+
if key.to_s == "environment"
|
113
|
+
if value.is_a?(Hash)
|
114
|
+
ch[key] = value.map { |k, v| "#{k}=#{v}" }
|
115
|
+
end
|
116
|
+
elsif value.is_a?(Hash)
|
117
|
+
stack.push(value)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
#
|
124
|
+
# docker compose config - alphabetizes everything
|
125
|
+
# so we'll only get x-dk settings from a file docker-compose.yml
|
126
|
+
#
|
127
|
+
|
128
|
+
def hotfix_x_dk_settings(compose_hash)
|
129
|
+
|
130
|
+
# remove x-dk settings
|
131
|
+
compose_hash.delete('x-dk-parts')
|
132
|
+
compose_hash.delete('x-dk-make')
|
133
|
+
|
134
|
+
# fetch them directly
|
135
|
+
supported_paths = [
|
136
|
+
'compose.yaml',
|
137
|
+
'compose.yml',
|
138
|
+
'docker-compose.yaml',
|
139
|
+
'docker-compose.yml'
|
140
|
+
]
|
141
|
+
raw_compose_hash = nil
|
142
|
+
supported_paths.each do |filepath|
|
143
|
+
full_filepath = File.join(@working_dir, filepath)
|
144
|
+
if File.exist?(full_filepath)
|
145
|
+
begin
|
146
|
+
raw_compose_hash = YAML.safe_load(File.read(full_filepath))
|
147
|
+
break;
|
148
|
+
rescue StandardError => e
|
149
|
+
# Handle any errors during parsing
|
150
|
+
puts "Error parsing YAML file #{full_filepath}: #{e.message}"
|
151
|
+
exit 1
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
compose_hash['x-dk-parts'] = raw_compose_hash['x-dk-parts']
|
156
|
+
compose_hash['x-dk-make'] = raw_compose_hash['x-dk-make']
|
157
|
+
end
|
158
|
+
|
159
|
+
#
|
160
|
+
# our dk hash merging process
|
161
|
+
#
|
162
|
+
|
84
163
|
class ::Hash
|
85
164
|
def dk_merge(second)
|
86
165
|
merger = proc { |_, v1, v2|
|
data/lib/cl/magic/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cl-magic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Don Najd
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-04-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: tty-logger
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name: tty-
|
42
|
+
name: tty-command
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name: tty-
|
56
|
+
name: tty-prompt
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
@@ -67,7 +67,7 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name: tty-
|
70
|
+
name: tty-spinner
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
@@ -81,7 +81,7 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name: tty-
|
84
|
+
name: tty-progressbar
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - ">="
|
@@ -95,7 +95,7 @@ dependencies:
|
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: concurrent-ruby
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - ">="
|
@@ -109,7 +109,7 @@ dependencies:
|
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
112
|
+
name: pastel
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - ">="
|
@@ -123,7 +123,7 @@ dependencies:
|
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
126
|
+
name: activesupport
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - ">="
|
@@ -137,7 +137,7 @@ dependencies:
|
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
140
|
+
name: baran
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
143
|
- - ">="
|
@@ -151,7 +151,7 @@ dependencies:
|
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
154
|
+
name: selenium-webdriver
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
157
|
- - ">="
|
@@ -189,9 +189,15 @@ files:
|
|
189
189
|
- Gemfile.lock
|
190
190
|
- README.md
|
191
191
|
- bin/cl
|
192
|
+
- bin/common/process_pids
|
192
193
|
- bin/console
|
193
194
|
- bin/install_gem
|
194
195
|
- bin/setup
|
196
|
+
- bin/world-scripts/build
|
197
|
+
- bin/world-scripts/down
|
198
|
+
- bin/world-scripts/get
|
199
|
+
- bin/world-scripts/rm
|
200
|
+
- bin/world-scripts/up
|
195
201
|
- cl-magic.gemspec
|
196
202
|
- lib/cl/magic.rb
|
197
203
|
- lib/cl/magic/cl
|
@@ -199,6 +205,8 @@ files:
|
|
199
205
|
- lib/cl/magic/cl-ai-query
|
200
206
|
- lib/cl/magic/cl-ai-store-jira
|
201
207
|
- lib/cl/magic/cl-auth
|
208
|
+
- lib/cl/magic/cl-chrome
|
209
|
+
- lib/cl/magic/cl-curl
|
202
210
|
- lib/cl/magic/cl-dk
|
203
211
|
- lib/cl/magic/cl-dk-make
|
204
212
|
- lib/cl/magic/cl-dk-make-world
|
@@ -232,9 +240,11 @@ files:
|
|
232
240
|
- lib/cl/magic/common/gcloud.rb
|
233
241
|
- lib/cl/magic/common/jira.rb
|
234
242
|
- lib/cl/magic/common/kubectl.rb
|
243
|
+
- lib/cl/magic/common/load_runner.rb
|
235
244
|
- lib/cl/magic/common/logging.rb
|
236
245
|
- lib/cl/magic/common/milvus.rb
|
237
246
|
- lib/cl/magic/common/parse_and_pick.rb
|
247
|
+
- lib/cl/magic/common/sub_command.rb
|
238
248
|
- lib/cl/magic/dk/help_printer.rb
|
239
249
|
- lib/cl/magic/dk/parts_merger.rb
|
240
250
|
- lib/cl/magic/dk/world_settings.rb
|
@@ -248,7 +258,7 @@ metadata:
|
|
248
258
|
homepage_uri: https://gitlab.com/beesbot/cl-magic
|
249
259
|
source_code_uri: https://gitlab.com/beesbot/cl-magic
|
250
260
|
changelog_uri: https://gitlab.com/beesbot/cl-magic
|
251
|
-
post_install_message:
|
261
|
+
post_install_message:
|
252
262
|
rdoc_options: []
|
253
263
|
require_paths:
|
254
264
|
- lib
|
@@ -263,8 +273,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
263
273
|
- !ruby/object:Gem::Version
|
264
274
|
version: '0'
|
265
275
|
requirements: []
|
266
|
-
rubygems_version: 3.
|
267
|
-
signing_key:
|
276
|
+
rubygems_version: 3.3.7
|
277
|
+
signing_key:
|
268
278
|
specification_version: 4
|
269
279
|
summary: Magic tools for a turnkey developer experience
|
270
280
|
test_files: []
|