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.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +17 -10
  3. data/README.md +10 -2
  4. data/bin/cl +2 -1
  5. data/bin/common/process_pids +19 -0
  6. data/bin/install_gem +4 -4
  7. data/bin/world-scripts/build +135 -0
  8. data/bin/world-scripts/down +78 -0
  9. data/bin/world-scripts/get +112 -0
  10. data/bin/world-scripts/rm +76 -0
  11. data/bin/world-scripts/up +83 -0
  12. data/cl-magic.gemspec +1 -1
  13. data/lib/cl/magic/cl +1 -1
  14. data/lib/cl/magic/cl-ai-chat +1 -2
  15. data/lib/cl/magic/cl-ai-query +1 -2
  16. data/lib/cl/magic/cl-ai-store-jira +1 -2
  17. data/lib/cl/magic/cl-auth +1 -2
  18. data/lib/cl/magic/cl-chrome +108 -0
  19. data/lib/cl/magic/cl-curl +130 -0
  20. data/lib/cl/magic/cl-dk +4 -0
  21. data/lib/cl/magic/cl-dk-make +5 -3
  22. data/lib/cl/magic/cl-dk-make-world +10 -19
  23. data/lib/cl/magic/cl-dk-parts +1 -2
  24. data/lib/cl/magic/cl-dk-world +33 -20
  25. data/lib/cl/magic/cl-envkey +1 -2
  26. data/lib/cl/magic/cl-gc-sql +1 -2
  27. data/lib/cl/magic/cl-gc-tags +1 -2
  28. data/lib/cl/magic/cl-glab-commit +1 -2
  29. data/lib/cl/magic/cl-history +1 -2
  30. data/lib/cl/magic/cl-jira-fetch +1 -2
  31. data/lib/cl/magic/cl-jira-fetch-by-epics +1 -2
  32. data/lib/cl/magic/cl-jira-to-elastic +1 -2
  33. data/lib/cl/magic/cl-jira-to-markdown +1 -2
  34. data/lib/cl/magic/cl-jira-to-stats +1 -2
  35. data/lib/cl/magic/cl-kube-cp +1 -2
  36. data/lib/cl/magic/cl-kube-deployment +1 -2
  37. data/lib/cl/magic/cl-kube-ktx +1 -2
  38. data/lib/cl/magic/cl-kube-logs +1 -2
  39. data/lib/cl/magic/cl-kube-restart +1 -2
  40. data/lib/cl/magic/cl-kube-search +1 -2
  41. data/lib/cl/magic/cl-kube-search-all +1 -2
  42. data/lib/cl/magic/cl-kube-ssh +1 -2
  43. data/lib/cl/magic/cl-poll +1 -2
  44. data/lib/cl/magic/cl-sandbox +1 -2
  45. data/lib/cl/magic/cl-vault +1 -2
  46. data/lib/cl/magic/common/load_runner.rb +127 -0
  47. data/lib/cl/magic/common/sub_command.rb +51 -0
  48. data/lib/cl/magic/dk/world_settings.rb +26 -0
  49. data/lib/cl/magic/dk/yaml_arg_munger.rb +87 -8
  50. data/lib/cl/magic/version.rb +1 -1
  51. 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(' ')
@@ -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(' ')
@@ -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(' ')
@@ -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(' ')
@@ -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(' ')
@@ -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(' ')
@@ -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
- if compose_hash
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') : {}
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
- cmd = "cd #{@working_dir} && docker compose config 2> /dev/null"
52
- hash = YAML.load(`#{cmd}`)
53
- return hash ? hash : {}
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|
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Cl
4
4
  module Magic
5
- VERSION = "1.2.9"
5
+ VERSION = "1.3.1"
6
6
  end
7
7
  end
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.2.9
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: 2023-09-26 00:00:00.000000000 Z
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: optparse-subcommand
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-logger
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-command
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-prompt
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-spinner
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: tty-progressbar
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: concurrent-ruby
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: pastel
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: activesupport
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: baran
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.1.6
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: []