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
@@ -1,21 +1,21 @@
1
- # frozen_string_literal: true
2
-
3
- module Makit
4
- # Version utility class for handling version comparisons
5
- class Version
6
- # Get the highest version from a list of version strings
7
- #
8
- # @param versions [Array<String>] array of version strings
9
- # @return [String, nil] highest version string or nil if empty
10
- def self.get_highest_version(versions)
11
- return nil if versions.nil? || versions.empty?
12
-
13
- # Sort versions using Gem::Version for proper semantic versioning
14
- sorted_versions = versions.sort_by { |v| Gem::Version.new(v) }
15
- sorted_versions.last
16
- rescue ArgumentError
17
- # If any version is invalid, fall back to string sorting
18
- versions.max
19
- end
20
- end
21
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Makit
4
+ # Version utility class for handling version comparisons
5
+ class Version
6
+ # Get the highest version from a list of version strings
7
+ #
8
+ # @param versions [Array<String>] array of version strings
9
+ # @return [String, nil] highest version string or nil if empty
10
+ def self.get_highest_version(versions)
11
+ return nil if versions.nil? || versions.empty?
12
+
13
+ # Sort versions using Gem::Version for proper semantic versioning
14
+ sorted_versions = versions.sort_by { |v| Gem::Version.new(v) }
15
+ sorted_versions.last
16
+ rescue ArgumentError
17
+ # If any version is invalid, fall back to string sorting
18
+ versions.max
19
+ end
20
+ end
21
+ end
data/lib/makit/wix.rb CHANGED
@@ -1,95 +1,95 @@
1
- # frozen_string_literal: true
2
-
3
- require "securerandom"
4
-
5
- module Makit
6
- # This class provide methods for working with the Nuget package cache
7
- #
8
- # Example:
9
- #
10
- # Makit::Directory.cache("Google.Protobuf", "3.27.2")
11
- #
12
- # dotnet nuget locals all --list
13
- # dotnet nuget locals all --clear
14
- #
15
- class Wix
16
- def self.setup
17
- if Makit::Environment.is_windows?
18
- # test if dotnet is installed
19
- if Makit::DotNet.is_installed?
20
- # test if wix is already installed
21
- "dotnet tool install --global wix".run unless `dotnet tool list --global`.include?("wix")
22
- puts " Wix version #{Wix.version.to_s.colorize(:green)}"
23
- # display the link to https://wixtoolset.org/
24
- puts " https://wixtoolset.org/".colorize(:green)
25
- # display the link to https://marketplace.visualstudio.com/items?itemName=FireGiant.FireGiantHeatWaveDev17
26
- puts " https://marketplace.visualstudio.com/items?itemName=FireGiant.FireGiantHeatWaveDev17".colorize(:green)
27
- else # !File.exist?(Makit::Environment.which("dotnet"))
28
- puts "dotnet does not appear to be installed"
29
- end
30
- else
31
- puts "Wix is not supported on non-Windows platforms"
32
- end
33
- end
34
-
35
- def self.version
36
- `wix --version`.strip.split("+").first
37
- end
38
-
39
- def self.setup_package(name, path, files)
40
- # create the path if it does not exist
41
- FileUtils.mkdir_p(path) unless File.directory?(path)
42
- # create the #{name}.wixproj file
43
- File.open("#{path}/#{name}.wixproj", "w") do |f|
44
- f.puts "<Project Sdk=\"WixToolset.Sdk/#{Wix.version}\">"
45
- f.puts "</Project>"
46
- end
47
- # create the Package.wxs file
48
- File.open("#{path}/Package.wxs", "w") do |f|
49
- f.puts "<Wix xmlns=\"http://wixtoolset.org/schemas/v4/wxs\">"
50
- f.puts " <Package Name=\"#{name}\" Manufacturer=\"Acme\" Version=\"0.0.0.0\" UpgradeCode=\"#{SecureRandom.uuid}\">"
51
- # f.puts " <MajorUpgrade DowngradeErrorMessage=\"!(loc.DowngradeError)\" />"
52
- f.puts " <Files Include=\"#{files}\" />"
53
- # f.puts " <Feature Id=\"Main\">"
54
- # f.puts " <ComponentGroupRef Id=\"Components\" />"
55
- # f.puts " </Feature>"
56
- f.puts " </Package>"
57
- f.puts "</Wix>"
58
- end
59
- end
60
- end
61
- end
62
-
63
- # Package.wxs with File harvesting
64
- # <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
65
- # <Package Name="MyProduct" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="B0B15C00-1DC4-0374-A1D1-E902240936D5">
66
- # <Files Include="path\to\files\**" />
67
- # </Package>
68
- # </Wix>
69
-
70
- # <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
71
- # <Package Name="Msi.Demo" Manufacturer="Acme" Version="1.0.0.0" UpgradeCode="a87571ec-8be3-447e-ae23-b3a94a85b727">
72
- # <MajorUpgrade DowngradeErrorMessage="!(loc.DowngradeError)" />
73
-
74
- # <Feature Id="Main">
75
- # <ComponentGroupRef Id="Components" />
76
- # </Feature>
77
- # </Package>
78
- # </Wix>
79
-
80
- # <Project Sdk="WixToolset.Sdk/5.0.1">
81
- # </Project>
82
-
83
- # Components.wxs
84
- # <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
85
- # <Fragment>
86
- # <ComponentGroup Id="Components" Directory="INSTALLFOLDER">
87
- # <Component Guid="b8085fb3-3718-46df-8bf6-ecf9f968dd3d">
88
- # <File Source="../../artifacts/Msi.Demo.exe" />
89
- # <File Source="../../artifacts/Msi.Demo.dll" />
90
- # <File Source="../../artifacts/Msi.Demo.deps.json" />
91
- # <File Source="../../artifacts/Msi.Demo.runtimeconfig.json" />
92
- # </Component>
93
- # </ComponentGroup>
94
- # </Fragment>
95
- # </Wix>
1
+ # frozen_string_literal: true
2
+
3
+ require "securerandom"
4
+
5
+ module Makit
6
+ # This class provide methods for working with the Nuget package cache
7
+ #
8
+ # Example:
9
+ #
10
+ # Makit::Directory.cache("Google.Protobuf", "3.27.2")
11
+ #
12
+ # dotnet nuget locals all --list
13
+ # dotnet nuget locals all --clear
14
+ #
15
+ class Wix
16
+ def self.setup
17
+ if Makit::Environment.is_windows?
18
+ # test if dotnet is installed
19
+ if Makit::DotNet.is_installed?
20
+ # test if wix is already installed
21
+ "dotnet tool install --global wix".run unless `dotnet tool list --global`.include?("wix")
22
+ puts " Wix version #{Wix.version.to_s.colorize(:green)}"
23
+ # display the link to https://wixtoolset.org/
24
+ puts " https://wixtoolset.org/".colorize(:green)
25
+ # display the link to https://marketplace.visualstudio.com/items?itemName=FireGiant.FireGiantHeatWaveDev17
26
+ puts " https://marketplace.visualstudio.com/items?itemName=FireGiant.FireGiantHeatWaveDev17".colorize(:green)
27
+ else # !File.exist?(Makit::Environment.which("dotnet"))
28
+ puts "dotnet does not appear to be installed"
29
+ end
30
+ else
31
+ puts "Wix is not supported on non-Windows platforms"
32
+ end
33
+ end
34
+
35
+ def self.version
36
+ `wix --version`.strip.split("+").first
37
+ end
38
+
39
+ def self.setup_package(name, path, files)
40
+ # create the path if it does not exist
41
+ FileUtils.mkdir_p(path) unless File.directory?(path)
42
+ # create the #{name}.wixproj file
43
+ File.open("#{path}/#{name}.wixproj", "w") do |f|
44
+ f.puts "<Project Sdk=\"WixToolset.Sdk/#{Wix.version}\">"
45
+ f.puts "</Project>"
46
+ end
47
+ # create the Package.wxs file
48
+ File.open("#{path}/Package.wxs", "w") do |f|
49
+ f.puts "<Wix xmlns=\"http://wixtoolset.org/schemas/v4/wxs\">"
50
+ f.puts " <Package Name=\"#{name}\" Manufacturer=\"Acme\" Version=\"0.0.0.0\" UpgradeCode=\"#{SecureRandom.uuid}\">"
51
+ # f.puts " <MajorUpgrade DowngradeErrorMessage=\"!(loc.DowngradeError)\" />"
52
+ f.puts " <Files Include=\"#{files}\" />"
53
+ # f.puts " <Feature Id=\"Main\">"
54
+ # f.puts " <ComponentGroupRef Id=\"Components\" />"
55
+ # f.puts " </Feature>"
56
+ f.puts " </Package>"
57
+ f.puts "</Wix>"
58
+ end
59
+ end
60
+ end
61
+ end
62
+
63
+ # Package.wxs with File harvesting
64
+ # <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
65
+ # <Package Name="MyProduct" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="B0B15C00-1DC4-0374-A1D1-E902240936D5">
66
+ # <Files Include="path\to\files\**" />
67
+ # </Package>
68
+ # </Wix>
69
+
70
+ # <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
71
+ # <Package Name="Msi.Demo" Manufacturer="Acme" Version="1.0.0.0" UpgradeCode="a87571ec-8be3-447e-ae23-b3a94a85b727">
72
+ # <MajorUpgrade DowngradeErrorMessage="!(loc.DowngradeError)" />
73
+
74
+ # <Feature Id="Main">
75
+ # <ComponentGroupRef Id="Components" />
76
+ # </Feature>
77
+ # </Package>
78
+ # </Wix>
79
+
80
+ # <Project Sdk="WixToolset.Sdk/5.0.1">
81
+ # </Project>
82
+
83
+ # Components.wxs
84
+ # <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
85
+ # <Fragment>
86
+ # <ComponentGroup Id="Components" Directory="INSTALLFOLDER">
87
+ # <Component Guid="b8085fb3-3718-46df-8bf6-ecf9f968dd3d">
88
+ # <File Source="../../artifacts/Msi.Demo.exe" />
89
+ # <File Source="../../artifacts/Msi.Demo.dll" />
90
+ # <File Source="../../artifacts/Msi.Demo.deps.json" />
91
+ # <File Source="../../artifacts/Msi.Demo.runtimeconfig.json" />
92
+ # </Component>
93
+ # </ComponentGroup>
94
+ # </Fragment>
95
+ # </Wix>
data/lib/makit/yaml.rb CHANGED
@@ -1,29 +1,29 @@
1
- # frozen_string_literal: true
2
-
3
- require "yaml"
4
-
5
- # frozen_string_literal: true
6
-
7
- # This module provides classes for the Makit gem.
8
- module Makit
9
- # YAML file validation utilities
10
- #
11
- # This class provides methods for validating YAML file syntax
12
- # and structure, helping to catch configuration errors early.
13
- class Yaml
14
- # Validate YAML file syntax and structure
15
- #
16
- # Attempts to parse a YAML file to verify it has valid syntax.
17
- # Prints a success message if valid, raises an error if invalid.
18
- #
19
- # @param file_path [String] Path to the YAML file to validate
20
- # @return [nil] Prints success message if validation passes
21
- # @raise [RuntimeError] If YAML syntax is invalid
22
- def self.validate_yaml(file_path)
23
- YAML.load_file(file_path)
24
- puts "#{file_path} is a valid YAML file."
25
- rescue Psych::SyntaxError => e
26
- raise "YAML validation failed for #{file_path}: #{e}"
27
- end
28
- end
29
- end
1
+ # frozen_string_literal: true
2
+
3
+ require "yaml"
4
+
5
+ # frozen_string_literal: true
6
+
7
+ # This module provides classes for the Makit gem.
8
+ module Makit
9
+ # YAML file validation utilities
10
+ #
11
+ # This class provides methods for validating YAML file syntax
12
+ # and structure, helping to catch configuration errors early.
13
+ class Yaml
14
+ # Validate YAML file syntax and structure
15
+ #
16
+ # Attempts to parse a YAML file to verify it has valid syntax.
17
+ # Prints a success message if valid, raises an error if invalid.
18
+ #
19
+ # @param file_path [String] Path to the YAML file to validate
20
+ # @return [nil] Prints success message if validation passes
21
+ # @raise [RuntimeError] If YAML syntax is invalid
22
+ def self.validate_yaml(file_path)
23
+ YAML.load_file(file_path)
24
+ puts "#{file_path} is a valid YAML file."
25
+ rescue Psych::SyntaxError => e
26
+ raise "YAML validation failed for #{file_path}: #{e}"
27
+ end
28
+ end
29
+ end
data/lib/makit/zip.rb CHANGED
@@ -1,17 +1,17 @@
1
- # frozen_string_literal: true
2
-
3
- require "zip"
4
- require "fileutils"
5
-
6
- module Makit
7
- # Zip a directory
8
- class Zip
9
- def self.zip_directory(directory, zip_file)
10
- ::Zip::File.open(zip_file, ::Zip::File::CREATE) do |zipfile|
11
- Dir[File.join(directory, "**", "**")].each do |file|
12
- zipfile.add(file.sub("#{directory}/", ""), file)
13
- end
14
- end
15
- end
16
- end
17
- end
1
+ # frozen_string_literal: true
2
+
3
+ require "zip"
4
+ require "fileutils"
5
+
6
+ module Makit
7
+ # Zip a directory
8
+ class Zip
9
+ def self.zip_directory(directory, zip_file)
10
+ ::Zip::File.open(zip_file, ::Zip::File::CREATE) do |zipfile|
11
+ Dir[File.join(directory, "**", "**")].each do |file|
12
+ zipfile.add(file.sub("#{directory}/", ""), file)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,97 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "fileutils"
4
+ require "find"
5
+ require "zip"
6
+
7
+ module Makit
8
+ module ZipUtility
9
+ class Error < StandardError; end
10
+
11
+ # Creates a zip file from a directory, preserving directory structure.
12
+ # Excludes files matching the exclude_pattern from the archive.
13
+ #
14
+ # Examples:
15
+ # Makit::ZipUtility.create_from_directory(
16
+ # source_dir: "artifacts/Musco.Aim3.AspNet.Host",
17
+ # zip_path: "artifacts/Musco.Aim3.AspNet.Host.zip"
18
+ # )
19
+ # Makit::ZipUtility.create_from_directory(
20
+ # source_dir: "artifacts/build",
21
+ # zip_path: "artifacts/build.zip",
22
+ # exclude_pattern: "*.{pdb,log}"
23
+ # )
24
+ #
25
+ # @param source_dir [String] The directory to zip
26
+ # @param zip_path [String] The output zip file path
27
+ # @param exclude_pattern [String] File pattern to exclude (default: "*.pdb")
28
+ # Supports glob patterns like "*.pdb", "*.{pdb,log}", "**/*.tmp"
29
+ # @raise [Error] If source directory doesn't exist or zip creation fails
30
+ def self.create_from_directory(source_dir:, zip_path:, exclude_pattern: "*.pdb")
31
+ source_dir = File.expand_path(source_dir)
32
+ zip_path = File.expand_path(zip_path)
33
+
34
+ unless Dir.exist?(source_dir)
35
+ raise Error, "Source directory does not exist: #{source_dir}"
36
+ end
37
+
38
+ # Delete existing zip if it exists
39
+ File.delete(zip_path) if File.exist?(zip_path)
40
+
41
+ # Use RubyZip gem (cross-platform, no shell commands needed)
42
+ create_zip_with_rubyzip(source_dir, zip_path, exclude_pattern)
43
+
44
+ unless File.exist?(zip_path)
45
+ raise Error, "Failed to create zip file: #{zip_path}"
46
+ end
47
+
48
+ zip_path
49
+ end
50
+
51
+ # -----------------------
52
+ # Internals
53
+ # -----------------------
54
+
55
+ def self.create_zip_with_rubyzip(source_dir, zip_path, exclude_pattern)
56
+ source_dir_normalized = File.expand_path(source_dir)
57
+
58
+ ::Zip::File.open(zip_path, ::Zip::File::CREATE) do |zipfile|
59
+ Find.find(source_dir_normalized) do |file_path|
60
+ next unless File.file?(file_path)
61
+
62
+ # Get relative path from source directory (normalize separators)
63
+ relative_path = file_path.sub(/^#{Regexp.escape(source_dir_normalized)}[\/\\]?/, "")
64
+ # Normalize to forward slashes for zip file entries (zip standard)
65
+ relative_path = relative_path.gsub("\\", "/")
66
+
67
+ # Skip if file matches exclude pattern
68
+ next if should_exclude?(relative_path, exclude_pattern)
69
+
70
+ # Add file to zip with relative path
71
+ zipfile.add(relative_path, file_path)
72
+ end
73
+ end
74
+ rescue ::Zip::Error => e
75
+ raise Error, "Failed to create zip file: #{e.message}"
76
+ rescue StandardError => e
77
+ raise Error, "Unexpected error creating zip file: #{e.message}"
78
+ end
79
+ private_class_method :create_zip_with_rubyzip
80
+
81
+ def self.should_exclude?(file_path, exclude_pattern)
82
+ return false if exclude_pattern.nil? || exclude_pattern.strip.empty?
83
+
84
+ # Support multiple patterns separated by commas
85
+ patterns = exclude_pattern.split(",").map(&:strip)
86
+
87
+ patterns.any? do |pattern|
88
+ # Use File.fnmatch for glob pattern matching
89
+ # Match against just the filename or full relative path
90
+ filename = File.basename(file_path)
91
+ File.fnmatch?(pattern, filename, File::FNM_PATHNAME | File::FNM_DOTMATCH) ||
92
+ File.fnmatch?(pattern, file_path, File::FNM_PATHNAME | File::FNM_DOTMATCH)
93
+ end
94
+ end
95
+ private_class_method :should_exclude?
96
+ end
97
+ end
data/lib/makit copy.rb CHANGED
@@ -1,44 +1,44 @@
1
- # frozen_string_literal: true
2
-
3
- begin
4
- require "colorize"
5
- rescue LoadError
6
- # colorize gem not available, define a no-op colorize method
7
- class String
8
- def colorize(*_args)
9
- self
10
- end
11
- end
12
- end
13
-
14
- require_relative "makit/version"
15
-
16
- # Load essential modules for Rakefile
17
- require_relative "makit/version_util"
18
- require_relative "makit/configuration"
19
- require_relative "makit/logging"
20
- require_relative "makit/commands"
21
- require_relative "makit/serializer"
22
- require_relative "makit/humanize"
23
- require_relative "makit/directories"
24
- require_relative "makit/files"
25
- require_relative "makit/tasks"
26
- require_relative "makit/environment"
27
- require_relative "makit/process"
28
- require_relative "makit/mp/string_mp"
29
- require_relative "makit/git"
30
- require_relative "makit/protoc"
31
-
32
- module Makit
33
- class Error < StandardError; end
34
-
35
- # Your code goes here...
36
- end
37
-
38
- # Commands::Runner is now the primary command execution system
39
-
40
- # Additional constants needed by Rakefile
41
- Makit::GIT_FILE_INFOS = Makit::Git::Repository.get_file_infos
42
- Makit::IS_READ_ONLY = Makit::Git::Repository.read_only?
43
- Makit::IS_GIT_REPO = Makit::Git::Repository.git_repo?
44
- Makit::PROJECT = Makit::Configuration::Project.default
1
+ # frozen_string_literal: true
2
+
3
+ begin
4
+ require "colorize"
5
+ rescue LoadError
6
+ # colorize gem not available, define a no-op colorize method
7
+ class String
8
+ def colorize(*_args)
9
+ self
10
+ end
11
+ end
12
+ end
13
+
14
+ require_relative "makit/version"
15
+
16
+ # Load essential modules for Rakefile
17
+ require_relative "makit/version_util"
18
+ require_relative "makit/configuration"
19
+ require_relative "makit/logging"
20
+ require_relative "makit/commands"
21
+ require_relative "makit/serializer"
22
+ require_relative "makit/humanize"
23
+ require_relative "makit/directories"
24
+ require_relative "makit/files"
25
+ require_relative "makit/tasks"
26
+ require_relative "makit/environment"
27
+ require_relative "makit/process"
28
+ require_relative "makit/mp/string_mp"
29
+ require_relative "makit/git"
30
+ require_relative "makit/protoc"
31
+
32
+ module Makit
33
+ class Error < StandardError; end
34
+
35
+ # Your code goes here...
36
+ end
37
+
38
+ # Commands::Runner is now the primary command execution system
39
+
40
+ # Additional constants needed by Rakefile
41
+ Makit::GIT_FILE_INFOS = Makit::Git::Repository.get_file_infos
42
+ Makit::IS_READ_ONLY = Makit::Git::Repository.read_only?
43
+ Makit::IS_GIT_REPO = Makit::Git::Repository.git_repo?
44
+ Makit::PROJECT = Makit::Configuration::Project.default