makit 0.0.138 → 0.0.140

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 (151) 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/cli/build_commands.rb +500 -500
  7. data/lib/makit/cli/generators/base_generator.rb +74 -74
  8. data/lib/makit/cli/generators/dotnet_generator.rb +50 -50
  9. data/lib/makit/cli/generators/generator_factory.rb +49 -49
  10. data/lib/makit/cli/generators/node_generator.rb +50 -50
  11. data/lib/makit/cli/generators/ruby_generator.rb +77 -77
  12. data/lib/makit/cli/generators/rust_generator.rb +50 -50
  13. data/lib/makit/cli/generators/templates/dotnet_templates.rb +167 -167
  14. data/lib/makit/cli/generators/templates/node_templates.rb +161 -161
  15. data/lib/makit/cli/generators/templates/ruby/gemfile.rb +26 -26
  16. data/lib/makit/cli/generators/templates/ruby/gemspec.rb +40 -40
  17. data/lib/makit/cli/generators/templates/ruby/main_lib.rb +33 -33
  18. data/lib/makit/cli/generators/templates/ruby/rakefile.rb +35 -35
  19. data/lib/makit/cli/generators/templates/ruby/readme.rb +63 -63
  20. data/lib/makit/cli/generators/templates/ruby/test.rb +39 -39
  21. data/lib/makit/cli/generators/templates/ruby/test_helper.rb +29 -29
  22. data/lib/makit/cli/generators/templates/ruby/version.rb +29 -29
  23. data/lib/makit/cli/generators/templates/rust_templates.rb +128 -128
  24. data/lib/makit/cli/main.rb +69 -67
  25. data/lib/makit/cli/project_commands.rb +868 -868
  26. data/lib/makit/cli/repository_commands.rb +661 -661
  27. data/lib/makit/cli/strategy_commands.rb +51 -0
  28. data/lib/makit/cli/utility_commands.rb +521 -521
  29. data/lib/makit/commands/factory.rb +359 -359
  30. data/lib/makit/commands/middleware/base.rb +73 -73
  31. data/lib/makit/commands/middleware/cache.rb +248 -248
  32. data/lib/makit/commands/middleware/command_logger.rb +312 -312
  33. data/lib/makit/commands/middleware/validator.rb +269 -269
  34. data/lib/makit/commands/request.rb +316 -316
  35. data/lib/makit/commands/result.rb +323 -323
  36. data/lib/makit/commands/runner.rb +385 -385
  37. data/lib/makit/commands/strategies/base.rb +171 -171
  38. data/lib/makit/commands/strategies/child_process.rb +1 -1
  39. data/lib/makit/commands/strategies/synchronous.rb +139 -139
  40. data/lib/makit/commands.rb +50 -50
  41. data/lib/makit/configuration/dotnet_project.rb +12 -12
  42. data/lib/makit/configuration/gitlab_helper.rb +58 -58
  43. data/lib/makit/configuration/project.rb +168 -168
  44. data/lib/makit/configuration/rakefile_helper.rb +43 -43
  45. data/lib/makit/configuration/step.rb +34 -34
  46. data/lib/makit/configuration/timeout.rb +74 -0
  47. data/lib/makit/configuration.rb +15 -14
  48. data/lib/makit/content/default_gitignore.rb +7 -7
  49. data/lib/makit/content/default_gitignore.txt +225 -225
  50. data/lib/makit/content/default_rakefile.rb +13 -13
  51. data/lib/makit/content/gem_rakefile.rb +16 -16
  52. data/lib/makit/context.rb +1 -1
  53. data/lib/makit/data.rb +49 -49
  54. data/lib/makit/directories.rb +140 -140
  55. data/lib/makit/directory.rb +262 -262
  56. data/lib/makit/docs/files.rb +89 -89
  57. data/lib/makit/docs/rake.rb +102 -102
  58. data/lib/makit/dotnet/cli.rb +69 -69
  59. data/lib/makit/dotnet/project.rb +217 -217
  60. data/lib/makit/dotnet/solution.rb +38 -38
  61. data/lib/makit/dotnet/solution_classlib.rb +239 -239
  62. data/lib/makit/dotnet/solution_console.rb +264 -264
  63. data/lib/makit/dotnet/solution_maui.rb +354 -354
  64. data/lib/makit/dotnet/solution_wasm.rb +275 -275
  65. data/lib/makit/dotnet/solution_wpf.rb +304 -304
  66. data/lib/makit/dotnet.rb +102 -102
  67. data/lib/makit/email.rb +90 -90
  68. data/lib/makit/environment.rb +142 -142
  69. data/lib/makit/examples/runner.rb +370 -370
  70. data/lib/makit/exceptions.rb +45 -45
  71. data/lib/makit/fileinfo.rb +24 -24
  72. data/lib/makit/files.rb +43 -43
  73. data/lib/makit/gems.rb +40 -40
  74. data/lib/makit/git/cli.rb +54 -54
  75. data/lib/makit/git/repository.rb +90 -90
  76. data/lib/makit/git.rb +98 -98
  77. data/lib/makit/gitlab_runner.rb +59 -59
  78. data/lib/makit/humanize.rb +137 -137
  79. data/lib/makit/indexer.rb +47 -47
  80. data/lib/makit/logging/configuration.rb +308 -308
  81. data/lib/makit/logging/format_registry.rb +84 -84
  82. data/lib/makit/logging/formatters/base.rb +39 -39
  83. data/lib/makit/logging/formatters/console_formatter.rb +140 -140
  84. data/lib/makit/logging/formatters/json_formatter.rb +65 -65
  85. data/lib/makit/logging/formatters/plain_text_formatter.rb +71 -71
  86. data/lib/makit/logging/formatters/text_formatter.rb +64 -64
  87. data/lib/makit/logging/log_request.rb +119 -119
  88. data/lib/makit/logging/logger.rb +199 -199
  89. data/lib/makit/logging/sinks/base.rb +91 -91
  90. data/lib/makit/logging/sinks/console.rb +72 -72
  91. data/lib/makit/logging/sinks/file_sink.rb +92 -92
  92. data/lib/makit/logging/sinks/structured.rb +123 -123
  93. data/lib/makit/logging/sinks/unified_file_sink.rb +296 -296
  94. data/lib/makit/logging.rb +565 -565
  95. data/lib/makit/markdown.rb +75 -75
  96. data/lib/makit/mp/basic_object_mp.rb +17 -17
  97. data/lib/makit/mp/command_mp.rb +13 -13
  98. data/lib/makit/mp/command_request.mp.rb +17 -17
  99. data/lib/makit/mp/project_mp.rb +199 -199
  100. data/lib/makit/mp/string_mp.rb +191 -191
  101. data/lib/makit/nuget.rb +74 -74
  102. data/lib/makit/port.rb +32 -32
  103. data/lib/makit/process.rb +163 -163
  104. data/lib/makit/protoc.rb +107 -107
  105. data/lib/makit/rake/cli.rb +196 -196
  106. data/lib/makit/rake.rb +80 -80
  107. data/lib/makit/ruby/cli.rb +185 -185
  108. data/lib/makit/ruby.rb +25 -25
  109. data/lib/makit/secrets.rb +51 -51
  110. data/lib/makit/serializer.rb +130 -130
  111. data/lib/makit/services/builder.rb +186 -186
  112. data/lib/makit/services/error_handler.rb +226 -226
  113. data/lib/makit/services/repository_manager.rb +231 -231
  114. data/lib/makit/services/validator.rb +112 -112
  115. data/lib/makit/setup/classlib.rb +101 -101
  116. data/lib/makit/setup/gem.rb +268 -268
  117. data/lib/makit/setup/razorclasslib.rb +101 -101
  118. data/lib/makit/setup/runner.rb +54 -54
  119. data/lib/makit/setup.rb +5 -5
  120. data/lib/makit/show.rb +110 -110
  121. data/lib/makit/storage.rb +126 -126
  122. data/lib/makit/symbols.rb +170 -170
  123. data/lib/makit/task_info.rb +130 -130
  124. data/lib/makit/tasks/at_exit.rb +15 -15
  125. data/lib/makit/tasks/build.rb +22 -22
  126. data/lib/makit/tasks/clean.rb +13 -13
  127. data/lib/makit/tasks/configure.rb +10 -10
  128. data/lib/makit/tasks/format.rb +10 -10
  129. data/lib/makit/tasks/hook_manager.rb +443 -443
  130. data/lib/makit/tasks/init.rb +49 -49
  131. data/lib/makit/tasks/integrate.rb +29 -29
  132. data/lib/makit/tasks/pull_incoming.rb +13 -13
  133. data/lib/makit/tasks/setup.rb +13 -13
  134. data/lib/makit/tasks/sync.rb +17 -17
  135. data/lib/makit/tasks/tag.rb +16 -16
  136. data/lib/makit/tasks/task_monkey_patch.rb +81 -81
  137. data/lib/makit/tasks/test.rb +22 -22
  138. data/lib/makit/tasks/update.rb +18 -18
  139. data/lib/makit/tasks.rb +20 -20
  140. data/lib/makit/test_cache.rb +239 -239
  141. data/lib/makit/tree.rb +37 -37
  142. data/lib/makit/v1/makit.v1_pb.rb +35 -35
  143. data/lib/makit/v1/makit.v1_services_pb.rb +27 -27
  144. data/lib/makit/version.rb +99 -99
  145. data/lib/makit/version_util.rb +21 -21
  146. data/lib/makit/wix.rb +95 -95
  147. data/lib/makit/yaml.rb +29 -29
  148. data/lib/makit/zip.rb +17 -17
  149. data/lib/makit copy.rb +44 -44
  150. data/lib/makit.rb +42 -42
  151. metadata +3 -2
@@ -1,50 +1,50 @@
1
- # frozen_string_literal: true
2
-
3
- require "English"
4
- require "open3"
5
- require "socket"
6
- require "etc"
7
- require "logger"
8
-
9
- # This module provides classes for the Makit gem.
10
- module Makit
11
- # Commands module provides a modern, flexible command execution framework
12
- # with middleware support, validation, caching, and structured logging.
13
- module Commands
14
- # Custom exception for security-related command validation failures
15
- class SecurityError < StandardError; end
16
-
17
- # Custom exception for command execution failures
18
- class ExecutionError < StandardError
19
- attr_reader :exit_code, :stderr
20
-
21
- def initialize(message, exit_code: nil, stderr: nil)
22
- @exit_code = exit_code
23
- @stderr = stderr
24
- super(message)
25
- end
26
- end
27
- end
28
-
29
- # This class provide methods running commands.
30
- #
31
- class LegacyCommands < Array
32
- # Generate the commands based on the current directory.
33
- def auto_generate
34
- self << Makit::V1::CommandRequest.new(name: "bundle", arguments: ["install"]) if File.exist?("Gemfile")
35
- self << Makit::V1::CommandRequest.new(name: "bundle", arguments: %w[exec rake]) if File.exist?("Rakefile")
36
- end
37
- end
38
- end
39
-
40
- # Load command system components (load existing components only)
41
- require_relative "commands/result"
42
- require_relative "commands/request"
43
- require_relative "commands/runner"
44
- require_relative "commands/factory"
45
- require_relative "commands/middleware/validator"
46
- require_relative "commands/middleware/cache"
47
- require_relative "commands/middleware/command_logger"
48
- require_relative "commands/middleware/base"
49
- require_relative "commands/strategies/base"
50
- require_relative "commands/strategies/synchronous"
1
+ # frozen_string_literal: true
2
+
3
+ require "English"
4
+ require "open3"
5
+ require "socket"
6
+ require "etc"
7
+ require "logger"
8
+
9
+ # This module provides classes for the Makit gem.
10
+ module Makit
11
+ # Commands module provides a modern, flexible command execution framework
12
+ # with middleware support, validation, caching, and structured logging.
13
+ module Commands
14
+ # Custom exception for security-related command validation failures
15
+ class SecurityError < StandardError; end
16
+
17
+ # Custom exception for command execution failures
18
+ class ExecutionError < StandardError
19
+ attr_reader :exit_code, :stderr
20
+
21
+ def initialize(message, exit_code: nil, stderr: nil)
22
+ @exit_code = exit_code
23
+ @stderr = stderr
24
+ super(message)
25
+ end
26
+ end
27
+ end
28
+
29
+ # This class provide methods running commands.
30
+ #
31
+ class LegacyCommands < Array
32
+ # Generate the commands based on the current directory.
33
+ def auto_generate
34
+ self << Makit::V1::CommandRequest.new(name: "bundle", arguments: ["install"]) if File.exist?("Gemfile")
35
+ self << Makit::V1::CommandRequest.new(name: "bundle", arguments: %w[exec rake]) if File.exist?("Rakefile")
36
+ end
37
+ end
38
+ end
39
+
40
+ # Load command system components (load existing components only)
41
+ require_relative "commands/result"
42
+ require_relative "commands/request"
43
+ require_relative "commands/runner"
44
+ require_relative "commands/factory"
45
+ require_relative "commands/middleware/validator"
46
+ require_relative "commands/middleware/cache"
47
+ require_relative "commands/middleware/command_logger"
48
+ require_relative "commands/middleware/base"
49
+ require_relative "commands/strategies/base"
50
+ require_relative "commands/strategies/synchronous"
@@ -1,12 +1,12 @@
1
- # frozen_string_literal: true
2
-
3
- require "json"
4
-
5
- module Makit
6
- module Configuration
7
- # Project configuration management
8
- class DotNetProject
9
- attr_accessor :name, :output_dir, :frameworks, :template
10
- end
11
- end
12
- end
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+
5
+ module Makit
6
+ module Configuration
7
+ # Project configuration management
8
+ class DotNetProject
9
+ attr_accessor :name, :output_dir, :frameworks, :template
10
+ end
11
+ end
12
+ end
@@ -1,58 +1,58 @@
1
- # frozen_string_literal: true
2
-
3
- require "yaml"
4
-
5
- module Makit
6
- module Configuration
7
- # Helper for GitLab CI YAML conversion
8
- class GitLabHelper
9
- def self.to_yaml(project, path)
10
- yaml_content = generate_yaml(project)
11
- File.write(path, yaml_content)
12
- end
13
-
14
- def self.from_yaml(path)
15
- content = File.read(path)
16
- data = YAML.safe_load(content, symbolize_names: true, permitted_classes: [Symbol])
17
-
18
- project = Project.new(name: data[:name] || "Unknown", version: data[:version] || "1.0.0")
19
-
20
- # Extract steps from GitLab CI jobs
21
- data.each do |key, value|
22
- next unless value.is_a?(Hash) && value[:script]
23
-
24
- step_name = key.to_s.gsub(/_job$/, "")
25
- step = Step.new(
26
- name: step_name,
27
- description: value[:description] || "GitLab CI job: #{step_name}",
28
- commands: value[:script],
29
- )
30
- project.add_step(step)
31
- end
32
-
33
- project
34
- end
35
-
36
- def self.generate_yaml(project)
37
- yaml = {
38
- stages: project.steps.map(&:name),
39
- variables: {
40
- project_name: project.name,
41
- project_version: project.version,
42
- },
43
- }
44
-
45
- project.steps.each do |step|
46
- job_name = "#{step.name}_job"
47
- yaml[job_name.to_sym] = {
48
- stage: step.name,
49
- script: step.commands,
50
- description: step.description,
51
- }
52
- end
53
-
54
- yaml.to_yaml
55
- end
56
- end
57
- end
58
- end
1
+ # frozen_string_literal: true
2
+
3
+ require "yaml"
4
+
5
+ module Makit
6
+ module Configuration
7
+ # Helper for GitLab CI YAML conversion
8
+ class GitLabHelper
9
+ def self.to_yaml(project, path)
10
+ yaml_content = generate_yaml(project)
11
+ File.write(path, yaml_content)
12
+ end
13
+
14
+ def self.from_yaml(path)
15
+ content = File.read(path)
16
+ data = YAML.safe_load(content, symbolize_names: true, permitted_classes: [Symbol])
17
+
18
+ project = Project.new(name: data[:name] || "Unknown", version: data[:version] || "1.0.0")
19
+
20
+ # Extract steps from GitLab CI jobs
21
+ data.each do |key, value|
22
+ next unless value.is_a?(Hash) && value[:script]
23
+
24
+ step_name = key.to_s.gsub(/_job$/, "")
25
+ step = Step.new(
26
+ name: step_name,
27
+ description: value[:description] || "GitLab CI job: #{step_name}",
28
+ commands: value[:script],
29
+ )
30
+ project.add_step(step)
31
+ end
32
+
33
+ project
34
+ end
35
+
36
+ def self.generate_yaml(project)
37
+ yaml = {
38
+ stages: project.steps.map(&:name),
39
+ variables: {
40
+ project_name: project.name,
41
+ project_version: project.version,
42
+ },
43
+ }
44
+
45
+ project.steps.each do |step|
46
+ job_name = "#{step.name}_job"
47
+ yaml[job_name.to_sym] = {
48
+ stage: step.name,
49
+ script: step.commands,
50
+ description: step.description,
51
+ }
52
+ end
53
+
54
+ yaml.to_yaml
55
+ end
56
+ end
57
+ end
58
+ end
@@ -1,168 +1,168 @@
1
- # frozen_string_literal: true
2
-
3
- require "json"
4
-
5
- module Makit
6
- module Configuration
7
- # Project configuration management
8
- class Project
9
- attr_accessor :git_remote_url, :name, :version, :project_type, :steps, :authors, :description, :license_expression
10
- attr_accessor :dotnet_projects
11
-
12
- def initialize(name, version = nil, project_type = nil)
13
- # Support both keyword arguments and positional arguments for compatibility
14
- if name.is_a?(Hash)
15
- # Keyword arguments: Project.new(name: "test", version: "1.0.0")
16
- @name = name[:name]
17
- @version = name[:version]
18
- @project_type = name[:project_type]
19
- else
20
- # Positional arguments: Project.new("test", "1.0.0", "nuget")
21
- @name = name
22
- @version = version
23
- @project_type = project_type
24
- end
25
- @authors = "authors"
26
- @description = "description"
27
- @license_expression = "MIT"
28
- @steps = []
29
- end
30
-
31
- def add_step(step)
32
- raise ArgumentError, "Step must be a Makit::Configuration::Step instance" unless step.is_a?(Step)
33
-
34
- @steps << step
35
- end
36
-
37
- def to_json(*args)
38
- {
39
- name: @name,
40
- version: @version,
41
- project_type: @project_type,
42
- authors: @authors,
43
- description: @description,
44
- license_expression: @license_expression,
45
- steps: @steps.map(&:to_h),
46
- }.to_json(*args)
47
- end
48
-
49
- def to_json_pretty
50
- JSON.pretty_generate({
51
- name: @name,
52
- version: @version,
53
- project_type: @project_type,
54
- authors: @authors,
55
- description: @description,
56
- license_expression: @license_expression,
57
- steps: @steps.map(&:to_h),
58
- })
59
- end
60
-
61
- def self.from_json(path)
62
- content = File.read(path)
63
- data = JSON.parse(content, symbolize_names: true)
64
-
65
- project = new(data[:name], data[:version], data[:project_type])
66
-
67
- # Set additional fields if they exist in the JSON
68
- project.authors = data[:authors] if data[:authors]
69
- project.description = data[:description] if data[:description]
70
- project.license_expression = data[:license_expression] if data[:license_expression]
71
-
72
- data[:steps].each do |step_data|
73
- step = Step.new(
74
- name: step_data[:name],
75
- description: step_data[:description],
76
- commands: step_data[:commands],
77
- )
78
- project.add_step(step)
79
- end
80
-
81
- project
82
- end
83
-
84
- # Class method for deserializing from JSON string (used by serializer)
85
- def self.decode_json(json_string)
86
- data = JSON.parse(json_string, symbolize_names: true)
87
-
88
- project = new(data[:name], data[:version], data[:project_type])
89
-
90
- # Set additional fields if they exist in the JSON
91
- project.authors = data[:authors] if data[:authors]
92
- project.description = data[:description] if data[:description]
93
- project.license_expression = data[:license_expression] if data[:license_expression]
94
-
95
- data[:steps].each do |step_data|
96
- step = Step.new(
97
- name: step_data[:name],
98
- description: step_data[:description],
99
- commands: step_data[:commands],
100
- )
101
- project.add_step(step)
102
- end
103
-
104
- project
105
- end
106
-
107
- def to_gitlab_ci(path)
108
- GitLabHelper.to_yaml(self, path)
109
- end
110
-
111
- def to_rakefile
112
- RakefileHelper.generate(self)
113
- end
114
-
115
- # Save the project to a specific path as pretty JSON
116
- def save_as(path)
117
- # Validate that the project has a non-empty name before saving
118
- if @name.nil? || @name.strip.empty?
119
- raise ArgumentError, "Project name cannot be empty. Please set a valid project name before saving."
120
- end
121
-
122
- File.write(path, to_json_pretty)
123
- end
124
-
125
- def save
126
- # Validate that the project has a non-empty name before saving
127
- if @name.nil? || @name.strip.empty?
128
- raise ArgumentError, "Project name cannot be empty. Please set a valid project name before saving."
129
- end
130
-
131
- save_as(".makit.json")
132
- end
133
-
134
- # Display the project configuration in YAML format
135
- def show
136
- require "yaml"
137
-
138
- project_data = {
139
- name: @name,
140
- version: @version,
141
- project_type: @project_type,
142
- git_remote_url: @git_remote_url,
143
- steps: @steps.map(&:to_h),
144
- }
145
-
146
- puts YAML.dump(project_data)
147
- end
148
-
149
- # Load a project from the default .makit.json file
150
- def self.default
151
- if File.exist?(".makit.json")
152
- from_json(".makit.json")
153
- else
154
- # Makit::Logging.default_logger.warn("Project not configured")
155
- # #if defined?(NAME) && defined?(VERSION) && defined?(PROJECT_TYPE)
156
- # project = new(name: NAME, version: VERSION, project_type: PROJECT_TYPE)
157
- # project.save
158
- # else
159
- project = new(name: "", version: "0.0.0", project_type: "")
160
- Makit::Logging.default_logger.warn("Project not configured")
161
- # Makit::Logging.default_logger.warn("Define NAME, VERSION, and PROJECT_TYPE in the Rakefile")
162
- # end
163
- project
164
- end
165
- end
166
- end
167
- end
168
- end
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+
5
+ module Makit
6
+ module Configuration
7
+ # Project configuration management
8
+ class Project
9
+ attr_accessor :git_remote_url, :name, :version, :project_type, :steps, :authors, :description, :license_expression
10
+ attr_accessor :dotnet_projects
11
+
12
+ def initialize(name, version = nil, project_type = nil)
13
+ # Support both keyword arguments and positional arguments for compatibility
14
+ if name.is_a?(Hash)
15
+ # Keyword arguments: Project.new(name: "test", version: "1.0.0")
16
+ @name = name[:name]
17
+ @version = name[:version]
18
+ @project_type = name[:project_type]
19
+ else
20
+ # Positional arguments: Project.new("test", "1.0.0", "nuget")
21
+ @name = name
22
+ @version = version
23
+ @project_type = project_type
24
+ end
25
+ @authors = "authors"
26
+ @description = "description"
27
+ @license_expression = "MIT"
28
+ @steps = []
29
+ end
30
+
31
+ def add_step(step)
32
+ raise ArgumentError, "Step must be a Makit::Configuration::Step instance" unless step.is_a?(Step)
33
+
34
+ @steps << step
35
+ end
36
+
37
+ def to_json(*args)
38
+ {
39
+ name: @name,
40
+ version: @version,
41
+ project_type: @project_type,
42
+ authors: @authors,
43
+ description: @description,
44
+ license_expression: @license_expression,
45
+ steps: @steps.map(&:to_h),
46
+ }.to_json(*args)
47
+ end
48
+
49
+ def to_json_pretty
50
+ JSON.pretty_generate({
51
+ name: @name,
52
+ version: @version,
53
+ project_type: @project_type,
54
+ authors: @authors,
55
+ description: @description,
56
+ license_expression: @license_expression,
57
+ steps: @steps.map(&:to_h),
58
+ })
59
+ end
60
+
61
+ def self.from_json(path)
62
+ content = File.read(path)
63
+ data = JSON.parse(content, symbolize_names: true)
64
+
65
+ project = new(data[:name], data[:version], data[:project_type])
66
+
67
+ # Set additional fields if they exist in the JSON
68
+ project.authors = data[:authors] if data[:authors]
69
+ project.description = data[:description] if data[:description]
70
+ project.license_expression = data[:license_expression] if data[:license_expression]
71
+
72
+ data[:steps].each do |step_data|
73
+ step = Step.new(
74
+ name: step_data[:name],
75
+ description: step_data[:description],
76
+ commands: step_data[:commands],
77
+ )
78
+ project.add_step(step)
79
+ end
80
+
81
+ project
82
+ end
83
+
84
+ # Class method for deserializing from JSON string (used by serializer)
85
+ def self.decode_json(json_string)
86
+ data = JSON.parse(json_string, symbolize_names: true)
87
+
88
+ project = new(data[:name], data[:version], data[:project_type])
89
+
90
+ # Set additional fields if they exist in the JSON
91
+ project.authors = data[:authors] if data[:authors]
92
+ project.description = data[:description] if data[:description]
93
+ project.license_expression = data[:license_expression] if data[:license_expression]
94
+
95
+ data[:steps].each do |step_data|
96
+ step = Step.new(
97
+ name: step_data[:name],
98
+ description: step_data[:description],
99
+ commands: step_data[:commands],
100
+ )
101
+ project.add_step(step)
102
+ end
103
+
104
+ project
105
+ end
106
+
107
+ def to_gitlab_ci(path)
108
+ GitLabHelper.to_yaml(self, path)
109
+ end
110
+
111
+ def to_rakefile
112
+ RakefileHelper.generate(self)
113
+ end
114
+
115
+ # Save the project to a specific path as pretty JSON
116
+ def save_as(path)
117
+ # Validate that the project has a non-empty name before saving
118
+ if @name.nil? || @name.strip.empty?
119
+ raise ArgumentError, "Project name cannot be empty. Please set a valid project name before saving."
120
+ end
121
+
122
+ File.write(path, to_json_pretty)
123
+ end
124
+
125
+ def save
126
+ # Validate that the project has a non-empty name before saving
127
+ if @name.nil? || @name.strip.empty?
128
+ raise ArgumentError, "Project name cannot be empty. Please set a valid project name before saving."
129
+ end
130
+
131
+ save_as(".makit.json")
132
+ end
133
+
134
+ # Display the project configuration in YAML format
135
+ def show
136
+ require "yaml"
137
+
138
+ project_data = {
139
+ name: @name,
140
+ version: @version,
141
+ project_type: @project_type,
142
+ git_remote_url: @git_remote_url,
143
+ steps: @steps.map(&:to_h),
144
+ }
145
+
146
+ puts YAML.dump(project_data)
147
+ end
148
+
149
+ # Load a project from the default .makit.json file
150
+ def self.default
151
+ if File.exist?(".makit.json")
152
+ from_json(".makit.json")
153
+ else
154
+ # Makit::Logging.default_logger.warn("Project not configured")
155
+ # #if defined?(NAME) && defined?(VERSION) && defined?(PROJECT_TYPE)
156
+ # project = new(name: NAME, version: VERSION, project_type: PROJECT_TYPE)
157
+ # project.save
158
+ # else
159
+ project = new(name: "", version: "0.0.0", project_type: "")
160
+ Makit::Logging.default_logger.warn("Project not configured")
161
+ # Makit::Logging.default_logger.warn("Define NAME, VERSION, and PROJECT_TYPE in the Rakefile")
162
+ # end
163
+ project
164
+ end
165
+ end
166
+ end
167
+ end
168
+ end
@@ -1,43 +1,43 @@
1
- # frozen_string_literal: true
2
-
3
- module Makit
4
- module Configuration
5
- # Helper for Rakefile generation
6
- class RakefileHelper
7
- def self.generate(project)
8
- rakefile_content = []
9
-
10
- # Add header comment
11
- rakefile_content << "# Generated Rakefile for #{project.name} v#{project.version}"
12
- rakefile_content << "# Generated by Makit::Configuration::RakefileHelper"
13
- rakefile_content << ""
14
-
15
- # Add default task
16
- if project.steps.any?
17
- default_tasks = project.steps.map(&:name).join(",")
18
- rakefile_content << "desc 'Run all project steps'"
19
- rakefile_content << "task :default => [:#{default_tasks}]"
20
- rakefile_content << ""
21
- end
22
-
23
- # Add individual step tasks
24
- project.steps.each do |step|
25
- rakefile_content << "desc '#{step.description}'"
26
- rakefile_content << "task :#{step.name} do"
27
- step.commands.each do |command|
28
- rakefile_content << " sh '#{command}'"
29
- end
30
- rakefile_content << "end"
31
- rakefile_content << ""
32
- end
33
-
34
- rakefile_content.join("\n")
35
- end
36
-
37
- def self.write(project, path)
38
- content = generate(project)
39
- File.write(path, content)
40
- end
41
- end
42
- end
43
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Makit
4
+ module Configuration
5
+ # Helper for Rakefile generation
6
+ class RakefileHelper
7
+ def self.generate(project)
8
+ rakefile_content = []
9
+
10
+ # Add header comment
11
+ rakefile_content << "# Generated Rakefile for #{project.name} v#{project.version}"
12
+ rakefile_content << "# Generated by Makit::Configuration::RakefileHelper"
13
+ rakefile_content << ""
14
+
15
+ # Add default task
16
+ if project.steps.any?
17
+ default_tasks = project.steps.map(&:name).join(",")
18
+ rakefile_content << "desc 'Run all project steps'"
19
+ rakefile_content << "task :default => [:#{default_tasks}]"
20
+ rakefile_content << ""
21
+ end
22
+
23
+ # Add individual step tasks
24
+ project.steps.each do |step|
25
+ rakefile_content << "desc '#{step.description}'"
26
+ rakefile_content << "task :#{step.name} do"
27
+ step.commands.each do |command|
28
+ rakefile_content << " sh '#{command}'"
29
+ end
30
+ rakefile_content << "end"
31
+ rakefile_content << ""
32
+ end
33
+
34
+ rakefile_content.join("\n")
35
+ end
36
+
37
+ def self.write(project, path)
38
+ content = generate(project)
39
+ File.write(path, content)
40
+ end
41
+ end
42
+ end
43
+ end