makit 0.0.157 → 0.0.158

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 (177) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +41 -41
  3. data/exe/makit +5 -5
  4. data/lib/makit/apache.rb +28 -28
  5. data/lib/makit/auto.rb +48 -48
  6. data/lib/makit/azure/blob_storage.rb +257 -257
  7. data/lib/makit/azure/cli.rb +284 -284
  8. data/lib/makit/cli/base.rb +17 -17
  9. data/lib/makit/cli/build_commands.rb +500 -500
  10. data/lib/makit/cli/generators/base_generator.rb +74 -74
  11. data/lib/makit/cli/generators/dotnet_generator.rb +50 -50
  12. data/lib/makit/cli/generators/generator_factory.rb +49 -49
  13. data/lib/makit/cli/generators/node_generator.rb +50 -50
  14. data/lib/makit/cli/generators/ruby_generator.rb +77 -77
  15. data/lib/makit/cli/generators/rust_generator.rb +50 -50
  16. data/lib/makit/cli/generators/templates/dotnet_templates.rb +167 -167
  17. data/lib/makit/cli/generators/templates/node_templates.rb +161 -161
  18. data/lib/makit/cli/generators/templates/ruby/gemfile.rb +26 -26
  19. data/lib/makit/cli/generators/templates/ruby/gemspec.rb +41 -41
  20. data/lib/makit/cli/generators/templates/ruby/main_lib.rb +33 -33
  21. data/lib/makit/cli/generators/templates/ruby/rakefile.rb +35 -35
  22. data/lib/makit/cli/generators/templates/ruby/readme.rb +63 -63
  23. data/lib/makit/cli/generators/templates/ruby/test.rb +39 -39
  24. data/lib/makit/cli/generators/templates/ruby/test_helper.rb +29 -29
  25. data/lib/makit/cli/generators/templates/ruby/version.rb +29 -29
  26. data/lib/makit/cli/generators/templates/rust_templates.rb +128 -128
  27. data/lib/makit/cli/main.rb +78 -78
  28. data/lib/makit/cli/pipeline_commands.rb +311 -311
  29. data/lib/makit/cli/project_commands.rb +868 -868
  30. data/lib/makit/cli/repository_commands.rb +661 -661
  31. data/lib/makit/cli/strategy_commands.rb +207 -207
  32. data/lib/makit/cli/utility_commands.rb +521 -521
  33. data/lib/makit/commands/factory.rb +359 -359
  34. data/lib/makit/commands/middleware/base.rb +73 -73
  35. data/lib/makit/commands/middleware/cache.rb +248 -248
  36. data/lib/makit/commands/middleware/command_logger.rb +312 -312
  37. data/lib/makit/commands/middleware/validator.rb +269 -269
  38. data/lib/makit/commands/request.rb +316 -316
  39. data/lib/makit/commands/result.rb +323 -323
  40. data/lib/makit/commands/runner.rb +386 -386
  41. data/lib/makit/commands/strategies/base.rb +171 -171
  42. data/lib/makit/commands/strategies/child_process.rb +162 -162
  43. data/lib/makit/commands/strategies/factory.rb +136 -136
  44. data/lib/makit/commands/strategies/synchronous.rb +139 -139
  45. data/lib/makit/commands.rb +50 -50
  46. data/lib/makit/configuration/dotnet_project.rb +48 -48
  47. data/lib/makit/configuration/gitlab_helper.rb +61 -61
  48. data/lib/makit/configuration/project.rb +292 -292
  49. data/lib/makit/configuration/rakefile_helper.rb +43 -43
  50. data/lib/makit/configuration/step.rb +34 -34
  51. data/lib/makit/configuration/timeout.rb +74 -74
  52. data/lib/makit/configuration.rb +21 -21
  53. data/lib/makit/content/default_gitignore.rb +7 -7
  54. data/lib/makit/content/default_gitignore.txt +225 -225
  55. data/lib/makit/content/default_rakefile.rb +13 -13
  56. data/lib/makit/content/gem_rakefile.rb +16 -16
  57. data/lib/makit/context.rb +1 -1
  58. data/lib/makit/data.rb +49 -49
  59. data/lib/makit/directories.rb +170 -170
  60. data/lib/makit/directory.rb +262 -262
  61. data/lib/makit/docs/files.rb +89 -89
  62. data/lib/makit/docs/rake.rb +102 -102
  63. data/lib/makit/dotnet/cli.rb +69 -69
  64. data/lib/makit/dotnet/project.rb +217 -217
  65. data/lib/makit/dotnet/solution.rb +38 -38
  66. data/lib/makit/dotnet/solution_classlib.rb +239 -239
  67. data/lib/makit/dotnet/solution_console.rb +264 -264
  68. data/lib/makit/dotnet/solution_maui.rb +354 -354
  69. data/lib/makit/dotnet/solution_wasm.rb +275 -275
  70. data/lib/makit/dotnet/solution_wpf.rb +304 -304
  71. data/lib/makit/dotnet.rb +102 -102
  72. data/lib/makit/email.rb +90 -90
  73. data/lib/makit/environment.rb +142 -142
  74. data/lib/makit/examples/runner.rb +370 -370
  75. data/lib/makit/exceptions.rb +45 -45
  76. data/lib/makit/fileinfo.rb +32 -32
  77. data/lib/makit/files.rb +43 -43
  78. data/lib/makit/gems.rb +40 -40
  79. data/lib/makit/git/cli.rb +78 -54
  80. data/lib/makit/git/repository.rb +100 -100
  81. data/lib/makit/git.rb +104 -104
  82. data/lib/makit/gitlab/pipeline.rb +857 -857
  83. data/lib/makit/gitlab/pipeline_service_impl.rb +1535 -1535
  84. data/lib/makit/gitlab_runner.rb +59 -59
  85. data/lib/makit/humanize.rb +218 -218
  86. data/lib/makit/indexer.rb +47 -47
  87. data/lib/makit/io/filesystem.rb +111 -111
  88. data/lib/makit/io/filesystem_service_impl.rb +337 -337
  89. data/lib/makit/lint.rb +212 -212
  90. data/lib/makit/logging/configuration.rb +309 -309
  91. data/lib/makit/logging/format_registry.rb +84 -84
  92. data/lib/makit/logging/formatters/base.rb +39 -39
  93. data/lib/makit/logging/formatters/console_formatter.rb +140 -140
  94. data/lib/makit/logging/formatters/json_formatter.rb +65 -65
  95. data/lib/makit/logging/formatters/plain_text_formatter.rb +71 -71
  96. data/lib/makit/logging/formatters/text_formatter.rb +64 -64
  97. data/lib/makit/logging/log_request.rb +119 -119
  98. data/lib/makit/logging/logger.rb +199 -199
  99. data/lib/makit/logging/sinks/base.rb +91 -91
  100. data/lib/makit/logging/sinks/console.rb +72 -72
  101. data/lib/makit/logging/sinks/file_sink.rb +92 -92
  102. data/lib/makit/logging/sinks/structured.rb +123 -123
  103. data/lib/makit/logging/sinks/unified_file_sink.rb +296 -296
  104. data/lib/makit/logging.rb +578 -578
  105. data/lib/makit/markdown.rb +75 -75
  106. data/lib/makit/mp/basic_object_mp.rb +17 -17
  107. data/lib/makit/mp/command_mp.rb +13 -13
  108. data/lib/makit/mp/command_request.mp.rb +17 -17
  109. data/lib/makit/mp/project_mp.rb +199 -199
  110. data/lib/makit/mp/string_mp.rb +205 -205
  111. data/lib/makit/nuget.rb +74 -74
  112. data/lib/makit/podman/podman.rb +458 -458
  113. data/lib/makit/podman/podman_service_impl.rb +1081 -1081
  114. data/lib/makit/port.rb +32 -32
  115. data/lib/makit/process.rb +377 -377
  116. data/lib/makit/protoc.rb +112 -112
  117. data/lib/makit/rake/cli.rb +196 -196
  118. data/lib/makit/rake/trace_controller.rb +174 -174
  119. data/lib/makit/rake.rb +81 -81
  120. data/lib/makit/ruby/cli.rb +185 -185
  121. data/lib/makit/ruby.rb +25 -25
  122. data/lib/makit/rubygems.rb +137 -0
  123. data/lib/makit/secrets/azure_key_vault.rb +322 -322
  124. data/lib/makit/secrets/azure_secrets.rb +183 -183
  125. data/lib/makit/secrets/local_secrets.rb +72 -72
  126. data/lib/makit/secrets/secrets_manager.rb +105 -105
  127. data/lib/makit/secrets.rb +16 -16
  128. data/lib/makit/serializer.rb +130 -130
  129. data/lib/makit/services/builder.rb +186 -186
  130. data/lib/makit/services/error_handler.rb +226 -226
  131. data/lib/makit/services/repository_manager.rb +367 -367
  132. data/lib/makit/services/validator.rb +112 -112
  133. data/lib/makit/setup/classlib.rb +101 -101
  134. data/lib/makit/setup/gem.rb +268 -268
  135. data/lib/makit/setup/pages.rb +11 -11
  136. data/lib/makit/setup/razorclasslib.rb +101 -101
  137. data/lib/makit/setup/runner.rb +54 -54
  138. data/lib/makit/setup.rb +5 -5
  139. data/lib/makit/show.rb +110 -110
  140. data/lib/makit/storage.rb +126 -126
  141. data/lib/makit/symbols.rb +175 -175
  142. data/lib/makit/task_info.rb +130 -130
  143. data/lib/makit/tasks/at_exit.rb +15 -15
  144. data/lib/makit/tasks/build.rb +22 -22
  145. data/lib/makit/tasks/bump.rb +7 -7
  146. data/lib/makit/tasks/clean.rb +13 -13
  147. data/lib/makit/tasks/configure.rb +10 -10
  148. data/lib/makit/tasks/format.rb +10 -10
  149. data/lib/makit/tasks/hook_manager.rb +443 -443
  150. data/lib/makit/tasks/info.rb +368 -368
  151. data/lib/makit/tasks/init.rb +49 -49
  152. data/lib/makit/tasks/integrate.rb +60 -56
  153. data/lib/makit/tasks/pull_incoming.rb +13 -13
  154. data/lib/makit/tasks/secrets.rb +7 -7
  155. data/lib/makit/tasks/setup.rb +16 -16
  156. data/lib/makit/tasks/sync.rb +14 -17
  157. data/lib/makit/tasks/tag.rb +27 -27
  158. data/lib/makit/tasks/task_monkey_patch.rb +81 -81
  159. data/lib/makit/tasks/test.rb +22 -22
  160. data/lib/makit/tasks/update.rb +18 -18
  161. data/lib/makit/tasks/version.rb +6 -6
  162. data/lib/makit/tasks.rb +24 -24
  163. data/lib/makit/test_cache.rb +239 -239
  164. data/lib/makit/tree.rb +37 -37
  165. data/lib/makit/v1/configuration/project_service_impl.rb +370 -370
  166. data/lib/makit/v1/git/git_repository_service_impl.rb +295 -295
  167. data/lib/makit/v1/makit.v1_pb.rb +35 -35
  168. data/lib/makit/v1/makit.v1_services_pb.rb +27 -27
  169. data/lib/makit/v1/services/repository_manager_service_impl.rb +572 -572
  170. data/lib/makit/version.rb +661 -503
  171. data/lib/makit/version_util.rb +21 -21
  172. data/lib/makit/wix.rb +95 -95
  173. data/lib/makit/yaml.rb +29 -29
  174. data/lib/makit/zip.rb +17 -17
  175. data/lib/makit copy.rb +44 -44
  176. data/lib/makit.rb +115 -114
  177. metadata +3 -2
@@ -1,59 +1,59 @@
1
- # frozen_string_literal: true
2
-
3
- require "yaml"
4
- require "fileutils"
5
-
6
- # This module provides classes for the Makit gem.
7
- module Makit
8
- # This class provide methods for working with Directories/
9
- #
10
- # Example:
11
- #
12
- # Makit::Directory.find_directory_with_pattern("/home/user", "*.rb")
13
- #
14
- class GitLabRunner
15
- # Parse the .gitlab-ci.yml file
16
- def parse_gitlab_ci_file(file_path)
17
- YAML.load_file(file_path)
18
- end
19
-
20
- # Extract the script for a specified job
21
- def extract_script(ci_config, job_name)
22
- job = ci_config[job_name]
23
- job ? job["script"] : nil
24
- end
25
-
26
- # Write the script to a temporary file
27
- def write_script_to_file(script, file_path)
28
- File.open(file_path, "w") do |file|
29
- script.each { |line| file.puts(line) }
30
- end
31
- end
32
-
33
- # Run the script in a Docker container
34
- def run_script_in_docker(image, script_file)
35
- system("docker run --rm -v #{Dir.pwd}:/workspace -w /workspace #{image} /bin/sh #{script_file}")
36
- end
37
-
38
- # Main function to execute the process
39
- def run_job(ci_file_path, job_name, docker_image)
40
- ci_config = parse_gitlab_ci_file(ci_file_path)
41
- script = extract_script(ci_config, job_name)
42
-
43
- unless script
44
- puts "Job '#{job_name}' not found in #{ci_file_path}"
45
- return
46
- end
47
-
48
- script_file = "temp_script.sh"
49
- write_script_to_file(script, script_file)
50
- FileUtils.chmod("+x", script_file)
51
-
52
- puts "Running script in Docker container..."
53
- run_script_in_docker(docker_image, script_file)
54
-
55
- # Clean up the temporary script file
56
- FileUtils.rm(script_file)
57
- end
58
- end
59
- end
1
+ # frozen_string_literal: true
2
+
3
+ require "yaml"
4
+ require "fileutils"
5
+
6
+ # This module provides classes for the Makit gem.
7
+ module Makit
8
+ # This class provide methods for working with Directories/
9
+ #
10
+ # Example:
11
+ #
12
+ # Makit::Directory.find_directory_with_pattern("/home/user", "*.rb")
13
+ #
14
+ class GitLabRunner
15
+ # Parse the .gitlab-ci.yml file
16
+ def parse_gitlab_ci_file(file_path)
17
+ YAML.load_file(file_path)
18
+ end
19
+
20
+ # Extract the script for a specified job
21
+ def extract_script(ci_config, job_name)
22
+ job = ci_config[job_name]
23
+ job ? job["script"] : nil
24
+ end
25
+
26
+ # Write the script to a temporary file
27
+ def write_script_to_file(script, file_path)
28
+ File.open(file_path, "w") do |file|
29
+ script.each { |line| file.puts(line) }
30
+ end
31
+ end
32
+
33
+ # Run the script in a Docker container
34
+ def run_script_in_docker(image, script_file)
35
+ system("docker run --rm -v #{Dir.pwd}:/workspace -w /workspace #{image} /bin/sh #{script_file}")
36
+ end
37
+
38
+ # Main function to execute the process
39
+ def run_job(ci_file_path, job_name, docker_image)
40
+ ci_config = parse_gitlab_ci_file(ci_file_path)
41
+ script = extract_script(ci_config, job_name)
42
+
43
+ unless script
44
+ puts "Job '#{job_name}' not found in #{ci_file_path}"
45
+ return
46
+ end
47
+
48
+ script_file = "temp_script.sh"
49
+ write_script_to_file(script, script_file)
50
+ FileUtils.chmod("+x", script_file)
51
+
52
+ puts "Running script in Docker container..."
53
+ run_script_in_docker(docker_image, script_file)
54
+
55
+ # Clean up the temporary script file
56
+ FileUtils.rm(script_file)
57
+ end
58
+ end
59
+ end
@@ -1,218 +1,218 @@
1
- # frozen_string_literal: true
2
-
3
- # This module provides classes for the Makit gem.
4
- module Makit
5
- # Provides utilities for converting data into human-readable formats.
6
- #
7
- # This class handles formatting of file sizes, timestamps, durations,
8
- # and build result summaries for display to users.
9
- #
10
- # @example Basic usage
11
- # Makit::Humanize.get_humanized_size(1024) # => "1.00 KB"
12
- # Makit::Humanize.get_humanized_duration(3661) # => "1 hour, 1 minute, 1 second"
13
- #
14
- class Humanize
15
- def self.get_humanized_size(bytes, precision = 2)
16
- units = %w[B KB MB GB TB PB]
17
- return "0 B" if bytes.zero?
18
-
19
- exp = (Math.log(bytes) / Math.log(1024)).to_i
20
- exp = units.size - 1 if exp >= units.size
21
-
22
- size = bytes.to_f / (1024 ** exp)
23
- format("%.#{precision}f %s", size, units[exp])
24
- end
25
-
26
- def self.get_humanized_timestamp(timestamp)
27
- return timestamp.strftime("%Y-%m-%d %I:%M:%S %p") if timestamp.respond_to?(:strftime)
28
-
29
- timestamp.strftime("%Y-%m-%d %H:%M:%S")
30
- end
31
-
32
- def self.get_make_result_summary(make_result)
33
- summary = "Make Result\n"
34
- summary += " Repository: #{make_result.repository}\n"
35
- summary += " Commit: #{make_result.commit}\n"
36
- summary += " Branch: #{make_result.branch}\n"
37
- summary += " Tag: #{make_result.tag}\n"
38
- summary += " Device: #{make_result.device}\n"
39
- summary += " Runtime Identifier: #{make_result.runtime_identifier}\n"
40
- summary += " Initial Size: #{get_humanized_size(make_result.initial_size)}\n"
41
- summary += " Final Size: #{get_humanized_size(make_result.final_size)}\n"
42
- summary += " Delta Size: #{get_humanized_size(make_result.final_size - make_result.initial_size)}\n"
43
- summary += " Commands: (#{make_result.commands.length})\n"
44
- make_result.commands.each do |command|
45
- details = get_command_details(command)
46
- summary += "\n"
47
- summary += indent_string(details, 4)
48
- summary += "\n"
49
- end
50
-
51
- summary
52
- end
53
-
54
- def self.get_commands(commands)
55
- message = ""
56
- commands.each do |command|
57
- message += Makit::Humanize.get_command_details(command)
58
- end
59
- message
60
- end
61
-
62
- def self.get_command_summary(command)
63
- symbol = Makit::Symbols.warning
64
- symbol = Makit::Symbols.checkmark if !command.exit_code.nil? && command.exit_code.zero?
65
- symbol = Makit::Symbols.error if command.exit_code != 0
66
- "#{symbol} #{command.name} #{command.arguments.join(" ")}"
67
- end
68
-
69
- def self.get_command_details(command)
70
- summary = "#{get_command_summary(command)}\n"
71
- summary += " Name: #{command.name}\n"
72
- summary += " Arguments: #{command.arguments.join(" ")}\n"
73
- summary += " Directory: #{command.directory}\n"
74
- summary += " Exit Code: #{command.exit_code}\n"
75
- if command.output.length.positive?
76
- summary += " Output:\n"
77
- summary += indent_string(command.output, 4)
78
- summary += "\n"
79
- end
80
- if command.error.length.positive?
81
- summary += " Error:\n"
82
- summary += indent_string(command.error, 4)
83
- summary += "\n"
84
- end
85
- summary
86
- end
87
-
88
- def self.indent_string(string, spaces)
89
- string.split("\n").map { |line| (" " * spaces) + line }.join("\n")
90
- end
91
-
92
- def self.get_protobuf_timestamp(timestamp)
93
- Time.at(timestamp.seconds, timestamp.nanos / 1000.0).strftime("%Y-%m-%d %H:%M:%S")
94
- end
95
-
96
- def self.get_protobuf_duration(duration)
97
- total_seconds = duration.seconds + (duration.nanos / 1_000_000_000.0)
98
- hours = (total_seconds / 3600).to_i
99
- minutes = ((total_seconds % 3600) / 60).to_i
100
- seconds = (total_seconds % 60).round(2)
101
- "#{hours}h #{minutes}m #{seconds}s"
102
- end
103
-
104
- def self.get_humanized_duration(seconds_value)
105
- minutes = (seconds_value / 60).to_i
106
- seconds = (seconds_value % 60).to_i
107
- hours = (minutes / 60).to_i
108
- minutes %= 60
109
- days = (hours / 24).to_i
110
- hours %= 24
111
- milliseconds = (seconds_value % 1 * 1000).to_i
112
-
113
- parts = []
114
- parts << "#{days} days" if days.positive?
115
- parts << "#{hours} hours" if hours.positive?
116
- if minutes.positive?
117
- parts << if minutes == 1
118
- "1 minute"
119
- else
120
- "#{minutes} minutes"
121
- end
122
- end
123
- if seconds.positive?
124
- parts << if seconds == 1
125
- "1 second"
126
- else
127
- "#{seconds} seconds"
128
- end
129
- end
130
- # parts << "#{seconds} seconds" if seconds > 0
131
- parts << "#{milliseconds} milliseconds" if milliseconds.positive? && seconds < 1
132
-
133
- parts << "0 seconds" if parts.empty?
134
- parts.join(", ")
135
- end
136
-
137
- def self.get_pipeline_execution_summary(execution_result)
138
- summary = "Pipeline Execution Summary\n"
139
- summary += " Execution ID: #{execution_result.execution_id}\n"
140
- summary += " Status: #{execution_result.status}\n"
141
- summary += " Started: #{execution_result.started_at}\n"
142
- summary += " Finished: #{execution_result.finished_at}\n" if execution_result.finished_at
143
-
144
- if execution_result.respond_to?(:total_duration_seconds) && execution_result.total_duration_seconds
145
- summary += " Duration: #{get_humanized_duration(execution_result.total_duration_seconds)}\n"
146
- end
147
-
148
- if execution_result.respond_to?(:podman_version) && execution_result.podman_version
149
- summary += " Podman Version: #{execution_result.podman_version}\n"
150
- end
151
-
152
- if execution_result.respond_to?(:execution_host) && execution_result.execution_host
153
- summary += " Host: #{execution_result.execution_host}\n"
154
- end
155
-
156
- summary += " Jobs: (#{execution_result.job_results.length})\n"
157
- execution_result.job_results.each do |job_result|
158
- summary += "\n"
159
- summary += indent_string(get_job_execution_details(job_result), 4)
160
- summary += "\n"
161
- end
162
-
163
- if execution_result.errors && execution_result.errors.any?
164
- summary += "\n Errors:\n"
165
- execution_result.errors.each do |error|
166
- summary += " - #{error}\n"
167
- end
168
- end
169
-
170
- if execution_result.warnings && execution_result.warnings.any?
171
- summary += "\n Warnings:\n"
172
- execution_result.warnings.each do |warning|
173
- summary += " - #{warning}\n"
174
- end
175
- end
176
-
177
- summary
178
- end
179
-
180
- def self.get_job_execution_details(job_result)
181
- details = "Job: #{job_result.job_name}\n"
182
- details += " Status: #{job_result.status}\n"
183
- details += " Started: #{job_result.started_at}\n"
184
- details += " Finished: #{job_result.finished_at}\n" if job_result.finished_at
185
- details += " Exit Code: #{job_result.exit_code}\n" if job_result.exit_code
186
-
187
- if job_result.errors && job_result.errors.any?
188
- details += " Errors:\n"
189
- job_result.errors.each do |error|
190
- details += " - #{error}\n"
191
- end
192
- end
193
-
194
- if job_result.logs && job_result.logs.any?
195
- details += " Logs:\n"
196
- job_result.logs.each do |log|
197
- details += " #{log}\n"
198
- end
199
- end
200
-
201
- if job_result.respond_to?(:stdout) && job_result.stdout && !job_result.stdout.empty?
202
- details += " Stdout:\n"
203
- job_result.stdout.split("\n").each do |line|
204
- details += " #{line}\n"
205
- end
206
- end
207
-
208
- if job_result.respond_to?(:stderr) && job_result.stderr && !job_result.stderr.empty?
209
- details += " Stderr:\n"
210
- job_result.stderr.split("\n").each do |line|
211
- details += " #{line}\n"
212
- end
213
- end
214
-
215
- details
216
- end
217
- end
218
- end
1
+ # frozen_string_literal: true
2
+
3
+ # This module provides classes for the Makit gem.
4
+ module Makit
5
+ # Provides utilities for converting data into human-readable formats.
6
+ #
7
+ # This class handles formatting of file sizes, timestamps, durations,
8
+ # and build result summaries for display to users.
9
+ #
10
+ # @example Basic usage
11
+ # Makit::Humanize.get_humanized_size(1024) # => "1.00 KB"
12
+ # Makit::Humanize.get_humanized_duration(3661) # => "1 hour, 1 minute, 1 second"
13
+ #
14
+ class Humanize
15
+ def self.get_humanized_size(bytes, precision = 2)
16
+ units = %w[B KB MB GB TB PB]
17
+ return "0 B" if bytes.zero?
18
+
19
+ exp = (Math.log(bytes) / Math.log(1024)).to_i
20
+ exp = units.size - 1 if exp >= units.size
21
+
22
+ size = bytes.to_f / (1024 ** exp)
23
+ format("%.#{precision}f %s", size, units[exp])
24
+ end
25
+
26
+ def self.get_humanized_timestamp(timestamp)
27
+ return timestamp.strftime("%Y-%m-%d %I:%M:%S %p") if timestamp.respond_to?(:strftime)
28
+
29
+ timestamp.strftime("%Y-%m-%d %H:%M:%S")
30
+ end
31
+
32
+ def self.get_make_result_summary(make_result)
33
+ summary = "Make Result\n"
34
+ summary += " Repository: #{make_result.repository}\n"
35
+ summary += " Commit: #{make_result.commit}\n"
36
+ summary += " Branch: #{make_result.branch}\n"
37
+ summary += " Tag: #{make_result.tag}\n"
38
+ summary += " Device: #{make_result.device}\n"
39
+ summary += " Runtime Identifier: #{make_result.runtime_identifier}\n"
40
+ summary += " Initial Size: #{get_humanized_size(make_result.initial_size)}\n"
41
+ summary += " Final Size: #{get_humanized_size(make_result.final_size)}\n"
42
+ summary += " Delta Size: #{get_humanized_size(make_result.final_size - make_result.initial_size)}\n"
43
+ summary += " Commands: (#{make_result.commands.length})\n"
44
+ make_result.commands.each do |command|
45
+ details = get_command_details(command)
46
+ summary += "\n"
47
+ summary += indent_string(details, 4)
48
+ summary += "\n"
49
+ end
50
+
51
+ summary
52
+ end
53
+
54
+ def self.get_commands(commands)
55
+ message = ""
56
+ commands.each do |command|
57
+ message += Makit::Humanize.get_command_details(command)
58
+ end
59
+ message
60
+ end
61
+
62
+ def self.get_command_summary(command)
63
+ symbol = Makit::Symbols.warning
64
+ symbol = Makit::Symbols.checkmark if !command.exit_code.nil? && command.exit_code.zero?
65
+ symbol = Makit::Symbols.error if command.exit_code != 0
66
+ "#{symbol} #{command.name} #{command.arguments.join(" ")}"
67
+ end
68
+
69
+ def self.get_command_details(command)
70
+ summary = "#{get_command_summary(command)}\n"
71
+ summary += " Name: #{command.name}\n"
72
+ summary += " Arguments: #{command.arguments.join(" ")}\n"
73
+ summary += " Directory: #{command.directory}\n"
74
+ summary += " Exit Code: #{command.exit_code}\n"
75
+ if command.output.length.positive?
76
+ summary += " Output:\n"
77
+ summary += indent_string(command.output, 4)
78
+ summary += "\n"
79
+ end
80
+ if command.error.length.positive?
81
+ summary += " Error:\n"
82
+ summary += indent_string(command.error, 4)
83
+ summary += "\n"
84
+ end
85
+ summary
86
+ end
87
+
88
+ def self.indent_string(string, spaces)
89
+ string.split("\n").map { |line| (" " * spaces) + line }.join("\n")
90
+ end
91
+
92
+ def self.get_protobuf_timestamp(timestamp)
93
+ Time.at(timestamp.seconds, timestamp.nanos / 1000.0).strftime("%Y-%m-%d %H:%M:%S")
94
+ end
95
+
96
+ def self.get_protobuf_duration(duration)
97
+ total_seconds = duration.seconds + (duration.nanos / 1_000_000_000.0)
98
+ hours = (total_seconds / 3600).to_i
99
+ minutes = ((total_seconds % 3600) / 60).to_i
100
+ seconds = (total_seconds % 60).round(2)
101
+ "#{hours}h #{minutes}m #{seconds}s"
102
+ end
103
+
104
+ def self.get_humanized_duration(seconds_value)
105
+ minutes = (seconds_value / 60).to_i
106
+ seconds = (seconds_value % 60).to_i
107
+ hours = (minutes / 60).to_i
108
+ minutes %= 60
109
+ days = (hours / 24).to_i
110
+ hours %= 24
111
+ milliseconds = (seconds_value % 1 * 1000).to_i
112
+
113
+ parts = []
114
+ parts << "#{days} days" if days.positive?
115
+ parts << "#{hours} hours" if hours.positive?
116
+ if minutes.positive?
117
+ parts << if minutes == 1
118
+ "1 minute"
119
+ else
120
+ "#{minutes} minutes"
121
+ end
122
+ end
123
+ if seconds.positive?
124
+ parts << if seconds == 1
125
+ "1 second"
126
+ else
127
+ "#{seconds} seconds"
128
+ end
129
+ end
130
+ # parts << "#{seconds} seconds" if seconds > 0
131
+ parts << "#{milliseconds} milliseconds" if milliseconds.positive? && seconds < 1
132
+
133
+ parts << "0 seconds" if parts.empty?
134
+ parts.join(", ")
135
+ end
136
+
137
+ def self.get_pipeline_execution_summary(execution_result)
138
+ summary = "Pipeline Execution Summary\n"
139
+ summary += " Execution ID: #{execution_result.execution_id}\n"
140
+ summary += " Status: #{execution_result.status}\n"
141
+ summary += " Started: #{execution_result.started_at}\n"
142
+ summary += " Finished: #{execution_result.finished_at}\n" if execution_result.finished_at
143
+
144
+ if execution_result.respond_to?(:total_duration_seconds) && execution_result.total_duration_seconds
145
+ summary += " Duration: #{get_humanized_duration(execution_result.total_duration_seconds)}\n"
146
+ end
147
+
148
+ if execution_result.respond_to?(:podman_version) && execution_result.podman_version
149
+ summary += " Podman Version: #{execution_result.podman_version}\n"
150
+ end
151
+
152
+ if execution_result.respond_to?(:execution_host) && execution_result.execution_host
153
+ summary += " Host: #{execution_result.execution_host}\n"
154
+ end
155
+
156
+ summary += " Jobs: (#{execution_result.job_results.length})\n"
157
+ execution_result.job_results.each do |job_result|
158
+ summary += "\n"
159
+ summary += indent_string(get_job_execution_details(job_result), 4)
160
+ summary += "\n"
161
+ end
162
+
163
+ if execution_result.errors && execution_result.errors.any?
164
+ summary += "\n Errors:\n"
165
+ execution_result.errors.each do |error|
166
+ summary += " - #{error}\n"
167
+ end
168
+ end
169
+
170
+ if execution_result.warnings && execution_result.warnings.any?
171
+ summary += "\n Warnings:\n"
172
+ execution_result.warnings.each do |warning|
173
+ summary += " - #{warning}\n"
174
+ end
175
+ end
176
+
177
+ summary
178
+ end
179
+
180
+ def self.get_job_execution_details(job_result)
181
+ details = "Job: #{job_result.job_name}\n"
182
+ details += " Status: #{job_result.status}\n"
183
+ details += " Started: #{job_result.started_at}\n"
184
+ details += " Finished: #{job_result.finished_at}\n" if job_result.finished_at
185
+ details += " Exit Code: #{job_result.exit_code}\n" if job_result.exit_code
186
+
187
+ if job_result.errors && job_result.errors.any?
188
+ details += " Errors:\n"
189
+ job_result.errors.each do |error|
190
+ details += " - #{error}\n"
191
+ end
192
+ end
193
+
194
+ if job_result.logs && job_result.logs.any?
195
+ details += " Logs:\n"
196
+ job_result.logs.each do |log|
197
+ details += " #{log}\n"
198
+ end
199
+ end
200
+
201
+ if job_result.respond_to?(:stdout) && job_result.stdout && !job_result.stdout.empty?
202
+ details += " Stdout:\n"
203
+ job_result.stdout.split("\n").each do |line|
204
+ details += " #{line}\n"
205
+ end
206
+ end
207
+
208
+ if job_result.respond_to?(:stderr) && job_result.stderr && !job_result.stderr.empty?
209
+ details += " Stderr:\n"
210
+ job_result.stderr.split("\n").each do |line|
211
+ details += " #{line}\n"
212
+ end
213
+ end
214
+
215
+ details
216
+ end
217
+ end
218
+ end
data/lib/makit/indexer.rb CHANGED
@@ -1,47 +1,47 @@
1
- # frozen_string_literal: true
2
-
3
- # This module provides classes for the Makit gem.
4
- module Makit
5
- # This class provide methods for indexing objects.
6
- #
7
- class Indexer
8
- attr_accessor :keywords_index, :protoc_json_serializer # Hash of string key to string[] of keyword
9
-
10
- def initialize
11
- @keywords_index = {}
12
- @protoc_json_serializer = Makit::Serializer.new(Makit::Proto3Formats::JSON)
13
- end
14
-
15
- def index(key, item)
16
- # item must be serializable to json
17
- keywords = []
18
- hash = JSON.parse(item.to_json)
19
- hash.each_value do |value|
20
- value = value.to_s.downcase
21
- keywords << value if value.length >= 3 && !keywords.include?(value)
22
- end
23
- keywords.each do |keyword|
24
- @keywords_index[keyword] = [] unless @keywords_index.key?(keyword)
25
- @keywords_index[keyword] << key unless @keywords_index[keyword].include?(key)
26
- end
27
- end
28
-
29
- def search(query)
30
- keys = []
31
- # todo, remove terms less that length of 3
32
- terms = query.downcase.split.reject { |term| term.length < 3 }
33
- keywords_index.each do |key, value| # {|kvp|
34
- keys << key if get_match_count(terms, value) == terms.length
35
- end
36
- keys
37
- end
38
-
39
- def get_match_count(terms, keywords)
40
- match_count = 0
41
- terms.each do |term|
42
- match_count += 1 if keywords.include?(term)
43
- end
44
- match_count
45
- end
46
- end
47
- end
1
+ # frozen_string_literal: true
2
+
3
+ # This module provides classes for the Makit gem.
4
+ module Makit
5
+ # This class provide methods for indexing objects.
6
+ #
7
+ class Indexer
8
+ attr_accessor :keywords_index, :protoc_json_serializer # Hash of string key to string[] of keyword
9
+
10
+ def initialize
11
+ @keywords_index = {}
12
+ @protoc_json_serializer = Makit::Serializer.new(Makit::Proto3Formats::JSON)
13
+ end
14
+
15
+ def index(key, item)
16
+ # item must be serializable to json
17
+ keywords = []
18
+ hash = JSON.parse(item.to_json)
19
+ hash.each_value do |value|
20
+ value = value.to_s.downcase
21
+ keywords << value if value.length >= 3 && !keywords.include?(value)
22
+ end
23
+ keywords.each do |keyword|
24
+ @keywords_index[keyword] = [] unless @keywords_index.key?(keyword)
25
+ @keywords_index[keyword] << key unless @keywords_index[keyword].include?(key)
26
+ end
27
+ end
28
+
29
+ def search(query)
30
+ keys = []
31
+ # todo, remove terms less that length of 3
32
+ terms = query.downcase.split.reject { |term| term.length < 3 }
33
+ keywords_index.each do |key, value| # {|kvp|
34
+ keys << key if get_match_count(terms, value) == terms.length
35
+ end
36
+ keys
37
+ end
38
+
39
+ def get_match_count(terms, keywords)
40
+ match_count = 0
41
+ terms.each do |term|
42
+ match_count += 1 if keywords.include?(term)
43
+ end
44
+ match_count
45
+ end
46
+ end
47
+ end