makit 0.0.98 → 0.0.111

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 (148) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +41 -0
  3. data/exe/makit +5 -0
  4. data/lib/makit/apache.rb +7 -11
  5. data/lib/makit/cli/build_commands.rb +500 -0
  6. data/lib/makit/cli/generators/base_generator.rb +74 -0
  7. data/lib/makit/cli/generators/dotnet_generator.rb +50 -0
  8. data/lib/makit/cli/generators/generator_factory.rb +49 -0
  9. data/lib/makit/cli/generators/node_generator.rb +50 -0
  10. data/lib/makit/cli/generators/ruby_generator.rb +77 -0
  11. data/lib/makit/cli/generators/rust_generator.rb +50 -0
  12. data/lib/makit/cli/generators/templates/dotnet_templates.rb +167 -0
  13. data/lib/makit/cli/generators/templates/node_templates.rb +161 -0
  14. data/lib/makit/cli/generators/templates/ruby/gemfile.rb +26 -0
  15. data/lib/makit/cli/generators/templates/ruby/gemspec.rb +40 -0
  16. data/lib/makit/cli/generators/templates/ruby/main_lib.rb +33 -0
  17. data/lib/makit/cli/generators/templates/ruby/rakefile.rb +35 -0
  18. data/lib/makit/cli/generators/templates/ruby/readme.rb +63 -0
  19. data/lib/makit/cli/generators/templates/ruby/test.rb +39 -0
  20. data/lib/makit/cli/generators/templates/ruby/test_helper.rb +29 -0
  21. data/lib/makit/cli/generators/templates/ruby/version.rb +29 -0
  22. data/lib/makit/cli/generators/templates/rust_templates.rb +128 -0
  23. data/lib/makit/cli/main.rb +48 -19
  24. data/lib/makit/cli/project_commands.rb +868 -0
  25. data/lib/makit/cli/repository_commands.rb +661 -0
  26. data/lib/makit/cli/utility_commands.rb +521 -0
  27. data/lib/makit/command_runner.rb +187 -128
  28. data/lib/makit/commands/compatibility.rb +365 -0
  29. data/lib/makit/commands/factory.rb +359 -0
  30. data/lib/makit/commands/middleware/base.rb +73 -0
  31. data/lib/makit/commands/middleware/cache.rb +248 -0
  32. data/lib/makit/commands/middleware/command_logger.rb +323 -0
  33. data/lib/makit/commands/middleware/unified_logger.rb +243 -0
  34. data/lib/makit/commands/middleware/validator.rb +269 -0
  35. data/lib/makit/commands/request.rb +254 -0
  36. data/lib/makit/commands/result.rb +323 -0
  37. data/lib/makit/commands/runner.rb +317 -0
  38. data/lib/makit/commands/strategies/base.rb +160 -0
  39. data/lib/makit/commands/strategies/synchronous.rb +134 -0
  40. data/lib/makit/commands.rb +24 -3
  41. data/lib/makit/configuration/gitlab_helper.rb +60 -0
  42. data/lib/makit/configuration/project.rb +127 -0
  43. data/lib/makit/configuration/rakefile_helper.rb +43 -0
  44. data/lib/makit/configuration/step.rb +34 -0
  45. data/lib/makit/configuration.rb +14 -0
  46. data/lib/makit/content/default_gitignore.rb +4 -2
  47. data/lib/makit/content/default_rakefile.rb +4 -2
  48. data/lib/makit/content/gem_rakefile.rb +4 -2
  49. data/lib/makit/context.rb +1 -0
  50. data/lib/makit/data.rb +9 -10
  51. data/lib/makit/directories.rb +48 -52
  52. data/lib/makit/directory.rb +38 -52
  53. data/lib/makit/docs/files.rb +5 -10
  54. data/lib/makit/docs/rake.rb +16 -20
  55. data/lib/makit/dotnet/cli.rb +65 -0
  56. data/lib/makit/dotnet/project.rb +153 -0
  57. data/lib/makit/dotnet/solution.rb +38 -0
  58. data/lib/makit/dotnet/solution_classlib.rb +239 -0
  59. data/lib/makit/dotnet/solution_console.rb +264 -0
  60. data/lib/makit/dotnet/solution_maui.rb +354 -0
  61. data/lib/makit/dotnet/solution_wasm.rb +275 -0
  62. data/lib/makit/dotnet/solution_wpf.rb +304 -0
  63. data/lib/makit/dotnet.rb +54 -171
  64. data/lib/makit/email.rb +46 -17
  65. data/lib/makit/environment.rb +22 -19
  66. data/lib/makit/examples/runner.rb +370 -0
  67. data/lib/makit/exceptions.rb +45 -0
  68. data/lib/makit/fileinfo.rb +3 -5
  69. data/lib/makit/files.rb +12 -16
  70. data/lib/makit/gems.rb +40 -39
  71. data/lib/makit/git/cli.rb +54 -0
  72. data/lib/makit/git/repository.rb +90 -0
  73. data/lib/makit/git.rb +44 -91
  74. data/lib/makit/gitlab_runner.rb +0 -1
  75. data/lib/makit/humanize.rb +31 -23
  76. data/lib/makit/indexer.rb +15 -24
  77. data/lib/makit/logging/configuration.rb +305 -0
  78. data/lib/makit/logging/format_registry.rb +84 -0
  79. data/lib/makit/logging/formatters/base.rb +39 -0
  80. data/lib/makit/logging/formatters/console_formatter.rb +127 -0
  81. data/lib/makit/logging/formatters/json_formatter.rb +65 -0
  82. data/lib/makit/logging/formatters/plain_text_formatter.rb +71 -0
  83. data/lib/makit/logging/formatters/text_formatter.rb +64 -0
  84. data/lib/makit/logging/log_request.rb +115 -0
  85. data/lib/makit/logging/logger.rb +159 -0
  86. data/lib/makit/logging/sinks/base.rb +91 -0
  87. data/lib/makit/logging/sinks/console.rb +72 -0
  88. data/lib/makit/logging/sinks/file_sink.rb +92 -0
  89. data/lib/makit/logging/sinks/structured.rb +129 -0
  90. data/lib/makit/logging/sinks/unified_file_sink.rb +303 -0
  91. data/lib/makit/logging.rb +452 -37
  92. data/lib/makit/markdown.rb +18 -18
  93. data/lib/makit/mp/basic_object_mp.rb +5 -4
  94. data/lib/makit/mp/command_mp.rb +5 -5
  95. data/lib/makit/mp/command_request.mp.rb +3 -2
  96. data/lib/makit/mp/project_mp.rb +85 -96
  97. data/lib/makit/mp/string_mp.rb +245 -73
  98. data/lib/makit/nuget.rb +27 -25
  99. data/lib/makit/port.rb +25 -27
  100. data/lib/makit/process.rb +127 -29
  101. data/lib/makit/protoc.rb +27 -24
  102. data/lib/makit/rake/cli.rb +196 -0
  103. data/lib/makit/rake.rb +6 -6
  104. data/lib/makit/ruby/cli.rb +185 -0
  105. data/lib/makit/ruby.rb +25 -0
  106. data/lib/makit/secrets.rb +18 -18
  107. data/lib/makit/serializer.rb +29 -27
  108. data/lib/makit/services/builder.rb +186 -0
  109. data/lib/makit/services/error_handler.rb +226 -0
  110. data/lib/makit/services/repository_manager.rb +229 -0
  111. data/lib/makit/services/validator.rb +112 -0
  112. data/lib/makit/setup/classlib.rb +53 -0
  113. data/lib/makit/setup/gem.rb +250 -0
  114. data/lib/makit/setup/runner.rb +40 -0
  115. data/lib/makit/show.rb +16 -16
  116. data/lib/makit/storage.rb +32 -37
  117. data/lib/makit/symbols.rb +12 -0
  118. data/lib/makit/task_hooks.rb +125 -0
  119. data/lib/makit/task_info.rb +63 -21
  120. data/lib/makit/tasks/at_exit.rb +13 -0
  121. data/lib/makit/tasks/build.rb +18 -0
  122. data/lib/makit/tasks/clean.rb +11 -0
  123. data/lib/makit/tasks/hook_manager.rb +239 -0
  124. data/lib/makit/tasks/init.rb +47 -0
  125. data/lib/makit/tasks/integrate.rb +15 -0
  126. data/lib/makit/tasks/pull_incoming.rb +12 -0
  127. data/lib/makit/tasks/setup.rb +6 -0
  128. data/lib/makit/tasks/sync.rb +11 -0
  129. data/lib/makit/tasks/task_monkey_patch.rb +79 -0
  130. data/lib/makit/tasks.rb +5 -150
  131. data/lib/makit/test_cache.rb +239 -0
  132. data/lib/makit/v1/makit.v1_pb.rb +34 -35
  133. data/lib/makit/v1/makit.v1_services_pb.rb +2 -0
  134. data/lib/makit/version.rb +1 -60
  135. data/lib/makit/wix.rb +23 -23
  136. data/lib/makit/yaml.rb +18 -6
  137. data/lib/makit.rb +2 -261
  138. metadata +109 -145
  139. data/lib/makit/cli/clean.rb +0 -14
  140. data/lib/makit/cli/clone.rb +0 -59
  141. data/lib/makit/cli/init.rb +0 -38
  142. data/lib/makit/cli/make.rb +0 -54
  143. data/lib/makit/cli/new.rb +0 -37
  144. data/lib/makit/cli/nuget_cache.rb +0 -38
  145. data/lib/makit/cli/pull.rb +0 -31
  146. data/lib/makit/cli/setup.rb +0 -71
  147. data/lib/makit/cli/work.rb +0 -21
  148. data/lib/makit/content/default_gitignore.txt +0 -222
@@ -1,14 +1,15 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "json"
3
4
  require "yaml"
4
5
 
5
6
  module Makit
6
7
  module V1
7
8
  class Project
8
- #def to_yaml
9
+ # def to_yaml
9
10
  # data = JSON.parse(self.to_pretty_json)
10
11
  # data.to_yaml.sub(/^---\n/, "")
11
- #end
12
+ # end
12
13
 
13
14
  def self.create
14
15
  project = Makit::V1::Project.new
@@ -18,14 +19,14 @@ module Makit
18
19
 
19
20
  def open(filename)
20
21
  other = Makit::Serializer.open(filename, Makit::V1::Project)
21
- #other = Makit::V1::Project::create_from_file(filename)
22
+ # other = Makit::V1::Project::create_from_file(filename)
22
23
  self.name = other.name
23
24
  self.git_remote_url = other.git_remote_url
24
25
  self.dotnet_projects = other.dotnet_projects
25
26
  self.artifacts = other.artifacts
26
27
  end
27
28
 
28
- #def self.create_from_file(filename)
29
+ # def self.create_from_file(filename)
29
30
  # extension = File.extname(filename)
30
31
  # case extension
31
32
  # when ".yml"
@@ -37,28 +38,26 @@ module Makit
37
38
  # else
38
39
  # raise "unsupported file extension: #{extension}"
39
40
  # end
40
- #end
41
+ # end
41
42
 
42
- #def self.create_from_yaml(yaml)
43
+ # def self.create_from_yaml(yaml)
43
44
  # json = JSON.pretty_generate(YAML.load(yaml))
44
45
  # project = Makit::V1::Project.decode_json(json)
45
46
  # project
46
- #end
47
+ # end
47
48
 
48
- #def self.create_from_json(json)
49
+ # def self.create_from_json(json)
49
50
  # project = Makit::V1::Project.decode_json(json)
50
51
  # project
51
- #end
52
+ # end
52
53
 
53
54
  def set_default_values
54
- #self.language = "csharp"
55
- #self.primary_artifact_type = "nuget"
56
- if self.git_remote_url.nil? || self.git_remote_url.empty?
57
- self.git_remote_url = `git remote get-url origin`.strip
58
- end
59
- if self.name.nil? || self.name.empty?
60
- if (!self.git_remote_url.nil? && !self.git_remote_url.empty?)
61
- self.name = get_name(File.basename(self.git_remote_url, ".git")) # get_capitalized_name(File.basename(self.git_remote_url, ".git"))
55
+ # self.language = "csharp"
56
+ # self.primary_artifact_type = "nuget"
57
+ self.git_remote_url = `git remote get-url origin`.strip if git_remote_url.nil? || git_remote_url.empty?
58
+ if name.nil? || name.empty?
59
+ if !git_remote_url.nil? && !git_remote_url.empty?
60
+ self.name = get_name(File.basename(git_remote_url, ".git")) # get_capitalized_name(File.basename(self.git_remote_url, ".git"))
62
61
  else
63
62
  self.name = get_name(File.basename(Dir.getwd)) # get_capitalized_name(File.basename(Dir.getwd))
64
63
  end
@@ -67,11 +66,9 @@ module Makit
67
66
  end
68
67
 
69
68
  def get_name(name)
70
- if !self.git_remote_url.nil? && !self.git_remote_url.empty?
71
- is_dotnet = self.git_remote_url.include?("nuget")
72
- if is_dotnet
73
- get_capitalized_name(name)
74
- end
69
+ if !git_remote_url.nil? && !git_remote_url.empty?
70
+ is_dotnet = git_remote_url.include?("nuget")
71
+ get_capitalized_name(name) if is_dotnet
75
72
  end
76
73
  name.downcase
77
74
  end
@@ -82,25 +79,25 @@ module Makit
82
79
 
83
80
  def save_as(filename)
84
81
  Makit::Serializer.save_as(filename, self)
85
- #extension = File.extname(filename)
86
- #case extension
87
- #when ".json"
82
+ # extension = File.extname(filename)
83
+ # case extension
84
+ # when ".json"
88
85
  # File.write(filename, self.to_pretty_json)
89
- #when ".yml"
86
+ # when ".yml"
90
87
  # File.write(filename, self.to_yaml)
91
- #else
88
+ # else
92
89
  # raise "unsupported file extension: #{extension}"
93
- #end
90
+ # end
94
91
  end
95
92
 
96
93
  def with_dotnet_project(template, name, output)
97
- if !self.dotnet_projects.any? { |project| project.output == output }
98
- project = Makit::V1::DotNetProject.new
99
- project.template = template
100
- project.name = name
101
- project.output = output
102
- self.dotnet_projects << project
103
- end
94
+ return if dotnet_projects.any? { |project| project.output == output }
95
+
96
+ project = Makit::V1::DotNetProject.new
97
+ project.template = template
98
+ project.name = name
99
+ project.output = output
100
+ dotnet_projects << project
104
101
  end
105
102
 
106
103
  def setup
@@ -112,8 +109,8 @@ module Makit
112
109
  make_dotnet_projects
113
110
 
114
111
  # verify the artifacts exist
115
- self.artifacts.each do |artifact|
116
- raise "artifact does not exist: #{artifact}" if !File.exist?(artifact)
112
+ artifacts.each do |artifact|
113
+ raise "artifact does not exist: #{artifact}" unless File.exist?(artifact)
117
114
  end
118
115
  end
119
116
 
@@ -126,85 +123,77 @@ module Makit
126
123
  end
127
124
 
128
125
  def setup_dotnet_projects
129
- if self.dotnet_projects.any?
130
- if (!File.exist?("#{self.name}.sln"))
131
- puts " Creating solution file: " + "#{self.name}.sln".colorize(:green)
132
- "dotnet new sln -n #{self.name}".run unless File.exist?("#{self.name}.sln")
126
+ if dotnet_projects.any?
127
+ if !File.exist?("#{name}.sln")
128
+ puts " Creating solution file: #{"#{name}.sln".colorize(:green)}"
129
+ "dotnet new sln -n #{name}".run unless File.exist?("#{name}.sln")
133
130
  else
134
- #puts " Solution file already exists: " + "#{self.name}.sln".colorize(:yellow)
131
+ # puts " Solution file already exists: " + "#{self.name}.sln".colorize(:yellow)
135
132
  end
136
- self.dotnet_projects.each do |project|
133
+ dotnet_projects.each do |project|
137
134
  add_project = true
138
- if (project.os == "windows" && !Makit::Environment.is_windows?)
139
- add_project = false
140
- end
141
- if (add_project)
142
- Makit::DotNet.new_project(project.template, project.name, project.output)
143
- # add any nuget packages to the project
144
- project_filename = "#{project.output}/#{project.name}.csproj"
145
- project.packages.each { |package|
146
- Makit::DotNet::add_package(project_filename, package)
147
- }
135
+ add_project = false if project.os == "windows" && !Makit::Environment.is_windows?
136
+ next unless add_project
137
+
138
+ Makit::DotNet.new_project(project.template, project.name, project.output)
139
+ # add any nuget packages to the project
140
+ project_filename = "#{project.output}/#{project.name}.csproj"
141
+ project.packages.each do |package|
142
+ Makit::DotNet.add_package(project_filename, package)
148
143
  end
149
144
  end
150
- #Makit::DotNet.new_solution(self.name)
151
- Makit::DotNet.sln_add_projects(self.name)
145
+ # Makit::DotNet.new_solution(self.name)
146
+ Makit::DotNet.sln_add_projects(name)
152
147
  else
153
- #puts " no dotnet projects found".colorize(:yellow)
148
+ # puts " no dotnet projects found".colorize(:yellow)
154
149
  end
155
150
  end
156
151
 
157
152
  def make_dotnet_projects
158
- self.dotnet_projects.each do |project|
159
- if (project.os == "windows" && !Makit::Environment.is_windows?)
160
- next
161
- else
162
- project.commands.each do |command|
163
- newest_file_timestamp = Makit::Directory::get_newest_file_timestamp(project.output)
164
- #newest_file = Makit::Directory::get_newest_file_or_now(project.output)
165
- command_request = Makit::RUNNER::parse_command_request(command)
166
- RUNNER.cache_run(command_request, newest_file_timestamp)
167
- end
153
+ dotnet_projects.each do |project|
154
+ next if project.os == "windows" && !Makit::Environment.is_windows?
155
+
156
+ project.commands.each do |command|
157
+ newest_file_timestamp = Makit::Directory.get_newest_file_timestamp(project.output)
158
+ # newest_file = Makit::Directory::get_newest_file_or_now(project.output)
159
+ command_request = Makit::RUNNER.parse_command_request(command)
160
+ RUNNER.cache_run(command_request, newest_file_timestamp)
168
161
  end
169
162
  end
170
163
  end
171
164
 
172
165
  def build_dotnet_projects
173
- self.dotnet_projects.each do |project|
174
- if (project.os == "windows" && !Makit::Environment.is_windows?)
175
- next
176
- else
177
- project.commands.each do |command|
178
- newest_file_timestamp = Makit::Directory::get_newest_file_timestamp(project.output)
179
- #newest_file = Makit::Directory::get_newest_file_or_now(project.output)
180
- command_request = Makit::RUNNER::parse_command_request(command)
181
- RUNNER.cache_run(command_request, newest_file_timestamp)
182
- end
183
- project.build_args.each do |build_arg|
184
- project_path = File.join(project.output, "#{project.name}.csproj")
185
- Makit::DotNet.build(project_path, build_arg.configuration, build_arg.output)
186
- end
187
- project.publish_args.each do |publish_arg|
188
- project_path = File.join(project.output, "#{project.name}.csproj")
189
- Makit::DotNet.publish(project_path, publish_arg.configuration, publish_arg.output)
190
- end
166
+ dotnet_projects.each do |project|
167
+ next if project.os == "windows" && !Makit::Environment.is_windows?
168
+
169
+ project.commands.each do |command|
170
+ newest_file_timestamp = Makit::Directory.get_newest_file_timestamp(project.output)
171
+ # newest_file = Makit::Directory::get_newest_file_or_now(project.output)
172
+ command_request = Makit::RUNNER.parse_command_request(command)
173
+ RUNNER.cache_run(command_request, newest_file_timestamp)
174
+ end
175
+ project.build_args.each do |build_arg|
176
+ project_path = File.join(project.output, "#{project.name}.csproj")
177
+ Makit::DotNet.build(project_path, build_arg.configuration, build_arg.output)
178
+ end
179
+ project.publish_args.each do |publish_arg|
180
+ project_path = File.join(project.output, "#{project.name}.csproj")
181
+ Makit::DotNet.publish(project_path, publish_arg.configuration, publish_arg.output)
191
182
  end
192
183
  end
193
184
  end
194
185
 
195
186
  def test_dotnet_projects
196
- self.dotnet_projects.each do |project|
197
- if (project.os == "windows" && !Makit::Environment.is_windows?)
198
- next
199
- else
200
- project.test_args.each do |test_args|
201
- project_path = File.join(project.output, "#{project.name}.csproj")
202
- Makit::DotNet.test(project_path, test_args.configuration, test_args.output)
203
- end
204
- #"dotnet test #{project.output} --configuration Release".run
187
+ dotnet_projects.each do |project|
188
+ next if project.os == "windows" && !Makit::Environment.is_windows?
189
+
190
+ project.test_args.each do |test_args|
191
+ project_path = File.join(project.output, "#{project.name}.csproj")
192
+ Makit::DotNet.test(project_path, test_args.configuration, test_args.output)
205
193
  end
194
+ # "dotnet test #{project.output} --configuration Release".run
206
195
  end
207
196
  end
208
- end # class Project
209
- end # module V1
210
- end # module Makit
197
+ end
198
+ end
199
+ end
@@ -1,107 +1,284 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "json"
3
4
  # monkey patch String class with a run method
4
5
 
5
6
  class String
6
7
  def run(args = nil)
8
+ command = self
7
9
  if args.nil?
8
- command = self
9
- Makit::RUNNER.run(Makit::RUNNER::parse_command_request(command))
10
+ Makit::COMMANDS_COMPAT.run(Makit::COMMANDS_COMPAT.parse_command_request(command))
10
11
  else
11
- command = self
12
- request = Makit::RUNNER.parse_args(command)
12
+ # Parse initial request
13
+ base_request = Makit::COMMANDS_COMPAT.parse_command_request(command)
14
+
13
15
  if args.is_a?(Hash)
16
+ # Create new request with combined options
17
+ request_options = {
18
+ command: base_request.command,
19
+ arguments: base_request.arguments || [],
20
+ directory: base_request.directory,
21
+ timeout: base_request.timeout,
22
+ environment: base_request.environment || {},
23
+ metadata: base_request.metadata || {},
24
+ }
25
+
26
+ # Apply args to the request options
14
27
  args.each do |key, value|
15
- request.send("#{key}=", value)
28
+ case key.to_s
29
+ when "arguments"
30
+ # Append additional arguments
31
+ request_options[:arguments] = request_options[:arguments] + Array(value)
32
+ when "directory"
33
+ request_options[:directory] = value
34
+ when "timeout"
35
+ request_options[:timeout] = value
36
+ when "environment"
37
+ request_options[:environment] = request_options[:environment].merge(value || {})
38
+ else
39
+ # Store other options in metadata
40
+ request_options[:metadata][key] = value
41
+ end
16
42
  end
43
+
44
+ # Create new request with updated options
45
+ request = Makit::Commands::Request.new(**request_options)
46
+ else
47
+ request = base_request
17
48
  end
18
- Makit::RUNNER.run(request)
19
- end
20
- end
21
49
 
22
- def cache_run()
23
- command = self
24
- Makit::RUNNER.cache_run(Makit::RUNNER::parse_command_request(command))
50
+ Makit::COMMANDS_COMPAT.run(request)
51
+ end
25
52
  end
26
53
 
27
54
  def cache_run(timestamp = nil)
55
+ command = self
28
56
  if timestamp.nil?
29
- timestamp = Makit::GIT_FILE_INFOS.first.mtime #GIT_FILE_INFOS. Makit::Directory.get_newest_git_file_timestamp(Makit::Directories::PROJECT_ROOT)
30
- #timestamp = Makit::Timestamp.now
57
+ # Use default timestamp from compatibility layer
58
+ Makit::COMMANDS_COMPAT.cache_run(Makit::COMMANDS_COMPAT.parse_command_request(command))
59
+ else
60
+ Makit::COMMANDS_COMPAT.cache_run(Makit::COMMANDS_COMPAT.parse_command_request(command), timestamp)
31
61
  end
32
-
33
- command = self
34
- Makit::RUNNER.cache_run(Makit::RUNNER::parse_command_request(command), timestamp)
35
62
  end
36
63
 
37
64
  def try(args = nil)
65
+ command = self
38
66
  if args.nil?
39
- command = self
40
- Makit::RUNNER.try(command)
67
+ Makit::COMMANDS_COMPAT.try(command)
41
68
  else
42
- command = self
43
- request = Makit::RUNNER.parse_args(command)
69
+ # Parse initial request
70
+ base_request = Makit::COMMANDS_COMPAT.parse_command_request(command)
71
+
44
72
  if args.is_a?(Hash)
73
+ # Create new request with combined options
74
+ request_options = {
75
+ command: base_request.command,
76
+ arguments: base_request.arguments || [],
77
+ directory: base_request.directory,
78
+ timeout: base_request.timeout,
79
+ environment: base_request.environment || {},
80
+ metadata: base_request.metadata || {},
81
+ }
82
+
83
+ # Apply args to the request options
45
84
  args.each do |key, value|
46
- request.send("#{key}=", value)
85
+ case key.to_s
86
+ when "arguments"
87
+ # Append additional arguments
88
+ request_options[:arguments] = request_options[:arguments] + Array(value)
89
+ when "directory"
90
+ request_options[:directory] = value
91
+ when "timeout"
92
+ request_options[:timeout] = value
93
+ when "environment"
94
+ request_options[:environment] = request_options[:environment].merge(value || {})
95
+ else
96
+ # Store other options in metadata
97
+ request_options[:metadata][key] = value
98
+ end
47
99
  end
100
+
101
+ # Create new request with updated options
102
+ request = Makit::Commands::Request.new(**request_options)
103
+ else
104
+ request = base_request
48
105
  end
49
- Makit::RUNNER.try(request)
106
+
107
+ Makit::COMMANDS_COMPAT.try(request)
50
108
  end
51
109
  end
52
110
 
53
111
  def show(args = nil)
112
+ command = self
54
113
  if args.nil?
55
- command = self
56
- Makit::RUNNER.show(command)
114
+ Makit::COMMANDS_COMPAT.show(command)
57
115
  else
58
- command = self
59
- request = Makit::RUNNER.parse_args(command)
116
+ # Parse initial request
117
+ base_request = Makit::COMMANDS_COMPAT.parse_command_request(command)
118
+
60
119
  if args.is_a?(Hash)
120
+ # Create new request with combined options
121
+ request_options = {
122
+ command: base_request.command,
123
+ arguments: base_request.arguments || [],
124
+ directory: base_request.directory,
125
+ timeout: base_request.timeout,
126
+ environment: base_request.environment || {},
127
+ metadata: base_request.metadata || {},
128
+ }
129
+
130
+ # Apply args to the request options
61
131
  args.each do |key, value|
62
- request.send("#{key}=", value)
132
+ case key.to_s
133
+ when "arguments"
134
+ # Append additional arguments
135
+ request_options[:arguments] = request_options[:arguments] + Array(value)
136
+ when "directory"
137
+ request_options[:directory] = value
138
+ when "timeout"
139
+ request_options[:timeout] = value
140
+ when "environment"
141
+ request_options[:environment] = request_options[:environment].merge(value || {})
142
+ else
143
+ # Store other options in metadata
144
+ request_options[:metadata][key] = value
145
+ end
63
146
  end
147
+
148
+ # Create new request with updated options
149
+ request = Makit::Commands::Request.new(**request_options)
150
+ else
151
+ request = base_request
64
152
  end
65
- Makit::RUNNER.show(request)
153
+
154
+ Makit::COMMANDS_COMPAT.show(request)
66
155
  end
67
156
  end
157
+
68
158
  def log(filename)
69
- #puts "Logging to file: #{filename}"
70
- # does the filename have a directory?
159
+ # Ensure directory exists if filename contains path
71
160
  if filename.include?("/")
72
- # get the directory
73
161
  directory = File.dirname(filename)
74
- # create the directory
75
- #puts "Creating directory: #{directory}"
76
162
  FileUtils.mkdir_p(directory)
77
163
  end
78
164
  command = self
79
165
 
80
- cmd = Makit::RUNNER.run(Makit::RUNNER::parse_command_request(command))
81
- # write the cmd output and error to the file
82
- #puts "Writing to file: #{filename}"
166
+ Makit::Logging.info("Logging command output to file", {
167
+ command: command,
168
+ log_file: filename,
169
+ })
170
+
171
+ cmd = Makit::COMMANDS_COMPAT.run(Makit::COMMANDS_COMPAT.parse_command_request(command))
172
+
173
+ # Write the cmd output and error to the file
83
174
  File.write(filename, cmd.output + cmd.error)
84
175
 
85
- # display the summary of the command
86
- #puts "Command: #{command}"
87
- #puts "Output: #{cmd.output}"
88
- #puts "Error: #{cmd.error}"
89
- Makit::RUNNER.show_command(cmd)
176
+ # Log the result
177
+ if cmd.success?
178
+ Makit::Logging.success("Command logged successfully", {
179
+ command: command,
180
+ log_file: filename,
181
+ output_length: cmd.output.length,
182
+ error_length: cmd.error.length,
183
+ })
184
+ else
185
+ Makit::Logging.error("Command failed and logged", {
186
+ command: command,
187
+ log_file: filename,
188
+ exit_code: cmd.exit_code,
189
+ output_length: cmd.output.length,
190
+ error_length: cmd.error.length,
191
+ })
192
+ end
193
+
194
+ Makit::COMMANDS_COMPAT.show_command(cmd)
90
195
  end
91
196
 
92
- def cache_try()
197
+ def cache_log(filename, timestamp = nil)
198
+ # Ensure directory exists if filename contains path
199
+ if filename.include?("/")
200
+ directory = File.dirname(filename)
201
+ FileUtils.mkdir_p(directory)
202
+ end
93
203
  command = self
94
- Makit::RUNNER.cache_try(Makit::RUNNER::parse_command_request(command))
204
+
205
+ #Makit::Logging.info("Cache logging command output", {
206
+ # command: command,
207
+ # log_file: filename,
208
+ # timestamp: timestamp ? Makit::Humanize.get_humanized_timestamp(timestamp) : nil
209
+ #})
210
+
211
+ # Use cache_run with optional timestamp
212
+ cmd = if timestamp.nil?
213
+ Makit::COMMANDS_COMPAT.cache_run(Makit::COMMANDS_COMPAT.parse_command_request(command))
214
+ else
215
+ Makit::COMMANDS_COMPAT.cache_run(Makit::COMMANDS_COMPAT.parse_command_request(command), timestamp)
216
+ end
217
+
218
+ # Write the cached command output and error to the file
219
+ File.write(filename, cmd.output + cmd.error)
220
+
221
+ # Log the execution result
222
+ if cmd.success?
223
+ Makit::Logging.success(command)
224
+ #Makit::Logging.success("Command executed and cached", {
225
+ # command: command,
226
+ # log_file: filename,
227
+ # cached: true,
228
+ # output_length: cmd.output.length,
229
+ # error_length: cmd.error.length
230
+ # })
231
+ else
232
+ Makit::Logging.error("Command failed and cached", {
233
+ command: command,
234
+ log_file: filename,
235
+ exit_code: cmd.exit_code,
236
+ cached: true,
237
+ output_length: cmd.output.length,
238
+ error_length: cmd.error.length,
239
+ })
240
+ end
241
+
242
+ # Display detailed output and log location only if it failed
243
+ return if cmd.success?
244
+
245
+ Makit::COMMANDS_COMPAT.show_command(cmd)
246
+ Makit::Logging.info("Log written to file", {
247
+ log_file: File.expand_path(filename),
248
+ })
95
249
  end
96
250
 
97
251
  def cache_try(timestamp = nil)
98
- if timestamp.nil?
99
- timestamp = Makit::GIT_FILE_INFOS.first.mtime #GIT_FILE_INFOS. Makit::Directory.get_newest_git_file_timestamp(Makit::Directories::PROJECT_ROOT)
100
- #timestamp = Makit::Timestamp.now
252
+ command = self
253
+
254
+ Makit::Logging.info("Trying cached command execution", {
255
+ command: command,
256
+ timestamp: timestamp ? Makit::Humanize.get_humanized_timestamp(timestamp) : nil,
257
+ })
258
+
259
+ result = if timestamp.nil?
260
+ # Use default timestamp from compatibility layer
261
+ Makit::COMMANDS_COMPAT.cache_try(Makit::COMMANDS_COMPAT.parse_command_request(command))
262
+ else
263
+ Makit::COMMANDS_COMPAT.cache_try(Makit::COMMANDS_COMPAT.parse_command_request(command), timestamp)
264
+ end
265
+
266
+ # Log the result
267
+ if result.success?
268
+ Makit::Logging.success("Cached command executed successfully", {
269
+ command: command,
270
+ cached: true,
271
+ duration: result.duration,
272
+ })
273
+ else
274
+ Makit::Logging.warn("Cached command failed", {
275
+ command: command,
276
+ exit_code: result.exit_code,
277
+ cached: true,
278
+ })
101
279
  end
102
280
 
103
- command = self
104
- Makit::RUNNER.cache_try(Makit::RUNNER::parse_command_request(command), timestamp)
281
+ result
105
282
  end
106
283
 
107
284
  # Read a value from a JSON file
@@ -117,7 +294,7 @@ class String
117
294
  data
118
295
  end
119
296
 
120
- alias_method :retrieve, :get_json_value
297
+ alias retrieve get_json_value
121
298
 
122
299
  # Set a value in a JSON file
123
300
  # key is a string with the key to set, e.g. "AzureAd.Authority"
@@ -129,7 +306,7 @@ class String
129
306
 
130
307
  # Traverse and create any missing keys
131
308
  keys[0..-2].each do |k|
132
- current[k] ||= {} # Create a new hash if the key doesn't exist
309
+ current[k] ||= {} # Create a new hash if the key doesn't exist
133
310
  current = current[k]
134
311
  end
135
312
 
@@ -141,36 +318,31 @@ class String
141
318
  end
142
319
 
143
320
  # Alias for set_json_value
144
- alias_method :assign, :set_json_value
321
+ alias assign set_json_value
145
322
 
146
323
  def strip_color_codes
147
324
  # Regular expression to remove ANSI color codes
148
- cleaned_content = self.gsub(/\e\[[\d;]+m/, "")
149
- cleaned_content
325
+ gsub(/\e\[[\d;]+m/, "")
150
326
  end
151
327
 
152
328
  def to_lines(max_length = 80, indent_length = 5)
153
- if (self.length <= max_length)
154
- return self
155
- else
156
- indent = " " * indent_length
157
- words = self.split(" ")
158
- lines = []
159
- line = ""
160
- words.each do |word|
161
- if ((line + word).length > max_length)
162
- lines << line
163
- line = indent + word
164
- else
165
- if (line.length == 0)
166
- line = word
167
- else
168
- line += " " + word
169
- end
170
- end
329
+ return self if length <= max_length
330
+
331
+ indent = " " * indent_length
332
+ words = split(" ")
333
+ lines = []
334
+ line = ""
335
+ words.each do |word|
336
+ if (line + word).length > max_length
337
+ lines << line
338
+ line = indent + word
339
+ elsif line.empty?
340
+ line = word
341
+ else
342
+ line += " #{word}"
171
343
  end
172
- lines << line
173
- return lines.join("\n")
174
344
  end
345
+ lines << line
346
+ lines.join("\n")
175
347
  end
176
348
  end