cl-magic 1.2.9 → 1.3.1

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