makit 0.0.168 → 0.0.169

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +41 -41
  3. data/exe/makit +5 -5
  4. data/lib/makit/apache.rb +28 -28
  5. data/lib/makit/auto.rb +48 -48
  6. data/lib/makit/azure/blob_storage.rb +257 -257
  7. data/lib/makit/azure/cli.rb +284 -284
  8. data/lib/makit/azure-pipelines.rb +187 -187
  9. data/lib/makit/cli/base.rb +17 -17
  10. data/lib/makit/cli/build_commands.rb +500 -500
  11. data/lib/makit/cli/generators/base_generator.rb +74 -74
  12. data/lib/makit/cli/generators/dotnet_generator.rb +50 -50
  13. data/lib/makit/cli/generators/generator_factory.rb +49 -49
  14. data/lib/makit/cli/generators/node_generator.rb +50 -50
  15. data/lib/makit/cli/generators/ruby_generator.rb +77 -77
  16. data/lib/makit/cli/generators/rust_generator.rb +50 -50
  17. data/lib/makit/cli/generators/templates/dotnet_templates.rb +167 -167
  18. data/lib/makit/cli/generators/templates/node_templates.rb +161 -161
  19. data/lib/makit/cli/generators/templates/ruby/gemfile.rb +26 -26
  20. data/lib/makit/cli/generators/templates/ruby/gemspec.rb +41 -41
  21. data/lib/makit/cli/generators/templates/ruby/main_lib.rb +33 -33
  22. data/lib/makit/cli/generators/templates/ruby/rakefile.rb +35 -35
  23. data/lib/makit/cli/generators/templates/ruby/readme.rb +63 -63
  24. data/lib/makit/cli/generators/templates/ruby/test.rb +39 -39
  25. data/lib/makit/cli/generators/templates/ruby/test_helper.rb +29 -29
  26. data/lib/makit/cli/generators/templates/ruby/version.rb +29 -29
  27. data/lib/makit/cli/generators/templates/rust_templates.rb +128 -128
  28. data/lib/makit/cli/main.rb +78 -78
  29. data/lib/makit/cli/pipeline_commands.rb +311 -311
  30. data/lib/makit/cli/project_commands.rb +868 -868
  31. data/lib/makit/cli/repository_commands.rb +661 -661
  32. data/lib/makit/cli/strategy_commands.rb +207 -207
  33. data/lib/makit/cli/utility_commands.rb +521 -521
  34. data/lib/makit/commands/factory.rb +359 -359
  35. data/lib/makit/commands/middleware/base.rb +73 -73
  36. data/lib/makit/commands/middleware/cache.rb +248 -248
  37. data/lib/makit/commands/middleware/command_logger.rb +312 -312
  38. data/lib/makit/commands/middleware/validator.rb +269 -269
  39. data/lib/makit/commands/request.rb +316 -316
  40. data/lib/makit/commands/result.rb +323 -323
  41. data/lib/makit/commands/runner.rb +386 -386
  42. data/lib/makit/commands/strategies/base.rb +171 -171
  43. data/lib/makit/commands/strategies/child_process.rb +162 -162
  44. data/lib/makit/commands/strategies/factory.rb +136 -136
  45. data/lib/makit/commands/strategies/synchronous.rb +139 -139
  46. data/lib/makit/commands.rb +50 -50
  47. data/lib/makit/configuration/dotnet_project.rb +48 -48
  48. data/lib/makit/configuration/gitlab_helper.rb +61 -61
  49. data/lib/makit/configuration/project.rb +292 -292
  50. data/lib/makit/configuration/rakefile_helper.rb +43 -43
  51. data/lib/makit/configuration/step.rb +34 -34
  52. data/lib/makit/configuration/timeout.rb +74 -74
  53. data/lib/makit/configuration.rb +21 -21
  54. data/lib/makit/content/default_gitignore.rb +7 -7
  55. data/lib/makit/content/default_gitignore.txt +225 -225
  56. data/lib/makit/content/default_rakefile.rb +13 -13
  57. data/lib/makit/content/gem_rakefile.rb +16 -16
  58. data/lib/makit/context.rb +1 -1
  59. data/lib/makit/data.rb +49 -49
  60. data/lib/makit/directories.rb +170 -170
  61. data/lib/makit/directory.rb +262 -262
  62. data/lib/makit/docs/files.rb +89 -89
  63. data/lib/makit/docs/rake.rb +102 -102
  64. data/lib/makit/dotnet/cli.rb +224 -224
  65. data/lib/makit/dotnet/project.rb +217 -217
  66. data/lib/makit/dotnet/solution.rb +38 -38
  67. data/lib/makit/dotnet/solution_classlib.rb +239 -239
  68. data/lib/makit/dotnet/solution_console.rb +264 -264
  69. data/lib/makit/dotnet/solution_maui.rb +354 -354
  70. data/lib/makit/dotnet/solution_wasm.rb +275 -275
  71. data/lib/makit/dotnet/solution_wpf.rb +304 -304
  72. data/lib/makit/dotnet.rb +110 -110
  73. data/lib/makit/email.rb +90 -90
  74. data/lib/makit/environment.rb +142 -142
  75. data/lib/makit/examples/runner.rb +370 -370
  76. data/lib/makit/exceptions.rb +45 -45
  77. data/lib/makit/fileinfo.rb +32 -32
  78. data/lib/makit/files.rb +43 -43
  79. data/lib/makit/gems.rb +49 -49
  80. data/lib/makit/git/cli.rb +103 -103
  81. data/lib/makit/git/repository.rb +100 -100
  82. data/lib/makit/git.rb +104 -104
  83. data/lib/makit/github_actions.rb +202 -202
  84. data/lib/makit/gitlab/pipeline.rb +857 -857
  85. data/lib/makit/gitlab/pipeline_service_impl.rb +1535 -1535
  86. data/lib/makit/gitlab_runner.rb +59 -59
  87. data/lib/makit/humanize.rb +218 -218
  88. data/lib/makit/indexer.rb +47 -47
  89. data/lib/makit/io/filesystem.rb +111 -111
  90. data/lib/makit/io/filesystem_service_impl.rb +337 -337
  91. data/lib/makit/lint.rb +212 -212
  92. data/lib/makit/logging/configuration.rb +309 -309
  93. data/lib/makit/logging/format_registry.rb +84 -84
  94. data/lib/makit/logging/formatters/base.rb +39 -39
  95. data/lib/makit/logging/formatters/console_formatter.rb +140 -140
  96. data/lib/makit/logging/formatters/json_formatter.rb +65 -65
  97. data/lib/makit/logging/formatters/plain_text_formatter.rb +71 -71
  98. data/lib/makit/logging/formatters/text_formatter.rb +64 -64
  99. data/lib/makit/logging/log_request.rb +119 -119
  100. data/lib/makit/logging/logger.rb +199 -199
  101. data/lib/makit/logging/sinks/base.rb +91 -91
  102. data/lib/makit/logging/sinks/console.rb +72 -72
  103. data/lib/makit/logging/sinks/file_sink.rb +92 -92
  104. data/lib/makit/logging/sinks/structured.rb +123 -123
  105. data/lib/makit/logging/sinks/unified_file_sink.rb +296 -296
  106. data/lib/makit/logging.rb +578 -578
  107. data/lib/makit/markdown.rb +75 -75
  108. data/lib/makit/mp/basic_object_mp.rb +17 -17
  109. data/lib/makit/mp/command_mp.rb +13 -13
  110. data/lib/makit/mp/command_request.mp.rb +17 -17
  111. data/lib/makit/mp/project_mp.rb +199 -199
  112. data/lib/makit/mp/string_mp.rb +205 -205
  113. data/lib/makit/nuget.rb +460 -458
  114. data/lib/makit/podman/podman.rb +458 -458
  115. data/lib/makit/podman/podman_service_impl.rb +1081 -1081
  116. data/lib/makit/port.rb +32 -32
  117. data/lib/makit/process.rb +377 -377
  118. data/lib/makit/protoc.rb +112 -112
  119. data/lib/makit/rake/cli.rb +196 -196
  120. data/lib/makit/rake/trace_controller.rb +174 -174
  121. data/lib/makit/rake.rb +81 -81
  122. data/lib/makit/ruby/cli.rb +185 -185
  123. data/lib/makit/ruby.rb +25 -25
  124. data/lib/makit/rubygems.rb +137 -137
  125. data/lib/makit/secrets/azure_key_vault.rb +322 -322
  126. data/lib/makit/secrets/azure_secrets.rb +221 -221
  127. data/lib/makit/secrets/local_secrets.rb +72 -72
  128. data/lib/makit/secrets/secrets_manager.rb +105 -105
  129. data/lib/makit/secrets.rb +96 -96
  130. data/lib/makit/serializer.rb +130 -130
  131. data/lib/makit/services/builder.rb +186 -186
  132. data/lib/makit/services/error_handler.rb +226 -226
  133. data/lib/makit/services/repository_manager.rb +367 -367
  134. data/lib/makit/services/validator.rb +112 -112
  135. data/lib/makit/setup/classlib.rb +101 -101
  136. data/lib/makit/setup/gem.rb +268 -268
  137. data/lib/makit/setup/pages.rb +11 -11
  138. data/lib/makit/setup/razorclasslib.rb +101 -101
  139. data/lib/makit/setup/runner.rb +54 -54
  140. data/lib/makit/setup.rb +5 -5
  141. data/lib/makit/show.rb +110 -110
  142. data/lib/makit/storage.rb +126 -126
  143. data/lib/makit/symbols.rb +175 -175
  144. data/lib/makit/task_info.rb +130 -130
  145. data/lib/makit/tasks/at_exit.rb +15 -15
  146. data/lib/makit/tasks/build.rb +22 -22
  147. data/lib/makit/tasks/bump.rb +7 -7
  148. data/lib/makit/tasks/clean.rb +13 -13
  149. data/lib/makit/tasks/configure.rb +10 -10
  150. data/lib/makit/tasks/format.rb +10 -10
  151. data/lib/makit/tasks/hook_manager.rb +443 -443
  152. data/lib/makit/tasks/info.rb +368 -368
  153. data/lib/makit/tasks/init.rb +49 -49
  154. data/lib/makit/tasks/integrate.rb +60 -60
  155. data/lib/makit/tasks/pull_incoming.rb +13 -13
  156. data/lib/makit/tasks/secrets.rb +7 -7
  157. data/lib/makit/tasks/setup.rb +16 -16
  158. data/lib/makit/tasks/sync.rb +14 -14
  159. data/lib/makit/tasks/tag.rb +27 -27
  160. data/lib/makit/tasks/task_monkey_patch.rb +81 -81
  161. data/lib/makit/tasks/test.rb +22 -22
  162. data/lib/makit/tasks/update.rb +21 -21
  163. data/lib/makit/tasks/version.rb +6 -6
  164. data/lib/makit/tasks.rb +24 -24
  165. data/lib/makit/test_cache.rb +239 -239
  166. data/lib/makit/tree.rb +37 -37
  167. data/lib/makit/v1/configuration/project_service_impl.rb +370 -370
  168. data/lib/makit/v1/git/git_repository_service_impl.rb +295 -295
  169. data/lib/makit/v1/makit.v1_pb.rb +35 -35
  170. data/lib/makit/v1/makit.v1_services_pb.rb +27 -27
  171. data/lib/makit/v1/services/repository_manager_service_impl.rb +572 -572
  172. data/lib/makit/version.rb +661 -661
  173. data/lib/makit/version_util.rb +21 -21
  174. data/lib/makit/wix.rb +95 -95
  175. data/lib/makit/yaml.rb +29 -29
  176. data/lib/makit/zip.rb +17 -17
  177. data/lib/makit copy.rb +44 -44
  178. data/lib/makit.rb +121 -121
  179. metadata +2 -2
@@ -1,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