makit 0.0.164 → 0.0.166

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 (178) 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 +139 -0
  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/gitlab/pipeline.rb +857 -857
  84. data/lib/makit/gitlab/pipeline_service_impl.rb +1535 -1535
  85. data/lib/makit/gitlab_runner.rb +59 -59
  86. data/lib/makit/humanize.rb +218 -218
  87. data/lib/makit/indexer.rb +47 -47
  88. data/lib/makit/io/filesystem.rb +111 -111
  89. data/lib/makit/io/filesystem_service_impl.rb +337 -337
  90. data/lib/makit/lint.rb +212 -212
  91. data/lib/makit/logging/configuration.rb +309 -309
  92. data/lib/makit/logging/format_registry.rb +84 -84
  93. data/lib/makit/logging/formatters/base.rb +39 -39
  94. data/lib/makit/logging/formatters/console_formatter.rb +140 -140
  95. data/lib/makit/logging/formatters/json_formatter.rb +65 -65
  96. data/lib/makit/logging/formatters/plain_text_formatter.rb +71 -71
  97. data/lib/makit/logging/formatters/text_formatter.rb +64 -64
  98. data/lib/makit/logging/log_request.rb +119 -119
  99. data/lib/makit/logging/logger.rb +199 -199
  100. data/lib/makit/logging/sinks/base.rb +91 -91
  101. data/lib/makit/logging/sinks/console.rb +72 -72
  102. data/lib/makit/logging/sinks/file_sink.rb +92 -92
  103. data/lib/makit/logging/sinks/structured.rb +123 -123
  104. data/lib/makit/logging/sinks/unified_file_sink.rb +296 -296
  105. data/lib/makit/logging.rb +578 -578
  106. data/lib/makit/markdown.rb +75 -75
  107. data/lib/makit/mp/basic_object_mp.rb +17 -17
  108. data/lib/makit/mp/command_mp.rb +13 -13
  109. data/lib/makit/mp/command_request.mp.rb +17 -17
  110. data/lib/makit/mp/project_mp.rb +199 -199
  111. data/lib/makit/mp/string_mp.rb +205 -205
  112. data/lib/makit/nuget.rb +454 -454
  113. data/lib/makit/podman/podman.rb +458 -458
  114. data/lib/makit/podman/podman_service_impl.rb +1081 -1081
  115. data/lib/makit/port.rb +32 -32
  116. data/lib/makit/process.rb +377 -377
  117. data/lib/makit/protoc.rb +112 -112
  118. data/lib/makit/rake/cli.rb +196 -196
  119. data/lib/makit/rake/trace_controller.rb +174 -174
  120. data/lib/makit/rake.rb +81 -81
  121. data/lib/makit/ruby/cli.rb +185 -185
  122. data/lib/makit/ruby.rb +25 -25
  123. data/lib/makit/rubygems.rb +137 -137
  124. data/lib/makit/secrets/azure_key_vault.rb +322 -322
  125. data/lib/makit/secrets/azure_secrets.rb +221 -183
  126. data/lib/makit/secrets/local_secrets.rb +72 -72
  127. data/lib/makit/secrets/secrets_manager.rb +105 -105
  128. data/lib/makit/secrets.rb +96 -16
  129. data/lib/makit/serializer.rb +130 -130
  130. data/lib/makit/services/builder.rb +186 -186
  131. data/lib/makit/services/error_handler.rb +226 -226
  132. data/lib/makit/services/repository_manager.rb +367 -367
  133. data/lib/makit/services/validator.rb +112 -112
  134. data/lib/makit/setup/classlib.rb +101 -101
  135. data/lib/makit/setup/gem.rb +268 -268
  136. data/lib/makit/setup/pages.rb +11 -11
  137. data/lib/makit/setup/razorclasslib.rb +101 -101
  138. data/lib/makit/setup/runner.rb +54 -54
  139. data/lib/makit/setup.rb +5 -5
  140. data/lib/makit/show.rb +110 -110
  141. data/lib/makit/storage.rb +126 -126
  142. data/lib/makit/symbols.rb +175 -175
  143. data/lib/makit/task_info.rb +130 -130
  144. data/lib/makit/tasks/at_exit.rb +15 -15
  145. data/lib/makit/tasks/build.rb +22 -22
  146. data/lib/makit/tasks/bump.rb +7 -7
  147. data/lib/makit/tasks/clean.rb +13 -13
  148. data/lib/makit/tasks/configure.rb +10 -10
  149. data/lib/makit/tasks/format.rb +10 -10
  150. data/lib/makit/tasks/hook_manager.rb +443 -443
  151. data/lib/makit/tasks/info.rb +368 -368
  152. data/lib/makit/tasks/init.rb +49 -49
  153. data/lib/makit/tasks/integrate.rb +60 -60
  154. data/lib/makit/tasks/pull_incoming.rb +13 -13
  155. data/lib/makit/tasks/secrets.rb +7 -7
  156. data/lib/makit/tasks/setup.rb +16 -16
  157. data/lib/makit/tasks/sync.rb +14 -14
  158. data/lib/makit/tasks/tag.rb +27 -27
  159. data/lib/makit/tasks/task_monkey_patch.rb +81 -81
  160. data/lib/makit/tasks/test.rb +22 -22
  161. data/lib/makit/tasks/update.rb +21 -21
  162. data/lib/makit/tasks/version.rb +6 -6
  163. data/lib/makit/tasks.rb +24 -24
  164. data/lib/makit/test_cache.rb +239 -239
  165. data/lib/makit/tree.rb +37 -37
  166. data/lib/makit/v1/configuration/project_service_impl.rb +370 -370
  167. data/lib/makit/v1/git/git_repository_service_impl.rb +295 -295
  168. data/lib/makit/v1/makit.v1_pb.rb +35 -35
  169. data/lib/makit/v1/makit.v1_services_pb.rb +27 -27
  170. data/lib/makit/v1/services/repository_manager_service_impl.rb +572 -572
  171. data/lib/makit/version.rb +661 -661
  172. data/lib/makit/version_util.rb +21 -21
  173. data/lib/makit/wix.rb +95 -95
  174. data/lib/makit/yaml.rb +29 -29
  175. data/lib/makit/zip.rb +17 -17
  176. data/lib/makit copy.rb +44 -44
  177. data/lib/makit.rb +120 -119
  178. 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