makit 0.0.157 → 0.0.158

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 (177) 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 +40 -40
  79. data/lib/makit/git/cli.rb +78 -54
  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 +74 -74
  112. data/lib/makit/podman/podman.rb +458 -458
  113. data/lib/makit/podman/podman_service_impl.rb +1081 -1081
  114. data/lib/makit/port.rb +32 -32
  115. data/lib/makit/process.rb +377 -377
  116. data/lib/makit/protoc.rb +112 -112
  117. data/lib/makit/rake/cli.rb +196 -196
  118. data/lib/makit/rake/trace_controller.rb +174 -174
  119. data/lib/makit/rake.rb +81 -81
  120. data/lib/makit/ruby/cli.rb +185 -185
  121. data/lib/makit/ruby.rb +25 -25
  122. data/lib/makit/rubygems.rb +137 -0
  123. data/lib/makit/secrets/azure_key_vault.rb +322 -322
  124. data/lib/makit/secrets/azure_secrets.rb +183 -183
  125. data/lib/makit/secrets/local_secrets.rb +72 -72
  126. data/lib/makit/secrets/secrets_manager.rb +105 -105
  127. data/lib/makit/secrets.rb +16 -16
  128. data/lib/makit/serializer.rb +130 -130
  129. data/lib/makit/services/builder.rb +186 -186
  130. data/lib/makit/services/error_handler.rb +226 -226
  131. data/lib/makit/services/repository_manager.rb +367 -367
  132. data/lib/makit/services/validator.rb +112 -112
  133. data/lib/makit/setup/classlib.rb +101 -101
  134. data/lib/makit/setup/gem.rb +268 -268
  135. data/lib/makit/setup/pages.rb +11 -11
  136. data/lib/makit/setup/razorclasslib.rb +101 -101
  137. data/lib/makit/setup/runner.rb +54 -54
  138. data/lib/makit/setup.rb +5 -5
  139. data/lib/makit/show.rb +110 -110
  140. data/lib/makit/storage.rb +126 -126
  141. data/lib/makit/symbols.rb +175 -175
  142. data/lib/makit/task_info.rb +130 -130
  143. data/lib/makit/tasks/at_exit.rb +15 -15
  144. data/lib/makit/tasks/build.rb +22 -22
  145. data/lib/makit/tasks/bump.rb +7 -7
  146. data/lib/makit/tasks/clean.rb +13 -13
  147. data/lib/makit/tasks/configure.rb +10 -10
  148. data/lib/makit/tasks/format.rb +10 -10
  149. data/lib/makit/tasks/hook_manager.rb +443 -443
  150. data/lib/makit/tasks/info.rb +368 -368
  151. data/lib/makit/tasks/init.rb +49 -49
  152. data/lib/makit/tasks/integrate.rb +60 -56
  153. data/lib/makit/tasks/pull_incoming.rb +13 -13
  154. data/lib/makit/tasks/secrets.rb +7 -7
  155. data/lib/makit/tasks/setup.rb +16 -16
  156. data/lib/makit/tasks/sync.rb +14 -17
  157. data/lib/makit/tasks/tag.rb +27 -27
  158. data/lib/makit/tasks/task_monkey_patch.rb +81 -81
  159. data/lib/makit/tasks/test.rb +22 -22
  160. data/lib/makit/tasks/update.rb +18 -18
  161. data/lib/makit/tasks/version.rb +6 -6
  162. data/lib/makit/tasks.rb +24 -24
  163. data/lib/makit/test_cache.rb +239 -239
  164. data/lib/makit/tree.rb +37 -37
  165. data/lib/makit/v1/configuration/project_service_impl.rb +370 -370
  166. data/lib/makit/v1/git/git_repository_service_impl.rb +295 -295
  167. data/lib/makit/v1/makit.v1_pb.rb +35 -35
  168. data/lib/makit/v1/makit.v1_services_pb.rb +27 -27
  169. data/lib/makit/v1/services/repository_manager_service_impl.rb +572 -572
  170. data/lib/makit/version.rb +661 -503
  171. data/lib/makit/version_util.rb +21 -21
  172. data/lib/makit/wix.rb +95 -95
  173. data/lib/makit/yaml.rb +29 -29
  174. data/lib/makit/zip.rb +17 -17
  175. data/lib/makit copy.rb +44 -44
  176. data/lib/makit.rb +115 -114
  177. metadata +3 -2
@@ -1,292 +1,292 @@
1
- # frozen_string_literal: true
2
-
3
- require "json"
4
-
5
- # Load gRPC service implementation
6
- require_relative "../v1/configuration/project_service_impl"
7
-
8
- module Makit
9
- module Configuration
10
- # Project configuration management - Refactored to use protobuf messages exclusively
11
- class Project
12
- attr_accessor :git_remote_url, :name, :version, :project_type, :steps, :authors, :description, :license_expression
13
- attr_accessor :dotnet_projects
14
-
15
- def initialize(name, version = nil, project_type = nil)
16
- @grpc_service = Makit::V1::Configuration::ProjectServiceImpl.new
17
-
18
- # Support both keyword arguments and positional arguments for compatibility
19
- if name.is_a?(Hash)
20
- # Keyword arguments: Project.new(name: "test", version: "1.0.0")
21
- @name = name[:name]
22
- @version = name[:version]
23
- @project_type = name[:project_type]
24
- else
25
- # Positional arguments: Project.new("test", "1.0.0", "nuget")
26
- @name = name
27
- @version = version
28
- @project_type = project_type
29
- end
30
-
31
- # Create project via gRPC service (handle empty names)
32
- if @name && !@name.strip.empty?
33
- create_request = Makit::V1::Configuration::CreateProjectRequest.new(
34
- name: @name,
35
- version: @version || "0.0.0",
36
- project_type: @project_type || "gem"
37
- )
38
- @proto_model = @grpc_service.create_project(create_request, nil)
39
- else
40
- # Create empty project directly (bypass gRPC validation for empty names)
41
- @proto_model = Makit::V1::Configuration::Project.new(
42
- name: @name || "",
43
- version: @version || "0.0.0",
44
- project_type: @project_type || "",
45
- authors: "authors",
46
- description: "description",
47
- license_expression: "MIT",
48
- steps: []
49
- )
50
- end
51
-
52
- # Initialize Ruby attributes for backward compatibility
53
- sync_attributes_from_proto
54
- end
55
-
56
- def add_step(step)
57
- raise ArgumentError, "Step must be a Makit::Configuration::Step instance" unless step.is_a?(Step)
58
-
59
- # Add step to Protobuf model
60
- proto_step = Makit::V1::Configuration::Step.new(
61
- name: step.name,
62
- description: step.description,
63
- commands: step.commands
64
- )
65
- @proto_model.steps << proto_step
66
-
67
- # Update Ruby attribute for backward compatibility
68
- @steps << step
69
- end
70
-
71
- def to_json(*args)
72
- project_data = {
73
- name: @proto_model.name,
74
- version: @proto_model.version,
75
- project_type: @proto_model.project_type,
76
- authors: @proto_model.authors,
77
- description: @proto_model.description,
78
- license_expression: @proto_model.license_expression,
79
- steps: @proto_model.steps.map do |step|
80
- {
81
- name: step.name,
82
- description: step.description,
83
- commands: step.commands.to_a
84
- }
85
- end
86
- }
87
- project_data.to_json(*args)
88
- end
89
-
90
- def to_json_pretty
91
- project_data = {
92
- name: @proto_model.name,
93
- version: @proto_model.version,
94
- project_type: @proto_model.project_type,
95
- authors: @proto_model.authors,
96
- description: @proto_model.description,
97
- license_expression: @proto_model.license_expression,
98
- steps: @proto_model.steps.map do |step|
99
- {
100
- name: step.name,
101
- description: step.description,
102
- commands: step.commands.to_a
103
- }
104
- end
105
- }
106
- JSON.pretty_generate(project_data)
107
- end
108
-
109
- def self.from_json(path)
110
- # Use gRPC service to load from file
111
- grpc_service = Makit::V1::Configuration::ProjectServiceImpl.new
112
- request = Makit::V1::Configuration::LoadFromFileRequest.new(path: path)
113
- proto_model = grpc_service.load_from_file(request, nil)
114
-
115
- # Convert Protobuf model to Ruby object
116
- convert_from_proto_model(proto_model)
117
- end
118
-
119
- # Class method for deserializing from JSON string (used by serializer)
120
- def self.decode_json(json_string)
121
- # Use gRPC service to load from JSON string
122
- grpc_service = Makit::V1::Configuration::ProjectServiceImpl.new
123
- request = Makit::V1::Configuration::LoadFromJsonRequest.new(json_string: json_string)
124
- proto_model = grpc_service.load_from_json(request, nil)
125
-
126
- # Convert Protobuf model to Ruby object
127
- convert_from_proto_model(proto_model)
128
- end
129
-
130
- def to_gitlab_ci(path)
131
- # Use gRPC service to generate GitLab CI
132
- request = Makit::V1::Configuration::GenerateGitlabCiRequest.new(
133
- project: @proto_model,
134
- path: path
135
- )
136
- @grpc_service.generate_gitlab_ci(request, nil)
137
- end
138
-
139
- def to_rakefile
140
- # Use gRPC service to generate Rakefile
141
- request = Makit::V1::Configuration::GenerateRakefileRequest.new(project: @proto_model)
142
- response = @grpc_service.generate_rakefile(request, nil)
143
- response.content
144
- end
145
-
146
- # Save the project to a specific path as pretty JSON
147
- def save_as(path)
148
- # Validate that the project has a non-empty name before saving
149
- if @name.nil? || @name.strip.empty?
150
- raise ArgumentError, "Project name cannot be empty. Please set a valid project name before saving."
151
- end
152
-
153
- # Use gRPC service to save to file
154
- request = Makit::V1::Configuration::SaveToFileRequest.new(
155
- project: @proto_model,
156
- path: path
157
- )
158
- @grpc_service.save_to_file(request, nil)
159
- end
160
-
161
- def save
162
- # Validate that the project has a non-empty name before saving
163
- if @name.nil? || @name.strip.empty?
164
- raise ArgumentError, "Project name cannot be empty. Please set a valid project name before saving."
165
- end
166
-
167
- # Use gRPC service to save to default location
168
- request = Makit::V1::Configuration::SaveToDefaultRequest.new(project: @proto_model)
169
- @grpc_service.save_to_default(request, nil)
170
- end
171
-
172
- # Display the project configuration in YAML format
173
- def show
174
- require "yaml"
175
-
176
- project_data = {
177
- name: @proto_model.name,
178
- version: @proto_model.version,
179
- project_type: @proto_model.project_type,
180
- git_remote_url: @proto_model.git_remote_url,
181
- steps: @proto_model.steps.map do |step|
182
- {
183
- name: step.name,
184
- description: step.description,
185
- commands: step.commands.to_a
186
- }
187
- end
188
- }
189
-
190
- puts YAML.dump(project_data)
191
- end
192
-
193
- # Load a project from the default .makit.json file
194
- def self.default
195
- # Use gRPC service to load default project
196
- grpc_service = Makit::V1::Configuration::ProjectServiceImpl.new
197
- request = Google::Protobuf::Empty.new
198
- proto_model = grpc_service.load_default(request, nil)
199
-
200
- # Convert Protobuf model to Ruby object
201
- convert_from_proto_model(proto_model)
202
- end
203
-
204
- # Update project attributes
205
- def name=(value)
206
- @name = value
207
- update_proto_attribute(:name, value)
208
- end
209
-
210
- def version=(value)
211
- @version = value
212
- update_proto_attribute(:version, value)
213
- end
214
-
215
- def project_type=(value)
216
- @project_type = value
217
- update_proto_attribute(:project_type, value)
218
- end
219
-
220
- def authors=(value)
221
- @authors = value
222
- update_proto_attribute(:authors, value)
223
- end
224
-
225
- def description=(value)
226
- @description = value
227
- update_proto_attribute(:description, value)
228
- end
229
-
230
- def license_expression=(value)
231
- @license_expression = value
232
- update_proto_attribute(:license_expression, value)
233
- end
234
-
235
- def git_remote_url=(value)
236
- @git_remote_url = value
237
- update_proto_attribute(:git_remote_url, value)
238
- end
239
-
240
- def dotnet_projects=(value)
241
- @dotnet_projects = value
242
- @proto_model.dotnet_projects.replace(value || [])
243
- end
244
-
245
- private
246
-
247
- # Synchronize Ruby attributes from protobuf model
248
- def sync_attributes_from_proto
249
- @authors = @proto_model.authors
250
- @description = @proto_model.description
251
- @license_expression = @proto_model.license_expression
252
- @steps = convert_steps_from_proto(@proto_model.steps)
253
- @git_remote_url = @proto_model.git_remote_url
254
- @dotnet_projects = @proto_model.dotnet_projects.to_a
255
- end
256
-
257
- # Convert Protobuf model to Ruby Project object
258
- def self.convert_from_proto_model(proto_model)
259
- project = new(proto_model.name, proto_model.version, proto_model.project_type)
260
-
261
- # Update all attributes from Protobuf model
262
- project.instance_variable_set(:@proto_model, proto_model)
263
- project.send(:sync_attributes_from_proto)
264
-
265
- project
266
- end
267
-
268
- # Convert Protobuf steps to Ruby Step objects
269
- def convert_steps_from_proto(proto_steps)
270
- proto_steps.map do |proto_step|
271
- Step.new(
272
- name: proto_step.name,
273
- description: proto_step.description,
274
- commands: proto_step.commands.to_a
275
- )
276
- end
277
- end
278
-
279
- # Update a single attribute in the Protobuf model
280
- def update_proto_attribute(attribute, value)
281
- updates = { attribute.to_s => value }
282
- request = Makit::V1::Configuration::UpdateProjectRequest.new(
283
- project: @proto_model,
284
- updates: updates
285
- )
286
- @proto_model = @grpc_service.update_project(request, nil)
287
- # Sync Ruby attributes after update
288
- sync_attributes_from_proto
289
- end
290
- end
291
- end
292
- end
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+
5
+ # Load gRPC service implementation
6
+ require_relative "../v1/configuration/project_service_impl"
7
+
8
+ module Makit
9
+ module Configuration
10
+ # Project configuration management - Refactored to use protobuf messages exclusively
11
+ class Project
12
+ attr_accessor :git_remote_url, :name, :version, :project_type, :steps, :authors, :description, :license_expression
13
+ attr_accessor :dotnet_projects
14
+
15
+ def initialize(name, version = nil, project_type = nil)
16
+ @grpc_service = Makit::V1::Configuration::ProjectServiceImpl.new
17
+
18
+ # Support both keyword arguments and positional arguments for compatibility
19
+ if name.is_a?(Hash)
20
+ # Keyword arguments: Project.new(name: "test", version: "1.0.0")
21
+ @name = name[:name]
22
+ @version = name[:version]
23
+ @project_type = name[:project_type]
24
+ else
25
+ # Positional arguments: Project.new("test", "1.0.0", "nuget")
26
+ @name = name
27
+ @version = version
28
+ @project_type = project_type
29
+ end
30
+
31
+ # Create project via gRPC service (handle empty names)
32
+ if @name && !@name.strip.empty?
33
+ create_request = Makit::V1::Configuration::CreateProjectRequest.new(
34
+ name: @name,
35
+ version: @version || "0.0.0",
36
+ project_type: @project_type || "gem"
37
+ )
38
+ @proto_model = @grpc_service.create_project(create_request, nil)
39
+ else
40
+ # Create empty project directly (bypass gRPC validation for empty names)
41
+ @proto_model = Makit::V1::Configuration::Project.new(
42
+ name: @name || "",
43
+ version: @version || "0.0.0",
44
+ project_type: @project_type || "",
45
+ authors: "authors",
46
+ description: "description",
47
+ license_expression: "MIT",
48
+ steps: []
49
+ )
50
+ end
51
+
52
+ # Initialize Ruby attributes for backward compatibility
53
+ sync_attributes_from_proto
54
+ end
55
+
56
+ def add_step(step)
57
+ raise ArgumentError, "Step must be a Makit::Configuration::Step instance" unless step.is_a?(Step)
58
+
59
+ # Add step to Protobuf model
60
+ proto_step = Makit::V1::Configuration::Step.new(
61
+ name: step.name,
62
+ description: step.description,
63
+ commands: step.commands
64
+ )
65
+ @proto_model.steps << proto_step
66
+
67
+ # Update Ruby attribute for backward compatibility
68
+ @steps << step
69
+ end
70
+
71
+ def to_json(*args)
72
+ project_data = {
73
+ name: @proto_model.name,
74
+ version: @proto_model.version,
75
+ project_type: @proto_model.project_type,
76
+ authors: @proto_model.authors,
77
+ description: @proto_model.description,
78
+ license_expression: @proto_model.license_expression,
79
+ steps: @proto_model.steps.map do |step|
80
+ {
81
+ name: step.name,
82
+ description: step.description,
83
+ commands: step.commands.to_a
84
+ }
85
+ end
86
+ }
87
+ project_data.to_json(*args)
88
+ end
89
+
90
+ def to_json_pretty
91
+ project_data = {
92
+ name: @proto_model.name,
93
+ version: @proto_model.version,
94
+ project_type: @proto_model.project_type,
95
+ authors: @proto_model.authors,
96
+ description: @proto_model.description,
97
+ license_expression: @proto_model.license_expression,
98
+ steps: @proto_model.steps.map do |step|
99
+ {
100
+ name: step.name,
101
+ description: step.description,
102
+ commands: step.commands.to_a
103
+ }
104
+ end
105
+ }
106
+ JSON.pretty_generate(project_data)
107
+ end
108
+
109
+ def self.from_json(path)
110
+ # Use gRPC service to load from file
111
+ grpc_service = Makit::V1::Configuration::ProjectServiceImpl.new
112
+ request = Makit::V1::Configuration::LoadFromFileRequest.new(path: path)
113
+ proto_model = grpc_service.load_from_file(request, nil)
114
+
115
+ # Convert Protobuf model to Ruby object
116
+ convert_from_proto_model(proto_model)
117
+ end
118
+
119
+ # Class method for deserializing from JSON string (used by serializer)
120
+ def self.decode_json(json_string)
121
+ # Use gRPC service to load from JSON string
122
+ grpc_service = Makit::V1::Configuration::ProjectServiceImpl.new
123
+ request = Makit::V1::Configuration::LoadFromJsonRequest.new(json_string: json_string)
124
+ proto_model = grpc_service.load_from_json(request, nil)
125
+
126
+ # Convert Protobuf model to Ruby object
127
+ convert_from_proto_model(proto_model)
128
+ end
129
+
130
+ def to_gitlab_ci(path)
131
+ # Use gRPC service to generate GitLab CI
132
+ request = Makit::V1::Configuration::GenerateGitlabCiRequest.new(
133
+ project: @proto_model,
134
+ path: path
135
+ )
136
+ @grpc_service.generate_gitlab_ci(request, nil)
137
+ end
138
+
139
+ def to_rakefile
140
+ # Use gRPC service to generate Rakefile
141
+ request = Makit::V1::Configuration::GenerateRakefileRequest.new(project: @proto_model)
142
+ response = @grpc_service.generate_rakefile(request, nil)
143
+ response.content
144
+ end
145
+
146
+ # Save the project to a specific path as pretty JSON
147
+ def save_as(path)
148
+ # Validate that the project has a non-empty name before saving
149
+ if @name.nil? || @name.strip.empty?
150
+ raise ArgumentError, "Project name cannot be empty. Please set a valid project name before saving."
151
+ end
152
+
153
+ # Use gRPC service to save to file
154
+ request = Makit::V1::Configuration::SaveToFileRequest.new(
155
+ project: @proto_model,
156
+ path: path
157
+ )
158
+ @grpc_service.save_to_file(request, nil)
159
+ end
160
+
161
+ def save
162
+ # Validate that the project has a non-empty name before saving
163
+ if @name.nil? || @name.strip.empty?
164
+ raise ArgumentError, "Project name cannot be empty. Please set a valid project name before saving."
165
+ end
166
+
167
+ # Use gRPC service to save to default location
168
+ request = Makit::V1::Configuration::SaveToDefaultRequest.new(project: @proto_model)
169
+ @grpc_service.save_to_default(request, nil)
170
+ end
171
+
172
+ # Display the project configuration in YAML format
173
+ def show
174
+ require "yaml"
175
+
176
+ project_data = {
177
+ name: @proto_model.name,
178
+ version: @proto_model.version,
179
+ project_type: @proto_model.project_type,
180
+ git_remote_url: @proto_model.git_remote_url,
181
+ steps: @proto_model.steps.map do |step|
182
+ {
183
+ name: step.name,
184
+ description: step.description,
185
+ commands: step.commands.to_a
186
+ }
187
+ end
188
+ }
189
+
190
+ puts YAML.dump(project_data)
191
+ end
192
+
193
+ # Load a project from the default .makit.json file
194
+ def self.default
195
+ # Use gRPC service to load default project
196
+ grpc_service = Makit::V1::Configuration::ProjectServiceImpl.new
197
+ request = Google::Protobuf::Empty.new
198
+ proto_model = grpc_service.load_default(request, nil)
199
+
200
+ # Convert Protobuf model to Ruby object
201
+ convert_from_proto_model(proto_model)
202
+ end
203
+
204
+ # Update project attributes
205
+ def name=(value)
206
+ @name = value
207
+ update_proto_attribute(:name, value)
208
+ end
209
+
210
+ def version=(value)
211
+ @version = value
212
+ update_proto_attribute(:version, value)
213
+ end
214
+
215
+ def project_type=(value)
216
+ @project_type = value
217
+ update_proto_attribute(:project_type, value)
218
+ end
219
+
220
+ def authors=(value)
221
+ @authors = value
222
+ update_proto_attribute(:authors, value)
223
+ end
224
+
225
+ def description=(value)
226
+ @description = value
227
+ update_proto_attribute(:description, value)
228
+ end
229
+
230
+ def license_expression=(value)
231
+ @license_expression = value
232
+ update_proto_attribute(:license_expression, value)
233
+ end
234
+
235
+ def git_remote_url=(value)
236
+ @git_remote_url = value
237
+ update_proto_attribute(:git_remote_url, value)
238
+ end
239
+
240
+ def dotnet_projects=(value)
241
+ @dotnet_projects = value
242
+ @proto_model.dotnet_projects.replace(value || [])
243
+ end
244
+
245
+ private
246
+
247
+ # Synchronize Ruby attributes from protobuf model
248
+ def sync_attributes_from_proto
249
+ @authors = @proto_model.authors
250
+ @description = @proto_model.description
251
+ @license_expression = @proto_model.license_expression
252
+ @steps = convert_steps_from_proto(@proto_model.steps)
253
+ @git_remote_url = @proto_model.git_remote_url
254
+ @dotnet_projects = @proto_model.dotnet_projects.to_a
255
+ end
256
+
257
+ # Convert Protobuf model to Ruby Project object
258
+ def self.convert_from_proto_model(proto_model)
259
+ project = new(proto_model.name, proto_model.version, proto_model.project_type)
260
+
261
+ # Update all attributes from Protobuf model
262
+ project.instance_variable_set(:@proto_model, proto_model)
263
+ project.send(:sync_attributes_from_proto)
264
+
265
+ project
266
+ end
267
+
268
+ # Convert Protobuf steps to Ruby Step objects
269
+ def convert_steps_from_proto(proto_steps)
270
+ proto_steps.map do |proto_step|
271
+ Step.new(
272
+ name: proto_step.name,
273
+ description: proto_step.description,
274
+ commands: proto_step.commands.to_a
275
+ )
276
+ end
277
+ end
278
+
279
+ # Update a single attribute in the Protobuf model
280
+ def update_proto_attribute(attribute, value)
281
+ updates = { attribute.to_s => value }
282
+ request = Makit::V1::Configuration::UpdateProjectRequest.new(
283
+ project: @proto_model,
284
+ updates: updates
285
+ )
286
+ @proto_model = @grpc_service.update_project(request, nil)
287
+ # Sync Ruby attributes after update
288
+ sync_attributes_from_proto
289
+ end
290
+ end
291
+ end
292
+ 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