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.
- checksums.yaml +4 -4
- data/README.md +41 -0
- data/exe/makit +5 -0
- data/lib/makit/apache.rb +7 -11
- data/lib/makit/cli/build_commands.rb +500 -0
- data/lib/makit/cli/generators/base_generator.rb +74 -0
- data/lib/makit/cli/generators/dotnet_generator.rb +50 -0
- data/lib/makit/cli/generators/generator_factory.rb +49 -0
- data/lib/makit/cli/generators/node_generator.rb +50 -0
- data/lib/makit/cli/generators/ruby_generator.rb +77 -0
- data/lib/makit/cli/generators/rust_generator.rb +50 -0
- data/lib/makit/cli/generators/templates/dotnet_templates.rb +167 -0
- data/lib/makit/cli/generators/templates/node_templates.rb +161 -0
- data/lib/makit/cli/generators/templates/ruby/gemfile.rb +26 -0
- data/lib/makit/cli/generators/templates/ruby/gemspec.rb +40 -0
- data/lib/makit/cli/generators/templates/ruby/main_lib.rb +33 -0
- data/lib/makit/cli/generators/templates/ruby/rakefile.rb +35 -0
- data/lib/makit/cli/generators/templates/ruby/readme.rb +63 -0
- data/lib/makit/cli/generators/templates/ruby/test.rb +39 -0
- data/lib/makit/cli/generators/templates/ruby/test_helper.rb +29 -0
- data/lib/makit/cli/generators/templates/ruby/version.rb +29 -0
- data/lib/makit/cli/generators/templates/rust_templates.rb +128 -0
- data/lib/makit/cli/main.rb +48 -19
- data/lib/makit/cli/project_commands.rb +868 -0
- data/lib/makit/cli/repository_commands.rb +661 -0
- data/lib/makit/cli/utility_commands.rb +521 -0
- data/lib/makit/command_runner.rb +187 -128
- data/lib/makit/commands/compatibility.rb +365 -0
- data/lib/makit/commands/factory.rb +359 -0
- data/lib/makit/commands/middleware/base.rb +73 -0
- data/lib/makit/commands/middleware/cache.rb +248 -0
- data/lib/makit/commands/middleware/command_logger.rb +323 -0
- data/lib/makit/commands/middleware/unified_logger.rb +243 -0
- data/lib/makit/commands/middleware/validator.rb +269 -0
- data/lib/makit/commands/request.rb +254 -0
- data/lib/makit/commands/result.rb +323 -0
- data/lib/makit/commands/runner.rb +317 -0
- data/lib/makit/commands/strategies/base.rb +160 -0
- data/lib/makit/commands/strategies/synchronous.rb +134 -0
- data/lib/makit/commands.rb +24 -3
- data/lib/makit/configuration/gitlab_helper.rb +60 -0
- data/lib/makit/configuration/project.rb +127 -0
- data/lib/makit/configuration/rakefile_helper.rb +43 -0
- data/lib/makit/configuration/step.rb +34 -0
- data/lib/makit/configuration.rb +14 -0
- data/lib/makit/content/default_gitignore.rb +4 -2
- data/lib/makit/content/default_rakefile.rb +4 -2
- data/lib/makit/content/gem_rakefile.rb +4 -2
- data/lib/makit/context.rb +1 -0
- data/lib/makit/data.rb +9 -10
- data/lib/makit/directories.rb +48 -52
- data/lib/makit/directory.rb +38 -52
- data/lib/makit/docs/files.rb +5 -10
- data/lib/makit/docs/rake.rb +16 -20
- data/lib/makit/dotnet/cli.rb +65 -0
- data/lib/makit/dotnet/project.rb +153 -0
- data/lib/makit/dotnet/solution.rb +38 -0
- data/lib/makit/dotnet/solution_classlib.rb +239 -0
- data/lib/makit/dotnet/solution_console.rb +264 -0
- data/lib/makit/dotnet/solution_maui.rb +354 -0
- data/lib/makit/dotnet/solution_wasm.rb +275 -0
- data/lib/makit/dotnet/solution_wpf.rb +304 -0
- data/lib/makit/dotnet.rb +54 -171
- data/lib/makit/email.rb +46 -17
- data/lib/makit/environment.rb +22 -19
- data/lib/makit/examples/runner.rb +370 -0
- data/lib/makit/exceptions.rb +45 -0
- data/lib/makit/fileinfo.rb +3 -5
- data/lib/makit/files.rb +12 -16
- data/lib/makit/gems.rb +40 -39
- data/lib/makit/git/cli.rb +54 -0
- data/lib/makit/git/repository.rb +90 -0
- data/lib/makit/git.rb +44 -91
- data/lib/makit/gitlab_runner.rb +0 -1
- data/lib/makit/humanize.rb +31 -23
- data/lib/makit/indexer.rb +15 -24
- data/lib/makit/logging/configuration.rb +305 -0
- data/lib/makit/logging/format_registry.rb +84 -0
- data/lib/makit/logging/formatters/base.rb +39 -0
- data/lib/makit/logging/formatters/console_formatter.rb +127 -0
- data/lib/makit/logging/formatters/json_formatter.rb +65 -0
- data/lib/makit/logging/formatters/plain_text_formatter.rb +71 -0
- data/lib/makit/logging/formatters/text_formatter.rb +64 -0
- data/lib/makit/logging/log_request.rb +115 -0
- data/lib/makit/logging/logger.rb +159 -0
- data/lib/makit/logging/sinks/base.rb +91 -0
- data/lib/makit/logging/sinks/console.rb +72 -0
- data/lib/makit/logging/sinks/file_sink.rb +92 -0
- data/lib/makit/logging/sinks/structured.rb +129 -0
- data/lib/makit/logging/sinks/unified_file_sink.rb +303 -0
- data/lib/makit/logging.rb +452 -37
- data/lib/makit/markdown.rb +18 -18
- data/lib/makit/mp/basic_object_mp.rb +5 -4
- data/lib/makit/mp/command_mp.rb +5 -5
- data/lib/makit/mp/command_request.mp.rb +3 -2
- data/lib/makit/mp/project_mp.rb +85 -96
- data/lib/makit/mp/string_mp.rb +245 -73
- data/lib/makit/nuget.rb +27 -25
- data/lib/makit/port.rb +25 -27
- data/lib/makit/process.rb +127 -29
- data/lib/makit/protoc.rb +27 -24
- data/lib/makit/rake/cli.rb +196 -0
- data/lib/makit/rake.rb +6 -6
- data/lib/makit/ruby/cli.rb +185 -0
- data/lib/makit/ruby.rb +25 -0
- data/lib/makit/secrets.rb +18 -18
- data/lib/makit/serializer.rb +29 -27
- data/lib/makit/services/builder.rb +186 -0
- data/lib/makit/services/error_handler.rb +226 -0
- data/lib/makit/services/repository_manager.rb +229 -0
- data/lib/makit/services/validator.rb +112 -0
- data/lib/makit/setup/classlib.rb +53 -0
- data/lib/makit/setup/gem.rb +250 -0
- data/lib/makit/setup/runner.rb +40 -0
- data/lib/makit/show.rb +16 -16
- data/lib/makit/storage.rb +32 -37
- data/lib/makit/symbols.rb +12 -0
- data/lib/makit/task_hooks.rb +125 -0
- data/lib/makit/task_info.rb +63 -21
- data/lib/makit/tasks/at_exit.rb +13 -0
- data/lib/makit/tasks/build.rb +18 -0
- data/lib/makit/tasks/clean.rb +11 -0
- data/lib/makit/tasks/hook_manager.rb +239 -0
- data/lib/makit/tasks/init.rb +47 -0
- data/lib/makit/tasks/integrate.rb +15 -0
- data/lib/makit/tasks/pull_incoming.rb +12 -0
- data/lib/makit/tasks/setup.rb +6 -0
- data/lib/makit/tasks/sync.rb +11 -0
- data/lib/makit/tasks/task_monkey_patch.rb +79 -0
- data/lib/makit/tasks.rb +5 -150
- data/lib/makit/test_cache.rb +239 -0
- data/lib/makit/v1/makit.v1_pb.rb +34 -35
- data/lib/makit/v1/makit.v1_services_pb.rb +2 -0
- data/lib/makit/version.rb +1 -60
- data/lib/makit/wix.rb +23 -23
- data/lib/makit/yaml.rb +18 -6
- data/lib/makit.rb +2 -261
- metadata +109 -145
- data/lib/makit/cli/clean.rb +0 -14
- data/lib/makit/cli/clone.rb +0 -59
- data/lib/makit/cli/init.rb +0 -38
- data/lib/makit/cli/make.rb +0 -54
- data/lib/makit/cli/new.rb +0 -37
- data/lib/makit/cli/nuget_cache.rb +0 -38
- data/lib/makit/cli/pull.rb +0 -31
- data/lib/makit/cli/setup.rb +0 -71
- data/lib/makit/cli/work.rb +0 -21
- data/lib/makit/content/default_gitignore.txt +0 -222
data/lib/makit/mp/project_mp.rb
CHANGED
@@ -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
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
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 !
|
71
|
-
is_dotnet =
|
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
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
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
|
-
|
116
|
-
raise "artifact does not 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
|
130
|
-
if
|
131
|
-
puts " Creating solution file: "
|
132
|
-
"dotnet new sln -n #{
|
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
|
-
|
133
|
+
dotnet_projects.each do |project|
|
137
134
|
add_project = true
|
138
|
-
if
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
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(
|
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
|
-
|
159
|
-
if
|
160
|
-
|
161
|
-
|
162
|
-
project.
|
163
|
-
|
164
|
-
|
165
|
-
|
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
|
-
|
174
|
-
if
|
175
|
-
|
176
|
-
|
177
|
-
project.
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
project.
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
project.
|
188
|
-
|
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
|
-
|
197
|
-
if
|
198
|
-
|
199
|
-
|
200
|
-
project.
|
201
|
-
|
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
|
209
|
-
end
|
210
|
-
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
data/lib/makit/mp/string_mp.rb
CHANGED
@@ -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
|
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
|
-
|
12
|
-
|
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
|
-
|
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
|
-
|
23
|
-
|
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
|
30
|
-
|
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
|
40
|
-
Makit::RUNNER.try(command)
|
67
|
+
Makit::COMMANDS_COMPAT.try(command)
|
41
68
|
else
|
42
|
-
|
43
|
-
|
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
|
-
|
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
|
-
|
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
|
56
|
-
Makit::RUNNER.show(command)
|
114
|
+
Makit::COMMANDS_COMPAT.show(command)
|
57
115
|
else
|
58
|
-
|
59
|
-
|
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
|
-
|
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
|
-
|
153
|
+
|
154
|
+
Makit::COMMANDS_COMPAT.show(request)
|
66
155
|
end
|
67
156
|
end
|
157
|
+
|
68
158
|
def log(filename)
|
69
|
-
#
|
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
|
-
|
81
|
-
|
82
|
-
|
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
|
-
#
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
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
|
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
|
-
|
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
|
-
|
99
|
-
|
100
|
-
|
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
|
-
|
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
|
-
|
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] ||= {}
|
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
|
-
|
321
|
+
alias assign set_json_value
|
145
322
|
|
146
323
|
def strip_color_codes
|
147
324
|
# Regular expression to remove ANSI color codes
|
148
|
-
|
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
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
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
|