makit 0.0.143 → 0.0.144

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 (154) 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 -69
  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 +212 -212
  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 +386 -386
  37. data/lib/makit/commands/strategies/base.rb +171 -171
  38. data/lib/makit/commands/strategies/child_process.rb +162 -162
  39. data/lib/makit/commands/strategies/factory.rb +136 -136
  40. data/lib/makit/commands/strategies/synchronous.rb +139 -139
  41. data/lib/makit/commands.rb +50 -50
  42. data/lib/makit/configuration/dotnet_project.rb +48 -39
  43. data/lib/makit/configuration/gitlab_helper.rb +58 -58
  44. data/lib/makit/configuration/project.rb +168 -168
  45. data/lib/makit/configuration/rakefile_helper.rb +43 -43
  46. data/lib/makit/configuration/step.rb +34 -34
  47. data/lib/makit/configuration/timeout.rb +74 -74
  48. data/lib/makit/configuration.rb +16 -16
  49. data/lib/makit/content/default_gitignore.rb +7 -7
  50. data/lib/makit/content/default_gitignore.txt +225 -225
  51. data/lib/makit/content/default_rakefile.rb +13 -13
  52. data/lib/makit/content/gem_rakefile.rb +16 -16
  53. data/lib/makit/context.rb +1 -1
  54. data/lib/makit/data.rb +49 -49
  55. data/lib/makit/directories.rb +140 -140
  56. data/lib/makit/directory.rb +262 -262
  57. data/lib/makit/docs/files.rb +89 -89
  58. data/lib/makit/docs/rake.rb +102 -102
  59. data/lib/makit/dotnet/cli.rb +69 -69
  60. data/lib/makit/dotnet/project.rb +217 -217
  61. data/lib/makit/dotnet/solution.rb +38 -38
  62. data/lib/makit/dotnet/solution_classlib.rb +239 -239
  63. data/lib/makit/dotnet/solution_console.rb +264 -264
  64. data/lib/makit/dotnet/solution_maui.rb +354 -354
  65. data/lib/makit/dotnet/solution_wasm.rb +275 -275
  66. data/lib/makit/dotnet/solution_wpf.rb +304 -304
  67. data/lib/makit/dotnet.rb +102 -102
  68. data/lib/makit/email.rb +90 -90
  69. data/lib/makit/environment.rb +142 -142
  70. data/lib/makit/examples/runner.rb +370 -370
  71. data/lib/makit/exceptions.rb +45 -45
  72. data/lib/makit/fileinfo.rb +24 -24
  73. data/lib/makit/files.rb +43 -43
  74. data/lib/makit/gems.rb +40 -40
  75. data/lib/makit/git/cli.rb +54 -54
  76. data/lib/makit/git/repository.rb +90 -90
  77. data/lib/makit/git.rb +98 -98
  78. data/lib/makit/gitlab_runner.rb +59 -59
  79. data/lib/makit/humanize.rb +137 -137
  80. data/lib/makit/indexer.rb +47 -47
  81. data/lib/makit/logging/configuration.rb +308 -308
  82. data/lib/makit/logging/format_registry.rb +84 -84
  83. data/lib/makit/logging/formatters/base.rb +39 -39
  84. data/lib/makit/logging/formatters/console_formatter.rb +140 -140
  85. data/lib/makit/logging/formatters/json_formatter.rb +65 -65
  86. data/lib/makit/logging/formatters/plain_text_formatter.rb +71 -71
  87. data/lib/makit/logging/formatters/text_formatter.rb +64 -64
  88. data/lib/makit/logging/log_request.rb +119 -119
  89. data/lib/makit/logging/logger.rb +199 -199
  90. data/lib/makit/logging/sinks/base.rb +91 -91
  91. data/lib/makit/logging/sinks/console.rb +72 -72
  92. data/lib/makit/logging/sinks/file_sink.rb +92 -92
  93. data/lib/makit/logging/sinks/structured.rb +123 -123
  94. data/lib/makit/logging/sinks/unified_file_sink.rb +296 -296
  95. data/lib/makit/logging.rb +565 -565
  96. data/lib/makit/markdown.rb +75 -75
  97. data/lib/makit/mp/basic_object_mp.rb +17 -17
  98. data/lib/makit/mp/command_mp.rb +13 -13
  99. data/lib/makit/mp/command_request.mp.rb +17 -17
  100. data/lib/makit/mp/project_mp.rb +199 -199
  101. data/lib/makit/mp/string_mp.rb +199 -199
  102. data/lib/makit/nuget.rb +74 -74
  103. data/lib/makit/port.rb +32 -32
  104. data/lib/makit/process.rb +377 -163
  105. data/lib/makit/protoc.rb +107 -107
  106. data/lib/makit/rake/cli.rb +196 -196
  107. data/lib/makit/rake/trace_controller.rb +174 -174
  108. data/lib/makit/rake.rb +81 -81
  109. data/lib/makit/ruby/cli.rb +185 -185
  110. data/lib/makit/ruby.rb +25 -25
  111. data/lib/makit/secrets.rb +51 -51
  112. data/lib/makit/serializer.rb +130 -130
  113. data/lib/makit/services/builder.rb +186 -186
  114. data/lib/makit/services/error_handler.rb +226 -226
  115. data/lib/makit/services/repository_manager.rb +231 -231
  116. data/lib/makit/services/validator.rb +112 -112
  117. data/lib/makit/setup/classlib.rb +101 -101
  118. data/lib/makit/setup/gem.rb +268 -268
  119. data/lib/makit/setup/pages.rb +11 -11
  120. data/lib/makit/setup/razorclasslib.rb +101 -101
  121. data/lib/makit/setup/runner.rb +54 -54
  122. data/lib/makit/setup.rb +5 -5
  123. data/lib/makit/show.rb +110 -110
  124. data/lib/makit/storage.rb +126 -126
  125. data/lib/makit/symbols.rb +170 -170
  126. data/lib/makit/task_info.rb +130 -130
  127. data/lib/makit/tasks/at_exit.rb +15 -15
  128. data/lib/makit/tasks/build.rb +22 -22
  129. data/lib/makit/tasks/clean.rb +13 -13
  130. data/lib/makit/tasks/configure.rb +10 -10
  131. data/lib/makit/tasks/format.rb +10 -10
  132. data/lib/makit/tasks/hook_manager.rb +443 -443
  133. data/lib/makit/tasks/init.rb +49 -49
  134. data/lib/makit/tasks/integrate.rb +29 -29
  135. data/lib/makit/tasks/pull_incoming.rb +13 -13
  136. data/lib/makit/tasks/setup.rb +16 -16
  137. data/lib/makit/tasks/sync.rb +17 -17
  138. data/lib/makit/tasks/tag.rb +16 -16
  139. data/lib/makit/tasks/task_monkey_patch.rb +81 -81
  140. data/lib/makit/tasks/test.rb +22 -22
  141. data/lib/makit/tasks/update.rb +18 -18
  142. data/lib/makit/tasks.rb +20 -20
  143. data/lib/makit/test_cache.rb +239 -239
  144. data/lib/makit/tree.rb +37 -37
  145. data/lib/makit/v1/makit.v1_pb.rb +35 -35
  146. data/lib/makit/v1/makit.v1_services_pb.rb +27 -27
  147. data/lib/makit/version.rb +100 -100
  148. data/lib/makit/version_util.rb +21 -21
  149. data/lib/makit/wix.rb +95 -95
  150. data/lib/makit/yaml.rb +29 -29
  151. data/lib/makit/zip.rb +17 -17
  152. data/lib/makit copy.rb +44 -44
  153. data/lib/makit.rb +43 -43
  154. metadata +2 -2
@@ -1,39 +1,48 @@
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
-
11
- # set the default values
12
- def initialize
13
- @name = "MyClassLib"
14
- @output_dir = "source/MyClassLib"
15
- @frameworks = ["net8.0", "net8.0-browser"]
16
- @template = "classlib"
17
- end
18
-
19
- def get_csproj_path
20
- "#{@output_dir}/#{@name}.csproj"
21
- end
22
-
23
- def get_build_commands
24
- commands = []
25
- commands << "dotnet build #{get_csproj_path} --configuration Release"
26
- commands << "dotnet build #{get_csproj_path} --configuration Debug"
27
- commands
28
- end
29
-
30
- def get_publish_commands
31
- commands = []
32
- commands << "dotnet publish #{get_csproj_path} --configuration Release --output artifacts/Publish"
33
- commands << "dotnet publish #{get_csproj_path} --configuration Debug --output artifacts/Publish"
34
- commands
35
- end
36
-
37
- end
38
- end
39
- 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
+
11
+ # set the default values
12
+ def initialize
13
+ @name = "MyClassLib"
14
+ @output_dir = "source/MyClassLib"
15
+ @frameworks = ["net8.0", "net8.0-browser"]
16
+ @template = "classlib"
17
+ end
18
+
19
+ def get_csproj_path
20
+ "#{@output_dir}/#{@name}.csproj"
21
+ end
22
+
23
+ def get_build_commands
24
+ commands = []
25
+ commands << "dotnet build #{get_csproj_path} --configuration Release"
26
+ commands << "dotnet build #{get_csproj_path} --configuration Debug"
27
+ commands
28
+ end
29
+
30
+ def get_publish_commands
31
+ commands = []
32
+ commands << "dotnet publish #{get_csproj_path} --configuration Release --output artifacts/Publish"
33
+ commands << "dotnet publish #{get_csproj_path} --configuration Debug --output artifacts/Publish"
34
+ commands
35
+ end
36
+
37
+ def to_json
38
+ {
39
+ name: @name,
40
+ output_dir: @output_dir,
41
+ frameworks: @frameworks,
42
+ template: @template
43
+ }.to_json
44
+ end
45
+
46
+ end
47
+ end
48
+ 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