makit 0.0.168 → 0.0.169

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 (179) 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/azure-pipelines.rb +187 -187
  9. data/lib/makit/cli/base.rb +17 -17
  10. data/lib/makit/cli/build_commands.rb +500 -500
  11. data/lib/makit/cli/generators/base_generator.rb +74 -74
  12. data/lib/makit/cli/generators/dotnet_generator.rb +50 -50
  13. data/lib/makit/cli/generators/generator_factory.rb +49 -49
  14. data/lib/makit/cli/generators/node_generator.rb +50 -50
  15. data/lib/makit/cli/generators/ruby_generator.rb +77 -77
  16. data/lib/makit/cli/generators/rust_generator.rb +50 -50
  17. data/lib/makit/cli/generators/templates/dotnet_templates.rb +167 -167
  18. data/lib/makit/cli/generators/templates/node_templates.rb +161 -161
  19. data/lib/makit/cli/generators/templates/ruby/gemfile.rb +26 -26
  20. data/lib/makit/cli/generators/templates/ruby/gemspec.rb +41 -41
  21. data/lib/makit/cli/generators/templates/ruby/main_lib.rb +33 -33
  22. data/lib/makit/cli/generators/templates/ruby/rakefile.rb +35 -35
  23. data/lib/makit/cli/generators/templates/ruby/readme.rb +63 -63
  24. data/lib/makit/cli/generators/templates/ruby/test.rb +39 -39
  25. data/lib/makit/cli/generators/templates/ruby/test_helper.rb +29 -29
  26. data/lib/makit/cli/generators/templates/ruby/version.rb +29 -29
  27. data/lib/makit/cli/generators/templates/rust_templates.rb +128 -128
  28. data/lib/makit/cli/main.rb +78 -78
  29. data/lib/makit/cli/pipeline_commands.rb +311 -311
  30. data/lib/makit/cli/project_commands.rb +868 -868
  31. data/lib/makit/cli/repository_commands.rb +661 -661
  32. data/lib/makit/cli/strategy_commands.rb +207 -207
  33. data/lib/makit/cli/utility_commands.rb +521 -521
  34. data/lib/makit/commands/factory.rb +359 -359
  35. data/lib/makit/commands/middleware/base.rb +73 -73
  36. data/lib/makit/commands/middleware/cache.rb +248 -248
  37. data/lib/makit/commands/middleware/command_logger.rb +312 -312
  38. data/lib/makit/commands/middleware/validator.rb +269 -269
  39. data/lib/makit/commands/request.rb +316 -316
  40. data/lib/makit/commands/result.rb +323 -323
  41. data/lib/makit/commands/runner.rb +386 -386
  42. data/lib/makit/commands/strategies/base.rb +171 -171
  43. data/lib/makit/commands/strategies/child_process.rb +162 -162
  44. data/lib/makit/commands/strategies/factory.rb +136 -136
  45. data/lib/makit/commands/strategies/synchronous.rb +139 -139
  46. data/lib/makit/commands.rb +50 -50
  47. data/lib/makit/configuration/dotnet_project.rb +48 -48
  48. data/lib/makit/configuration/gitlab_helper.rb +61 -61
  49. data/lib/makit/configuration/project.rb +292 -292
  50. data/lib/makit/configuration/rakefile_helper.rb +43 -43
  51. data/lib/makit/configuration/step.rb +34 -34
  52. data/lib/makit/configuration/timeout.rb +74 -74
  53. data/lib/makit/configuration.rb +21 -21
  54. data/lib/makit/content/default_gitignore.rb +7 -7
  55. data/lib/makit/content/default_gitignore.txt +225 -225
  56. data/lib/makit/content/default_rakefile.rb +13 -13
  57. data/lib/makit/content/gem_rakefile.rb +16 -16
  58. data/lib/makit/context.rb +1 -1
  59. data/lib/makit/data.rb +49 -49
  60. data/lib/makit/directories.rb +170 -170
  61. data/lib/makit/directory.rb +262 -262
  62. data/lib/makit/docs/files.rb +89 -89
  63. data/lib/makit/docs/rake.rb +102 -102
  64. data/lib/makit/dotnet/cli.rb +224 -224
  65. data/lib/makit/dotnet/project.rb +217 -217
  66. data/lib/makit/dotnet/solution.rb +38 -38
  67. data/lib/makit/dotnet/solution_classlib.rb +239 -239
  68. data/lib/makit/dotnet/solution_console.rb +264 -264
  69. data/lib/makit/dotnet/solution_maui.rb +354 -354
  70. data/lib/makit/dotnet/solution_wasm.rb +275 -275
  71. data/lib/makit/dotnet/solution_wpf.rb +304 -304
  72. data/lib/makit/dotnet.rb +110 -110
  73. data/lib/makit/email.rb +90 -90
  74. data/lib/makit/environment.rb +142 -142
  75. data/lib/makit/examples/runner.rb +370 -370
  76. data/lib/makit/exceptions.rb +45 -45
  77. data/lib/makit/fileinfo.rb +32 -32
  78. data/lib/makit/files.rb +43 -43
  79. data/lib/makit/gems.rb +49 -49
  80. data/lib/makit/git/cli.rb +103 -103
  81. data/lib/makit/git/repository.rb +100 -100
  82. data/lib/makit/git.rb +104 -104
  83. data/lib/makit/github_actions.rb +202 -202
  84. data/lib/makit/gitlab/pipeline.rb +857 -857
  85. data/lib/makit/gitlab/pipeline_service_impl.rb +1535 -1535
  86. data/lib/makit/gitlab_runner.rb +59 -59
  87. data/lib/makit/humanize.rb +218 -218
  88. data/lib/makit/indexer.rb +47 -47
  89. data/lib/makit/io/filesystem.rb +111 -111
  90. data/lib/makit/io/filesystem_service_impl.rb +337 -337
  91. data/lib/makit/lint.rb +212 -212
  92. data/lib/makit/logging/configuration.rb +309 -309
  93. data/lib/makit/logging/format_registry.rb +84 -84
  94. data/lib/makit/logging/formatters/base.rb +39 -39
  95. data/lib/makit/logging/formatters/console_formatter.rb +140 -140
  96. data/lib/makit/logging/formatters/json_formatter.rb +65 -65
  97. data/lib/makit/logging/formatters/plain_text_formatter.rb +71 -71
  98. data/lib/makit/logging/formatters/text_formatter.rb +64 -64
  99. data/lib/makit/logging/log_request.rb +119 -119
  100. data/lib/makit/logging/logger.rb +199 -199
  101. data/lib/makit/logging/sinks/base.rb +91 -91
  102. data/lib/makit/logging/sinks/console.rb +72 -72
  103. data/lib/makit/logging/sinks/file_sink.rb +92 -92
  104. data/lib/makit/logging/sinks/structured.rb +123 -123
  105. data/lib/makit/logging/sinks/unified_file_sink.rb +296 -296
  106. data/lib/makit/logging.rb +578 -578
  107. data/lib/makit/markdown.rb +75 -75
  108. data/lib/makit/mp/basic_object_mp.rb +17 -17
  109. data/lib/makit/mp/command_mp.rb +13 -13
  110. data/lib/makit/mp/command_request.mp.rb +17 -17
  111. data/lib/makit/mp/project_mp.rb +199 -199
  112. data/lib/makit/mp/string_mp.rb +205 -205
  113. data/lib/makit/nuget.rb +460 -458
  114. data/lib/makit/podman/podman.rb +458 -458
  115. data/lib/makit/podman/podman_service_impl.rb +1081 -1081
  116. data/lib/makit/port.rb +32 -32
  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 +221 -221
  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 +96 -96
  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 -21
  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 copy.rb +44 -44
  178. data/lib/makit.rb +121 -121
  179. metadata +2 -2
@@ -1,45 +1,45 @@
1
- # frozen_string_literal: true
2
-
3
- module Makit
4
- # Base exception class for all Makit errors
5
- class Error < StandardError; end
6
-
7
- # Raised when a directory operation fails
8
- class DirectoryError < Error; end
9
-
10
- # Raised when a git operation fails
11
- class GitError < Error; end
12
-
13
- # Raised when a clone operation fails
14
- class CloneError < GitError; end
15
-
16
- # Raised when a pull operation fails
17
- class PullError < GitError; end
18
-
19
- # Raised when a commit is invalid
20
- class InvalidCommitError < GitError; end
21
-
22
- # Raised when a build operation fails
23
- class BuildError < Error; end
24
-
25
- # Raised when a configuration is invalid
26
- class ConfigurationError < Error; end
27
-
28
- # Raised when a file operation fails
29
- class FileError < Error; end
30
-
31
- # Raised when a network operation fails
32
- class NetworkError < Error; end
33
-
34
- # Raised when a timeout occurs
35
- class TimeoutError < Error; end
36
-
37
- # Raised when a dependency is missing
38
- class DependencyError < Error; end
39
-
40
- # Raised when a command execution fails
41
- class CommandError < Error; end
42
-
43
- # Raised when a validation fails
44
- class ValidationError < Error; end
45
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Makit
4
+ # Base exception class for all Makit errors
5
+ class Error < StandardError; end
6
+
7
+ # Raised when a directory operation fails
8
+ class DirectoryError < Error; end
9
+
10
+ # Raised when a git operation fails
11
+ class GitError < Error; end
12
+
13
+ # Raised when a clone operation fails
14
+ class CloneError < GitError; end
15
+
16
+ # Raised when a pull operation fails
17
+ class PullError < GitError; end
18
+
19
+ # Raised when a commit is invalid
20
+ class InvalidCommitError < GitError; end
21
+
22
+ # Raised when a build operation fails
23
+ class BuildError < Error; end
24
+
25
+ # Raised when a configuration is invalid
26
+ class ConfigurationError < Error; end
27
+
28
+ # Raised when a file operation fails
29
+ class FileError < Error; end
30
+
31
+ # Raised when a network operation fails
32
+ class NetworkError < Error; end
33
+
34
+ # Raised when a timeout occurs
35
+ class TimeoutError < Error; end
36
+
37
+ # Raised when a dependency is missing
38
+ class DependencyError < Error; end
39
+
40
+ # Raised when a command execution fails
41
+ class CommandError < Error; end
42
+
43
+ # Raised when a validation fails
44
+ class ValidationError < Error; end
45
+ end
@@ -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 the system Environment.
6
- #
7
- class FileInfo
8
- attr_accessor :name, :mtime, :size
9
-
10
- def initialize(name:, mtime:, size:)
11
- @name = name
12
- @mtime = mtime
13
- @size = size
14
- end
15
-
16
- def to_h
17
- {
18
- name: @name,
19
- mtime: @mtime,
20
- size: @size
21
- }
22
- end
23
-
24
- def self.get_file_infos(filenames)
25
- filenames.map do |filename|
26
- FileInfo.new(name: filename, mtime: File.mtime(filename), size: File.size(filename))
27
- rescue StandardError
28
- next
29
- end
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 the system Environment.
6
+ #
7
+ class FileInfo
8
+ attr_accessor :name, :mtime, :size
9
+
10
+ def initialize(name:, mtime:, size:)
11
+ @name = name
12
+ @mtime = mtime
13
+ @size = size
14
+ end
15
+
16
+ def to_h
17
+ {
18
+ name: @name,
19
+ mtime: @mtime,
20
+ size: @size
21
+ }
22
+ end
23
+
24
+ def self.get_file_infos(filenames)
25
+ filenames.map do |filename|
26
+ FileInfo.new(name: filename, mtime: File.mtime(filename), size: File.size(filename))
27
+ rescue StandardError
28
+ next
29
+ end
30
+ end
31
+ end
32
+ end
data/lib/makit/files.rb CHANGED
@@ -1,43 +1,43 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "directory"
4
- require_relative "environment"
5
- require_relative "protoc"
6
- require_relative "nuget"
7
- require_relative "version"
8
- require "rake"
9
-
10
- # This module provides classes for the Makit gem.
11
- module Makit
12
- # This class provide methods for working with the system Environment.
13
- #
14
- module Files
15
- if Makit::Directories::PROJECT_ROOT.nil?
16
- CSPROJ = [].freeze
17
- else
18
- Dir.chdir(Makit::Directories::PROJECT_ROOT) do
19
- CSPROJ = Dir.glob("**/*.csproj")
20
- end
21
- end
22
-
23
- # show all the files constants in a nicely formatted table format with the name of the constant and the value
24
- def self.show
25
- # Array of constant names (symbols)
26
- constant_names = [:CSPROJ]
27
-
28
- # Find the length of the longest constant name and add 1
29
- max_length = constant_names.map(&:to_s).max_by(&:length).length + 1
30
-
31
- # Iterate through each constant name
32
- constant_names.each do |constant_name|
33
- constant_value = const_get(constant_name) # Fetch the value of the constant
34
- constant_value = constant_value.colorize(:green) if !constant_value.nil? && File.exist?(constant_value)
35
- # Print the constant name right justified to the max_length
36
- puts "#{constant_name.to_s.rjust(max_length)} = #{constant_value}"
37
- rescue NameError
38
- # Handle the case where the constant is not defined
39
- puts "#{constant_name.to_s.rjust(max_length)} = [Constant not defined]"
40
- end
41
- end
42
- end
43
- end
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "directory"
4
+ require_relative "environment"
5
+ require_relative "protoc"
6
+ require_relative "nuget"
7
+ require_relative "version"
8
+ require "rake"
9
+
10
+ # This module provides classes for the Makit gem.
11
+ module Makit
12
+ # This class provide methods for working with the system Environment.
13
+ #
14
+ module Files
15
+ if Makit::Directories::PROJECT_ROOT.nil?
16
+ CSPROJ = [].freeze
17
+ else
18
+ Dir.chdir(Makit::Directories::PROJECT_ROOT) do
19
+ CSPROJ = Dir.glob("**/*.csproj")
20
+ end
21
+ end
22
+
23
+ # show all the files constants in a nicely formatted table format with the name of the constant and the value
24
+ def self.show
25
+ # Array of constant names (symbols)
26
+ constant_names = [:CSPROJ]
27
+
28
+ # Find the length of the longest constant name and add 1
29
+ max_length = constant_names.map(&:to_s).max_by(&:length).length + 1
30
+
31
+ # Iterate through each constant name
32
+ constant_names.each do |constant_name|
33
+ constant_value = const_get(constant_name) # Fetch the value of the constant
34
+ constant_value = constant_value.colorize(:green) if !constant_value.nil? && File.exist?(constant_value)
35
+ # Print the constant name right justified to the max_length
36
+ puts "#{constant_name.to_s.rjust(max_length)} = #{constant_value}"
37
+ rescue NameError
38
+ # Handle the case where the constant is not defined
39
+ puts "#{constant_name.to_s.rjust(max_length)} = [Constant not defined]"
40
+ end
41
+ end
42
+ end
43
+ end
data/lib/makit/gems.rb CHANGED
@@ -1,49 +1,49 @@
1
- # frozen_string_literal: true
2
-
3
- # This module provides classes for the Makit gem.
4
- require "English"
5
-
6
- module Makit
7
- # This class provide methods for working with the system Environment.
8
- #
9
- module Gems
10
- def self.install_latest_gem(gem_name)
11
- if is_gem_installed(gem_name)
12
- latest_version = get_latest_gem_version(gem_name)
13
- installed_version = get_installed_gem_version(gem_name)
14
- if installed_version == latest_version
15
- puts " #{gem_name} gem is up to date".colorize(:green)
16
- else
17
- "gem install #{gem_name}".run
18
- puts " #{gem_name} gem updated to #{latest_version}".colorize(:green)
19
- end
20
- else
21
- "gem install #{gem_name}".run
22
- puts " #{gem_name} gem installed".colorize(:green)
23
- end
24
- end
25
-
26
- def self.is_gem_installed(gem_name)
27
- `gem list #{gem_name}`
28
- $CHILD_STATUS.success?
29
- end
30
-
31
- def self.get_installed_gem_version(gem_name)
32
- versions = `gem list #{gem_name}`.split("(")[1].split(")")[0].split(",")
33
- versions.first.strip
34
- end
35
-
36
- def self.get_latest_gem_version(gem_name)
37
- output = `gem search #{gem_name} --remote --exact 2>&1`
38
- return nil unless $CHILD_STATUS.success?
39
-
40
- # Parse output like: "makit (0.0.160)"
41
- match = output.match(/\(([^)]+)\)/)
42
- return match[1] if match
43
-
44
- nil
45
- rescue StandardError
46
- nil
47
- end
48
- end
49
- end
1
+ # frozen_string_literal: true
2
+
3
+ # This module provides classes for the Makit gem.
4
+ require "English"
5
+
6
+ module Makit
7
+ # This class provide methods for working with the system Environment.
8
+ #
9
+ module Gems
10
+ def self.install_latest_gem(gem_name)
11
+ if is_gem_installed(gem_name)
12
+ latest_version = get_latest_gem_version(gem_name)
13
+ installed_version = get_installed_gem_version(gem_name)
14
+ if installed_version == latest_version
15
+ puts " #{gem_name} gem is up to date".colorize(:green)
16
+ else
17
+ "gem install #{gem_name}".run
18
+ puts " #{gem_name} gem updated to #{latest_version}".colorize(:green)
19
+ end
20
+ else
21
+ "gem install #{gem_name}".run
22
+ puts " #{gem_name} gem installed".colorize(:green)
23
+ end
24
+ end
25
+
26
+ def self.is_gem_installed(gem_name)
27
+ `gem list #{gem_name}`
28
+ $CHILD_STATUS.success?
29
+ end
30
+
31
+ def self.get_installed_gem_version(gem_name)
32
+ versions = `gem list #{gem_name}`.split("(")[1].split(")")[0].split(",")
33
+ versions.first.strip
34
+ end
35
+
36
+ def self.get_latest_gem_version(gem_name)
37
+ output = `gem search #{gem_name} --remote --exact 2>&1`
38
+ return nil unless $CHILD_STATUS.success?
39
+
40
+ # Parse output like: "makit (0.0.160)"
41
+ match = output.match(/\(([^)]+)\)/)
42
+ return match[1] if match
43
+
44
+ nil
45
+ rescue StandardError
46
+ nil
47
+ end
48
+ end
49
+ end
data/lib/makit/git/cli.rb CHANGED
@@ -1,103 +1,103 @@
1
- # frozen_string_literal: true
2
-
3
- require "open3"
4
-
5
- # This module provides classes for the Makit gem.
6
- module Makit
7
- class Git
8
- # This class provides methods for executing git commands and operations
9
- # that modify repository state.
10
- class CLI
11
- def self.integrate
12
- return unless Repository.git_repo? && !Repository.detached
13
-
14
- ## check for unstaged or untracked files
15
- unstaged_files = `git status --porcelain`.split("\n")
16
- untracked_files = `git ls-files --others --exclude-standard`.split("\n")
17
- return unless unstaged_files.length.positive? || untracked_files.length.positive?
18
-
19
- "git add .".run
20
- "git commit -m \"integrate\"".run unless Repository.clean?
21
- end
22
-
23
- def self.sync
24
- return unless Repository.git_repo? && !Repository.detached
25
-
26
- "git pull".try
27
- # Fetch tags explicitly to ensure we have the latest remote tag information
28
- "git fetch --tags origin".try
29
- "git push origin".try
30
-
31
- # Check which tags need to be pushed (exist locally but not remotely)
32
- local_tags = `git tag -l`.strip.split("\n").reject(&:empty?)
33
- # Use Open3 for cross-platform stderr handling (Windows doesn't support 2>/dev/null)
34
- remote_tags_output, _stderr, _status = Open3.capture3("git", "ls-remote", "--tags", "origin")
35
- remote_tags_output = remote_tags_output.strip
36
- remote_tags = if remote_tags_output.empty?
37
- []
38
- else
39
- # Extract tag names, removing refs/tags/ prefix and ^{} suffix, then get unique values
40
- remote_tags_output.split("\n")
41
- .map { |line| line.split("\t").last }
42
- .select { |ref| ref.start_with?('refs/tags/') && !ref.end_with?('^{}') }
43
- .map { |ref| ref.sub('refs/tags/', '') }
44
- .uniq
45
- end
46
-
47
- tags_to_push = local_tags - remote_tags
48
-
49
- if tags_to_push.empty?
50
- Makit::Logging.default_logger.info("All tags already exist on remote, skipping tag push")
51
- else
52
- # Limit to 5 tags per sync to avoid overwhelming the remote
53
- tags_to_push_limited = tags_to_push.first(5)
54
- remaining_count = tags_to_push.length - tags_to_push_limited.length
55
-
56
- if remaining_count.positive?
57
- Makit::Logging.default_logger.info("Pushing #{tags_to_push_limited.length} of #{tags_to_push.length} tag(s) to remote (limited to 5 per sync): #{tags_to_push_limited.join(', ')}")
58
- Makit::Logging.default_logger.info("#{remaining_count} tag(s) will be pushed in subsequent sync operations")
59
- else
60
- Makit::Logging.default_logger.info("Pushing #{tags_to_push_limited.length} tag(s) to remote: #{tags_to_push_limited.join(', ')}")
61
- end
62
-
63
- tags_to_push_limited.each do |tag|
64
- # Double-check that tag doesn't exist on remote before pushing
65
- # This prevents pushing tags that were added to remote between the ls-remote check and now
66
- # Use Open3 for cross-platform stderr handling (Windows doesn't support 2>/dev/null)
67
- remote_tag_check, _stderr, _status = Open3.capture3("git", "ls-remote", "--tags", "origin", "refs/tags/#{tag}")
68
- remote_tag_check = remote_tag_check.strip
69
- if remote_tag_check.empty?
70
- "git push origin #{tag}".try
71
- else
72
- Makit::Logging.default_logger.info("Tag #{tag} already exists on remote, skipping push")
73
- end
74
- end
75
- end
76
- end
77
-
78
- def self.pull
79
- return unless Repository.git_repo? && !Repository.detached
80
-
81
- "git pull".try
82
- end
83
-
84
- def self.zip_source_files(zipfilename)
85
- "git archive --format zip --output #{zipfilename} HEAD".run
86
- end
87
-
88
- def self.tag(version)
89
- # only tag if the repo is not read only
90
- if Repository.read_only?
91
- puts " cannot tag a read only repo".colorize(:red)
92
- return
93
- end
94
- # check if a tag for the current version already exists
95
- if `git tag -l v#{version}`.strip.length.positive?
96
- puts " tag v#{version} already exists".colorize(:red)
97
- else
98
- "git tag -a v#{version} -m \"version #{version}\"".run
99
- end
100
- end
101
- end
102
- end
103
- end
1
+ # frozen_string_literal: true
2
+
3
+ require "open3"
4
+
5
+ # This module provides classes for the Makit gem.
6
+ module Makit
7
+ class Git
8
+ # This class provides methods for executing git commands and operations
9
+ # that modify repository state.
10
+ class CLI
11
+ def self.integrate
12
+ return unless Repository.git_repo? && !Repository.detached
13
+
14
+ ## check for unstaged or untracked files
15
+ unstaged_files = `git status --porcelain`.split("\n")
16
+ untracked_files = `git ls-files --others --exclude-standard`.split("\n")
17
+ return unless unstaged_files.length.positive? || untracked_files.length.positive?
18
+
19
+ "git add .".run
20
+ "git commit -m \"integrate\"".run unless Repository.clean?
21
+ end
22
+
23
+ def self.sync
24
+ return unless Repository.git_repo? && !Repository.detached
25
+
26
+ "git pull".try
27
+ # Fetch tags explicitly to ensure we have the latest remote tag information
28
+ "git fetch --tags origin".try
29
+ "git push origin".try
30
+
31
+ # Check which tags need to be pushed (exist locally but not remotely)
32
+ local_tags = `git tag -l`.strip.split("\n").reject(&:empty?)
33
+ # Use Open3 for cross-platform stderr handling (Windows doesn't support 2>/dev/null)
34
+ remote_tags_output, _stderr, _status = Open3.capture3("git", "ls-remote", "--tags", "origin")
35
+ remote_tags_output = remote_tags_output.strip
36
+ remote_tags = if remote_tags_output.empty?
37
+ []
38
+ else
39
+ # Extract tag names, removing refs/tags/ prefix and ^{} suffix, then get unique values
40
+ remote_tags_output.split("\n")
41
+ .map { |line| line.split("\t").last }
42
+ .select { |ref| ref.start_with?('refs/tags/') && !ref.end_with?('^{}') }
43
+ .map { |ref| ref.sub('refs/tags/', '') }
44
+ .uniq
45
+ end
46
+
47
+ tags_to_push = local_tags - remote_tags
48
+
49
+ if tags_to_push.empty?
50
+ Makit::Logging.default_logger.info("All tags already exist on remote, skipping tag push")
51
+ else
52
+ # Limit to 5 tags per sync to avoid overwhelming the remote
53
+ tags_to_push_limited = tags_to_push.first(5)
54
+ remaining_count = tags_to_push.length - tags_to_push_limited.length
55
+
56
+ if remaining_count.positive?
57
+ Makit::Logging.default_logger.info("Pushing #{tags_to_push_limited.length} of #{tags_to_push.length} tag(s) to remote (limited to 5 per sync): #{tags_to_push_limited.join(', ')}")
58
+ Makit::Logging.default_logger.info("#{remaining_count} tag(s) will be pushed in subsequent sync operations")
59
+ else
60
+ Makit::Logging.default_logger.info("Pushing #{tags_to_push_limited.length} tag(s) to remote: #{tags_to_push_limited.join(', ')}")
61
+ end
62
+
63
+ tags_to_push_limited.each do |tag|
64
+ # Double-check that tag doesn't exist on remote before pushing
65
+ # This prevents pushing tags that were added to remote between the ls-remote check and now
66
+ # Use Open3 for cross-platform stderr handling (Windows doesn't support 2>/dev/null)
67
+ remote_tag_check, _stderr, _status = Open3.capture3("git", "ls-remote", "--tags", "origin", "refs/tags/#{tag}")
68
+ remote_tag_check = remote_tag_check.strip
69
+ if remote_tag_check.empty?
70
+ "git push origin #{tag}".try
71
+ else
72
+ Makit::Logging.default_logger.info("Tag #{tag} already exists on remote, skipping push")
73
+ end
74
+ end
75
+ end
76
+ end
77
+
78
+ def self.pull
79
+ return unless Repository.git_repo? && !Repository.detached
80
+
81
+ "git pull".try
82
+ end
83
+
84
+ def self.zip_source_files(zipfilename)
85
+ "git archive --format zip --output #{zipfilename} HEAD".run
86
+ end
87
+
88
+ def self.tag(version)
89
+ # only tag if the repo is not read only
90
+ if Repository.read_only?
91
+ puts " cannot tag a read only repo".colorize(:red)
92
+ return
93
+ end
94
+ # check if a tag for the current version already exists
95
+ if `git tag -l v#{version}`.strip.length.positive?
96
+ puts " tag v#{version} already exists".colorize(:red)
97
+ else
98
+ "git tag -a v#{version} -m \"version #{version}\"".run
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end