makit 0.0.158 → 0.0.162

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 (180) 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 +49 -40
  79. data/lib/makit/git/cli.rb +103 -78
  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 +243 -74
  112. data/lib/makit/nuget_cache.rb +123 -0
  113. data/lib/makit/podman/podman.rb +458 -458
  114. data/lib/makit/podman/podman_service_impl.rb +1081 -1081
  115. data/lib/makit/port.rb +32 -32
  116. data/lib/makit/port_utility.rb +128 -0
  117. data/lib/makit/process.rb +377 -377
  118. data/lib/makit/protoc.rb +112 -112
  119. data/lib/makit/rake/cli.rb +196 -196
  120. data/lib/makit/rake/trace_controller.rb +174 -174
  121. data/lib/makit/rake.rb +81 -81
  122. data/lib/makit/ruby/cli.rb +185 -185
  123. data/lib/makit/ruby.rb +25 -25
  124. data/lib/makit/rubygems.rb +137 -137
  125. data/lib/makit/secrets/azure_key_vault.rb +322 -322
  126. data/lib/makit/secrets/azure_secrets.rb +183 -183
  127. data/lib/makit/secrets/local_secrets.rb +72 -72
  128. data/lib/makit/secrets/secrets_manager.rb +105 -105
  129. data/lib/makit/secrets.rb +16 -16
  130. data/lib/makit/serializer.rb +130 -130
  131. data/lib/makit/services/builder.rb +186 -186
  132. data/lib/makit/services/error_handler.rb +226 -226
  133. data/lib/makit/services/repository_manager.rb +367 -367
  134. data/lib/makit/services/validator.rb +112 -112
  135. data/lib/makit/setup/classlib.rb +101 -101
  136. data/lib/makit/setup/gem.rb +268 -268
  137. data/lib/makit/setup/pages.rb +11 -11
  138. data/lib/makit/setup/razorclasslib.rb +101 -101
  139. data/lib/makit/setup/runner.rb +54 -54
  140. data/lib/makit/setup.rb +5 -5
  141. data/lib/makit/show.rb +110 -110
  142. data/lib/makit/storage.rb +126 -126
  143. data/lib/makit/symbols.rb +175 -175
  144. data/lib/makit/task_info.rb +130 -130
  145. data/lib/makit/tasks/at_exit.rb +15 -15
  146. data/lib/makit/tasks/build.rb +22 -22
  147. data/lib/makit/tasks/bump.rb +7 -7
  148. data/lib/makit/tasks/clean.rb +13 -13
  149. data/lib/makit/tasks/configure.rb +10 -10
  150. data/lib/makit/tasks/format.rb +10 -10
  151. data/lib/makit/tasks/hook_manager.rb +443 -443
  152. data/lib/makit/tasks/info.rb +368 -368
  153. data/lib/makit/tasks/init.rb +49 -49
  154. data/lib/makit/tasks/integrate.rb +60 -60
  155. data/lib/makit/tasks/pull_incoming.rb +13 -13
  156. data/lib/makit/tasks/secrets.rb +7 -7
  157. data/lib/makit/tasks/setup.rb +16 -16
  158. data/lib/makit/tasks/sync.rb +14 -14
  159. data/lib/makit/tasks/tag.rb +27 -27
  160. data/lib/makit/tasks/task_monkey_patch.rb +81 -81
  161. data/lib/makit/tasks/test.rb +22 -22
  162. data/lib/makit/tasks/update.rb +21 -18
  163. data/lib/makit/tasks/version.rb +6 -6
  164. data/lib/makit/tasks.rb +24 -24
  165. data/lib/makit/test_cache.rb +239 -239
  166. data/lib/makit/tree.rb +37 -37
  167. data/lib/makit/v1/configuration/project_service_impl.rb +370 -370
  168. data/lib/makit/v1/git/git_repository_service_impl.rb +295 -295
  169. data/lib/makit/v1/makit.v1_pb.rb +35 -35
  170. data/lib/makit/v1/makit.v1_services_pb.rb +27 -27
  171. data/lib/makit/v1/services/repository_manager_service_impl.rb +572 -572
  172. data/lib/makit/version.rb +661 -661
  173. data/lib/makit/version_util.rb +21 -21
  174. data/lib/makit/wix.rb +95 -95
  175. data/lib/makit/yaml.rb +29 -29
  176. data/lib/makit/zip.rb +17 -17
  177. data/lib/makit/zip_utility.rb +97 -0
  178. data/lib/makit copy.rb +44 -44
  179. data/lib/makit.rb +119 -115
  180. metadata +5 -2
data/lib/makit/port.rb CHANGED
@@ -1,32 +1,32 @@
1
- # frozen_string_literal: true
2
-
3
- # This module provides classes for the Makit gem.
4
- module Makit
5
- # This class provide methods for working with ports
6
- #
7
- class Port
8
- def self.is_port_available?(port)
9
- socket = Socket.new(:INET, :STREAM)
10
- socket.bind(Socket.sockaddr_in(port, ""))
11
- socket.close
12
- true # Port is available for use
13
- rescue Errno::EADDRINUSE, Errno::EACCES
14
- false # Port is not available for use
15
- end
16
-
17
- def self.get_available_port(start_port = 1024, end_port = 65_535)
18
- (start_port..end_port).each do |port|
19
- return port if is_port_available?(port)
20
- end
21
- nil # No available port found in the range
22
- end
23
-
24
- def self.get_random_port
25
- rand(1024..65_535)
26
- end
27
-
28
- def self.get_random_available_port
29
- get_available_port(get_random_port)
30
- end
31
- end
32
- 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 working with ports
6
+ #
7
+ class Port
8
+ def self.is_port_available?(port)
9
+ socket = Socket.new(:INET, :STREAM)
10
+ socket.bind(Socket.sockaddr_in(port, ""))
11
+ socket.close
12
+ true # Port is available for use
13
+ rescue Errno::EADDRINUSE, Errno::EACCES
14
+ false # Port is not available for use
15
+ end
16
+
17
+ def self.get_available_port(start_port = 1024, end_port = 65_535)
18
+ (start_port..end_port).each do |port|
19
+ return port if is_port_available?(port)
20
+ end
21
+ nil # No available port found in the range
22
+ end
23
+
24
+ def self.get_random_port
25
+ rand(1024..65_535)
26
+ end
27
+
28
+ def self.get_random_available_port
29
+ get_available_port(get_random_port)
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,128 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "open3"
4
+
5
+ module Makit
6
+ module PortUtility
7
+ class Error < StandardError; end
8
+
9
+ # Ensures a port is free by killing any process using it.
10
+ #
11
+ # Examples:
12
+ # Makit::PortUtility.ensure_port_free(5261)
13
+ # Makit::PortUtility.ensure_port_free(5261, verbose: true)
14
+ #
15
+ # Returns true if the port is now free, false if it couldn't be freed.
16
+ #
17
+ def self.ensure_port_free(port, verbose: false)
18
+ raise ArgumentError, "port must be a positive integer" unless port.is_a?(Integer) && port > 0
19
+
20
+ return true unless port_in_use?(port)
21
+
22
+ puts "Port #{port} is in use. Attempting to free it..." if verbose
23
+
24
+ killed = kill_process_on_port(port, verbose: verbose)
25
+
26
+ if killed
27
+ # Wait a moment for the port to be released
28
+ sleep(1)
29
+ # Verify port is now free
30
+ unless port_in_use?(port)
31
+ puts "Port #{port} is now free." if verbose
32
+ return true
33
+ else
34
+ puts "Warning: Port #{port} is still in use after killing process." if verbose
35
+ return false
36
+ end
37
+ else
38
+ puts "Warning: Could not kill process on port #{port}." if verbose
39
+ return false
40
+ end
41
+ rescue Error, ArgumentError => e
42
+ puts "Error freeing port #{port}: #{e.message}" if verbose
43
+ false
44
+ end
45
+
46
+ # -----------------------
47
+ # Internals
48
+ # -----------------------
49
+
50
+ def self.port_in_use?(port)
51
+ if RUBY_PLATFORM =~ /mswin|mingw|cygwin/
52
+ # Windows: Use netstat
53
+ stdout, _stderr, status = Open3.capture3("netstat", "-ano")
54
+ return false unless status.success?
55
+ stdout.lines.any? { |line| line.include?(":#{port}") && line.include?("LISTENING") }
56
+ else
57
+ # Unix/macOS: Use lsof
58
+ stdout, _stderr, status = Open3.capture3("lsof", "-ti:#{port}")
59
+ status.success? && !stdout.strip.empty?
60
+ end
61
+ rescue Errno::ENOENT
62
+ # Command not found - assume port is not in use
63
+ false
64
+ end
65
+ private_class_method :port_in_use?
66
+
67
+ def self.kill_process_on_port(port, verbose: false)
68
+ if RUBY_PLATFORM =~ /mswin|mingw|cygwin/
69
+ # Windows: Use netstat to find PID, then taskkill
70
+ stdout, _stderr, status = Open3.capture3("netstat", "-ano")
71
+ return false unless status.success?
72
+
73
+ pids = []
74
+ stdout.lines.each do |line|
75
+ if line.include?(":#{port}") && line.include?("LISTENING")
76
+ parts = line.split
77
+ pid = parts.last
78
+ pids << pid if pid && pid.match?(/^\d+$/)
79
+ end
80
+ end
81
+
82
+ killed_any = false
83
+ pids.uniq.each do |pid|
84
+ begin
85
+ stdout, _stderr, status = Open3.capture3("taskkill", "/F", "/PID", pid)
86
+ if status.success?
87
+ puts "Killed process #{pid} on port #{port}" if verbose
88
+ killed_any = true
89
+ end
90
+ rescue Errno::ENOENT
91
+ # taskkill not found
92
+ return false
93
+ end
94
+ end
95
+
96
+ killed_any
97
+ else
98
+ # Unix/macOS: Use lsof to find PID, then kill
99
+ stdout, _stderr, status = Open3.capture3("lsof", "-ti:#{port}")
100
+ return false unless status.success?
101
+ return true if stdout.strip.empty? # Port is already free
102
+
103
+ pids = stdout.strip.split("\n").map(&:strip).reject(&:empty?)
104
+ return false if pids.empty?
105
+
106
+ killed_any = false
107
+ pids.each do |pid|
108
+ begin
109
+ stdout, _stderr, status = Open3.capture3("kill", "-9", pid)
110
+ if status.success?
111
+ puts "Killed process #{pid} on port #{port}" if verbose
112
+ killed_any = true
113
+ end
114
+ rescue Errno::ENOENT
115
+ # kill not found
116
+ return false
117
+ end
118
+ end
119
+
120
+ killed_any
121
+ end
122
+ rescue Errno::ENOENT
123
+ # Command not found
124
+ false
125
+ end
126
+ private_class_method :kill_process_on_port
127
+ end
128
+ end