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.
- checksums.yaml +4 -4
- data/README.md +41 -41
- data/exe/makit +5 -5
- data/lib/makit/apache.rb +28 -28
- data/lib/makit/auto.rb +48 -48
- data/lib/makit/azure/blob_storage.rb +257 -257
- data/lib/makit/azure/cli.rb +284 -284
- data/lib/makit/cli/base.rb +17 -17
- data/lib/makit/cli/build_commands.rb +500 -500
- data/lib/makit/cli/generators/base_generator.rb +74 -74
- data/lib/makit/cli/generators/dotnet_generator.rb +50 -50
- data/lib/makit/cli/generators/generator_factory.rb +49 -49
- data/lib/makit/cli/generators/node_generator.rb +50 -50
- data/lib/makit/cli/generators/ruby_generator.rb +77 -77
- data/lib/makit/cli/generators/rust_generator.rb +50 -50
- data/lib/makit/cli/generators/templates/dotnet_templates.rb +167 -167
- data/lib/makit/cli/generators/templates/node_templates.rb +161 -161
- data/lib/makit/cli/generators/templates/ruby/gemfile.rb +26 -26
- data/lib/makit/cli/generators/templates/ruby/gemspec.rb +41 -41
- data/lib/makit/cli/generators/templates/ruby/main_lib.rb +33 -33
- data/lib/makit/cli/generators/templates/ruby/rakefile.rb +35 -35
- data/lib/makit/cli/generators/templates/ruby/readme.rb +63 -63
- data/lib/makit/cli/generators/templates/ruby/test.rb +39 -39
- data/lib/makit/cli/generators/templates/ruby/test_helper.rb +29 -29
- data/lib/makit/cli/generators/templates/ruby/version.rb +29 -29
- data/lib/makit/cli/generators/templates/rust_templates.rb +128 -128
- data/lib/makit/cli/main.rb +78 -78
- data/lib/makit/cli/pipeline_commands.rb +311 -311
- data/lib/makit/cli/project_commands.rb +868 -868
- data/lib/makit/cli/repository_commands.rb +661 -661
- data/lib/makit/cli/strategy_commands.rb +207 -207
- data/lib/makit/cli/utility_commands.rb +521 -521
- data/lib/makit/commands/factory.rb +359 -359
- data/lib/makit/commands/middleware/base.rb +73 -73
- data/lib/makit/commands/middleware/cache.rb +248 -248
- data/lib/makit/commands/middleware/command_logger.rb +312 -312
- data/lib/makit/commands/middleware/validator.rb +269 -269
- data/lib/makit/commands/request.rb +316 -316
- data/lib/makit/commands/result.rb +323 -323
- data/lib/makit/commands/runner.rb +386 -386
- data/lib/makit/commands/strategies/base.rb +171 -171
- data/lib/makit/commands/strategies/child_process.rb +162 -162
- data/lib/makit/commands/strategies/factory.rb +136 -136
- data/lib/makit/commands/strategies/synchronous.rb +139 -139
- data/lib/makit/commands.rb +50 -50
- data/lib/makit/configuration/dotnet_project.rb +48 -48
- data/lib/makit/configuration/gitlab_helper.rb +61 -61
- data/lib/makit/configuration/project.rb +292 -292
- data/lib/makit/configuration/rakefile_helper.rb +43 -43
- data/lib/makit/configuration/step.rb +34 -34
- data/lib/makit/configuration/timeout.rb +74 -74
- data/lib/makit/configuration.rb +21 -21
- data/lib/makit/content/default_gitignore.rb +7 -7
- data/lib/makit/content/default_gitignore.txt +225 -225
- data/lib/makit/content/default_rakefile.rb +13 -13
- data/lib/makit/content/gem_rakefile.rb +16 -16
- data/lib/makit/context.rb +1 -1
- data/lib/makit/data.rb +49 -49
- data/lib/makit/directories.rb +170 -170
- data/lib/makit/directory.rb +262 -262
- data/lib/makit/docs/files.rb +89 -89
- data/lib/makit/docs/rake.rb +102 -102
- data/lib/makit/dotnet/cli.rb +69 -69
- data/lib/makit/dotnet/project.rb +217 -217
- data/lib/makit/dotnet/solution.rb +38 -38
- data/lib/makit/dotnet/solution_classlib.rb +239 -239
- data/lib/makit/dotnet/solution_console.rb +264 -264
- data/lib/makit/dotnet/solution_maui.rb +354 -354
- data/lib/makit/dotnet/solution_wasm.rb +275 -275
- data/lib/makit/dotnet/solution_wpf.rb +304 -304
- data/lib/makit/dotnet.rb +102 -102
- data/lib/makit/email.rb +90 -90
- data/lib/makit/environment.rb +142 -142
- data/lib/makit/examples/runner.rb +370 -370
- data/lib/makit/exceptions.rb +45 -45
- data/lib/makit/fileinfo.rb +32 -32
- data/lib/makit/files.rb +43 -43
- data/lib/makit/gems.rb +40 -40
- data/lib/makit/git/cli.rb +78 -54
- data/lib/makit/git/repository.rb +100 -100
- data/lib/makit/git.rb +104 -104
- data/lib/makit/gitlab/pipeline.rb +857 -857
- data/lib/makit/gitlab/pipeline_service_impl.rb +1535 -1535
- data/lib/makit/gitlab_runner.rb +59 -59
- data/lib/makit/humanize.rb +218 -218
- data/lib/makit/indexer.rb +47 -47
- data/lib/makit/io/filesystem.rb +111 -111
- data/lib/makit/io/filesystem_service_impl.rb +337 -337
- data/lib/makit/lint.rb +212 -212
- data/lib/makit/logging/configuration.rb +309 -309
- data/lib/makit/logging/format_registry.rb +84 -84
- data/lib/makit/logging/formatters/base.rb +39 -39
- data/lib/makit/logging/formatters/console_formatter.rb +140 -140
- data/lib/makit/logging/formatters/json_formatter.rb +65 -65
- data/lib/makit/logging/formatters/plain_text_formatter.rb +71 -71
- data/lib/makit/logging/formatters/text_formatter.rb +64 -64
- data/lib/makit/logging/log_request.rb +119 -119
- data/lib/makit/logging/logger.rb +199 -199
- data/lib/makit/logging/sinks/base.rb +91 -91
- data/lib/makit/logging/sinks/console.rb +72 -72
- data/lib/makit/logging/sinks/file_sink.rb +92 -92
- data/lib/makit/logging/sinks/structured.rb +123 -123
- data/lib/makit/logging/sinks/unified_file_sink.rb +296 -296
- data/lib/makit/logging.rb +578 -578
- data/lib/makit/markdown.rb +75 -75
- data/lib/makit/mp/basic_object_mp.rb +17 -17
- data/lib/makit/mp/command_mp.rb +13 -13
- data/lib/makit/mp/command_request.mp.rb +17 -17
- data/lib/makit/mp/project_mp.rb +199 -199
- data/lib/makit/mp/string_mp.rb +205 -205
- data/lib/makit/nuget.rb +74 -74
- data/lib/makit/podman/podman.rb +458 -458
- data/lib/makit/podman/podman_service_impl.rb +1081 -1081
- data/lib/makit/port.rb +32 -32
- data/lib/makit/process.rb +377 -377
- data/lib/makit/protoc.rb +112 -112
- data/lib/makit/rake/cli.rb +196 -196
- data/lib/makit/rake/trace_controller.rb +174 -174
- data/lib/makit/rake.rb +81 -81
- data/lib/makit/ruby/cli.rb +185 -185
- data/lib/makit/ruby.rb +25 -25
- data/lib/makit/rubygems.rb +137 -0
- data/lib/makit/secrets/azure_key_vault.rb +322 -322
- data/lib/makit/secrets/azure_secrets.rb +183 -183
- data/lib/makit/secrets/local_secrets.rb +72 -72
- data/lib/makit/secrets/secrets_manager.rb +105 -105
- data/lib/makit/secrets.rb +16 -16
- data/lib/makit/serializer.rb +130 -130
- data/lib/makit/services/builder.rb +186 -186
- data/lib/makit/services/error_handler.rb +226 -226
- data/lib/makit/services/repository_manager.rb +367 -367
- data/lib/makit/services/validator.rb +112 -112
- data/lib/makit/setup/classlib.rb +101 -101
- data/lib/makit/setup/gem.rb +268 -268
- data/lib/makit/setup/pages.rb +11 -11
- data/lib/makit/setup/razorclasslib.rb +101 -101
- data/lib/makit/setup/runner.rb +54 -54
- data/lib/makit/setup.rb +5 -5
- data/lib/makit/show.rb +110 -110
- data/lib/makit/storage.rb +126 -126
- data/lib/makit/symbols.rb +175 -175
- data/lib/makit/task_info.rb +130 -130
- data/lib/makit/tasks/at_exit.rb +15 -15
- data/lib/makit/tasks/build.rb +22 -22
- data/lib/makit/tasks/bump.rb +7 -7
- data/lib/makit/tasks/clean.rb +13 -13
- data/lib/makit/tasks/configure.rb +10 -10
- data/lib/makit/tasks/format.rb +10 -10
- data/lib/makit/tasks/hook_manager.rb +443 -443
- data/lib/makit/tasks/info.rb +368 -368
- data/lib/makit/tasks/init.rb +49 -49
- data/lib/makit/tasks/integrate.rb +60 -56
- data/lib/makit/tasks/pull_incoming.rb +13 -13
- data/lib/makit/tasks/secrets.rb +7 -7
- data/lib/makit/tasks/setup.rb +16 -16
- data/lib/makit/tasks/sync.rb +14 -17
- data/lib/makit/tasks/tag.rb +27 -27
- data/lib/makit/tasks/task_monkey_patch.rb +81 -81
- data/lib/makit/tasks/test.rb +22 -22
- data/lib/makit/tasks/update.rb +18 -18
- data/lib/makit/tasks/version.rb +6 -6
- data/lib/makit/tasks.rb +24 -24
- data/lib/makit/test_cache.rb +239 -239
- data/lib/makit/tree.rb +37 -37
- data/lib/makit/v1/configuration/project_service_impl.rb +370 -370
- data/lib/makit/v1/git/git_repository_service_impl.rb +295 -295
- data/lib/makit/v1/makit.v1_pb.rb +35 -35
- data/lib/makit/v1/makit.v1_services_pb.rb +27 -27
- data/lib/makit/v1/services/repository_manager_service_impl.rb +572 -572
- data/lib/makit/version.rb +661 -503
- data/lib/makit/version_util.rb +21 -21
- data/lib/makit/wix.rb +95 -95
- data/lib/makit/yaml.rb +29 -29
- data/lib/makit/zip.rb +17 -17
- data/lib/makit copy.rb +44 -44
- data/lib/makit.rb +115 -114
- 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
|