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.
- checksums.yaml +4 -4
- data/README.md +41 -41
- data/exe/makit +5 -5
- data/lib/makit/apache.rb +28 -28
- data/lib/makit/auto.rb +48 -48
- data/lib/makit/azure/blob_storage.rb +257 -257
- data/lib/makit/azure/cli.rb +284 -284
- data/lib/makit/cli/base.rb +17 -17
- data/lib/makit/cli/build_commands.rb +500 -500
- data/lib/makit/cli/generators/base_generator.rb +74 -74
- data/lib/makit/cli/generators/dotnet_generator.rb +50 -50
- data/lib/makit/cli/generators/generator_factory.rb +49 -49
- data/lib/makit/cli/generators/node_generator.rb +50 -50
- data/lib/makit/cli/generators/ruby_generator.rb +77 -77
- data/lib/makit/cli/generators/rust_generator.rb +50 -50
- data/lib/makit/cli/generators/templates/dotnet_templates.rb +167 -167
- data/lib/makit/cli/generators/templates/node_templates.rb +161 -161
- data/lib/makit/cli/generators/templates/ruby/gemfile.rb +26 -26
- data/lib/makit/cli/generators/templates/ruby/gemspec.rb +41 -41
- data/lib/makit/cli/generators/templates/ruby/main_lib.rb +33 -33
- data/lib/makit/cli/generators/templates/ruby/rakefile.rb +35 -35
- data/lib/makit/cli/generators/templates/ruby/readme.rb +63 -63
- data/lib/makit/cli/generators/templates/ruby/test.rb +39 -39
- data/lib/makit/cli/generators/templates/ruby/test_helper.rb +29 -29
- data/lib/makit/cli/generators/templates/ruby/version.rb +29 -29
- data/lib/makit/cli/generators/templates/rust_templates.rb +128 -128
- data/lib/makit/cli/main.rb +78 -78
- data/lib/makit/cli/pipeline_commands.rb +311 -311
- data/lib/makit/cli/project_commands.rb +868 -868
- data/lib/makit/cli/repository_commands.rb +661 -661
- data/lib/makit/cli/strategy_commands.rb +207 -207
- data/lib/makit/cli/utility_commands.rb +521 -521
- data/lib/makit/commands/factory.rb +359 -359
- data/lib/makit/commands/middleware/base.rb +73 -73
- data/lib/makit/commands/middleware/cache.rb +248 -248
- data/lib/makit/commands/middleware/command_logger.rb +312 -312
- data/lib/makit/commands/middleware/validator.rb +269 -269
- data/lib/makit/commands/request.rb +316 -316
- data/lib/makit/commands/result.rb +323 -323
- data/lib/makit/commands/runner.rb +386 -386
- data/lib/makit/commands/strategies/base.rb +171 -171
- data/lib/makit/commands/strategies/child_process.rb +162 -162
- data/lib/makit/commands/strategies/factory.rb +136 -136
- data/lib/makit/commands/strategies/synchronous.rb +139 -139
- data/lib/makit/commands.rb +50 -50
- data/lib/makit/configuration/dotnet_project.rb +48 -48
- data/lib/makit/configuration/gitlab_helper.rb +61 -61
- data/lib/makit/configuration/project.rb +292 -292
- data/lib/makit/configuration/rakefile_helper.rb +43 -43
- data/lib/makit/configuration/step.rb +34 -34
- data/lib/makit/configuration/timeout.rb +74 -74
- data/lib/makit/configuration.rb +21 -21
- data/lib/makit/content/default_gitignore.rb +7 -7
- data/lib/makit/content/default_gitignore.txt +225 -225
- data/lib/makit/content/default_rakefile.rb +13 -13
- data/lib/makit/content/gem_rakefile.rb +16 -16
- data/lib/makit/context.rb +1 -1
- data/lib/makit/data.rb +49 -49
- data/lib/makit/directories.rb +170 -170
- data/lib/makit/directory.rb +262 -262
- data/lib/makit/docs/files.rb +89 -89
- data/lib/makit/docs/rake.rb +102 -102
- data/lib/makit/dotnet/cli.rb +69 -69
- data/lib/makit/dotnet/project.rb +217 -217
- data/lib/makit/dotnet/solution.rb +38 -38
- data/lib/makit/dotnet/solution_classlib.rb +239 -239
- data/lib/makit/dotnet/solution_console.rb +264 -264
- data/lib/makit/dotnet/solution_maui.rb +354 -354
- data/lib/makit/dotnet/solution_wasm.rb +275 -275
- data/lib/makit/dotnet/solution_wpf.rb +304 -304
- data/lib/makit/dotnet.rb +102 -102
- data/lib/makit/email.rb +90 -90
- data/lib/makit/environment.rb +142 -142
- data/lib/makit/examples/runner.rb +370 -370
- data/lib/makit/exceptions.rb +45 -45
- data/lib/makit/fileinfo.rb +32 -32
- data/lib/makit/files.rb +43 -43
- data/lib/makit/gems.rb +49 -40
- data/lib/makit/git/cli.rb +103 -78
- data/lib/makit/git/repository.rb +100 -100
- data/lib/makit/git.rb +104 -104
- data/lib/makit/gitlab/pipeline.rb +857 -857
- data/lib/makit/gitlab/pipeline_service_impl.rb +1535 -1535
- data/lib/makit/gitlab_runner.rb +59 -59
- data/lib/makit/humanize.rb +218 -218
- data/lib/makit/indexer.rb +47 -47
- data/lib/makit/io/filesystem.rb +111 -111
- data/lib/makit/io/filesystem_service_impl.rb +337 -337
- data/lib/makit/lint.rb +212 -212
- data/lib/makit/logging/configuration.rb +309 -309
- data/lib/makit/logging/format_registry.rb +84 -84
- data/lib/makit/logging/formatters/base.rb +39 -39
- data/lib/makit/logging/formatters/console_formatter.rb +140 -140
- data/lib/makit/logging/formatters/json_formatter.rb +65 -65
- data/lib/makit/logging/formatters/plain_text_formatter.rb +71 -71
- data/lib/makit/logging/formatters/text_formatter.rb +64 -64
- data/lib/makit/logging/log_request.rb +119 -119
- data/lib/makit/logging/logger.rb +199 -199
- data/lib/makit/logging/sinks/base.rb +91 -91
- data/lib/makit/logging/sinks/console.rb +72 -72
- data/lib/makit/logging/sinks/file_sink.rb +92 -92
- data/lib/makit/logging/sinks/structured.rb +123 -123
- data/lib/makit/logging/sinks/unified_file_sink.rb +296 -296
- data/lib/makit/logging.rb +578 -578
- data/lib/makit/markdown.rb +75 -75
- data/lib/makit/mp/basic_object_mp.rb +17 -17
- data/lib/makit/mp/command_mp.rb +13 -13
- data/lib/makit/mp/command_request.mp.rb +17 -17
- data/lib/makit/mp/project_mp.rb +199 -199
- data/lib/makit/mp/string_mp.rb +205 -205
- data/lib/makit/nuget.rb +243 -74
- data/lib/makit/nuget_cache.rb +123 -0
- data/lib/makit/podman/podman.rb +458 -458
- data/lib/makit/podman/podman_service_impl.rb +1081 -1081
- data/lib/makit/port.rb +32 -32
- data/lib/makit/port_utility.rb +128 -0
- data/lib/makit/process.rb +377 -377
- data/lib/makit/protoc.rb +112 -112
- data/lib/makit/rake/cli.rb +196 -196
- data/lib/makit/rake/trace_controller.rb +174 -174
- data/lib/makit/rake.rb +81 -81
- data/lib/makit/ruby/cli.rb +185 -185
- data/lib/makit/ruby.rb +25 -25
- data/lib/makit/rubygems.rb +137 -137
- data/lib/makit/secrets/azure_key_vault.rb +322 -322
- data/lib/makit/secrets/azure_secrets.rb +183 -183
- data/lib/makit/secrets/local_secrets.rb +72 -72
- data/lib/makit/secrets/secrets_manager.rb +105 -105
- data/lib/makit/secrets.rb +16 -16
- data/lib/makit/serializer.rb +130 -130
- data/lib/makit/services/builder.rb +186 -186
- data/lib/makit/services/error_handler.rb +226 -226
- data/lib/makit/services/repository_manager.rb +367 -367
- data/lib/makit/services/validator.rb +112 -112
- data/lib/makit/setup/classlib.rb +101 -101
- data/lib/makit/setup/gem.rb +268 -268
- data/lib/makit/setup/pages.rb +11 -11
- data/lib/makit/setup/razorclasslib.rb +101 -101
- data/lib/makit/setup/runner.rb +54 -54
- data/lib/makit/setup.rb +5 -5
- data/lib/makit/show.rb +110 -110
- data/lib/makit/storage.rb +126 -126
- data/lib/makit/symbols.rb +175 -175
- data/lib/makit/task_info.rb +130 -130
- data/lib/makit/tasks/at_exit.rb +15 -15
- data/lib/makit/tasks/build.rb +22 -22
- data/lib/makit/tasks/bump.rb +7 -7
- data/lib/makit/tasks/clean.rb +13 -13
- data/lib/makit/tasks/configure.rb +10 -10
- data/lib/makit/tasks/format.rb +10 -10
- data/lib/makit/tasks/hook_manager.rb +443 -443
- data/lib/makit/tasks/info.rb +368 -368
- data/lib/makit/tasks/init.rb +49 -49
- data/lib/makit/tasks/integrate.rb +60 -60
- data/lib/makit/tasks/pull_incoming.rb +13 -13
- data/lib/makit/tasks/secrets.rb +7 -7
- data/lib/makit/tasks/setup.rb +16 -16
- data/lib/makit/tasks/sync.rb +14 -14
- data/lib/makit/tasks/tag.rb +27 -27
- data/lib/makit/tasks/task_monkey_patch.rb +81 -81
- data/lib/makit/tasks/test.rb +22 -22
- data/lib/makit/tasks/update.rb +21 -18
- data/lib/makit/tasks/version.rb +6 -6
- data/lib/makit/tasks.rb +24 -24
- data/lib/makit/test_cache.rb +239 -239
- data/lib/makit/tree.rb +37 -37
- data/lib/makit/v1/configuration/project_service_impl.rb +370 -370
- data/lib/makit/v1/git/git_repository_service_impl.rb +295 -295
- data/lib/makit/v1/makit.v1_pb.rb +35 -35
- data/lib/makit/v1/makit.v1_services_pb.rb +27 -27
- data/lib/makit/v1/services/repository_manager_service_impl.rb +572 -572
- data/lib/makit/version.rb +661 -661
- data/lib/makit/version_util.rb +21 -21
- data/lib/makit/wix.rb +95 -95
- data/lib/makit/yaml.rb +29 -29
- data/lib/makit/zip.rb +17 -17
- data/lib/makit/zip_utility.rb +97 -0
- data/lib/makit copy.rb +44 -44
- data/lib/makit.rb +119 -115
- 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
|