makit 0.0.139 → 0.0.140
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/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 +40 -40
- 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 +69 -67
- 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 +51 -0
- 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 +385 -385
- data/lib/makit/commands/strategies/base.rb +171 -171
- data/lib/makit/commands/strategies/child_process.rb +1 -1
- data/lib/makit/commands/strategies/synchronous.rb +139 -139
- data/lib/makit/commands.rb +50 -50
- data/lib/makit/configuration/dotnet_project.rb +12 -12
- data/lib/makit/configuration/gitlab_helper.rb +58 -58
- data/lib/makit/configuration/project.rb +168 -168
- data/lib/makit/configuration/rakefile_helper.rb +43 -43
- data/lib/makit/configuration/step.rb +34 -34
- data/lib/makit/configuration/timeout.rb +74 -0
- data/lib/makit/configuration.rb +15 -14
- 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 +140 -140
- 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 +24 -24
- data/lib/makit/files.rb +43 -43
- data/lib/makit/gems.rb +40 -40
- data/lib/makit/git/cli.rb +54 -54
- data/lib/makit/git/repository.rb +90 -90
- data/lib/makit/git.rb +98 -98
- data/lib/makit/gitlab_runner.rb +59 -59
- data/lib/makit/humanize.rb +137 -137
- data/lib/makit/indexer.rb +47 -47
- data/lib/makit/logging/configuration.rb +308 -308
- 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 +565 -565
- 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 +191 -191
- data/lib/makit/nuget.rb +74 -74
- data/lib/makit/port.rb +32 -32
- data/lib/makit/process.rb +163 -163
- data/lib/makit/protoc.rb +107 -107
- data/lib/makit/rake/cli.rb +196 -196
- data/lib/makit/rake.rb +80 -80
- data/lib/makit/ruby/cli.rb +185 -185
- data/lib/makit/ruby.rb +25 -25
- data/lib/makit/secrets.rb +51 -51
- 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 +231 -231
- 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/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 +170 -170
- 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/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/init.rb +49 -49
- data/lib/makit/tasks/integrate.rb +29 -29
- data/lib/makit/tasks/pull_incoming.rb +13 -13
- data/lib/makit/tasks/setup.rb +13 -13
- data/lib/makit/tasks/sync.rb +17 -17
- data/lib/makit/tasks/tag.rb +16 -16
- 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.rb +20 -20
- data/lib/makit/test_cache.rb +239 -239
- data/lib/makit/tree.rb +37 -37
- data/lib/makit/v1/makit.v1_pb.rb +35 -35
- data/lib/makit/v1/makit.v1_services_pb.rb +27 -27
- data/lib/makit/version.rb +99 -99
- 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 +42 -42
- metadata +2 -1
@@ -1,359 +1,359 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "request"
|
4
|
-
|
5
|
-
module Makit
|
6
|
-
module Commands
|
7
|
-
# Factory for creating common command requests.
|
8
|
-
#
|
9
|
-
# This factory provides convenient methods for creating Request objects
|
10
|
-
# for common operations like git commands, bundle operations, rake tasks,
|
11
|
-
# and system utilities.
|
12
|
-
#
|
13
|
-
# @example Creating git commands
|
14
|
-
# request = Factory.git_clone("https://github.com/user/repo.git", "/path/to/clone")
|
15
|
-
# request = Factory.git_status("/path/to/repo")
|
16
|
-
#
|
17
|
-
# @example Creating Ruby commands
|
18
|
-
# request = Factory.bundle_install("/path/to/project")
|
19
|
-
# request = Factory.rake_task("test", "/path/to/project")
|
20
|
-
class Factory
|
21
|
-
# Create a git clone request.
|
22
|
-
#
|
23
|
-
# @param repository_url [String] git repository URL
|
24
|
-
# @param target_directory [String, nil] target directory (optional)
|
25
|
-
# @param options [Hash] additional options
|
26
|
-
# @option options [Integer] :timeout (300) timeout in seconds
|
27
|
-
# @option options [Hash] :metadata additional metadata
|
28
|
-
# @return [Request] git clone request
|
29
|
-
def self.git_clone(repository_url, target_directory = nil, **options)
|
30
|
-
arguments = ["clone", repository_url]
|
31
|
-
arguments << target_directory if target_directory
|
32
|
-
|
33
|
-
Request.new(
|
34
|
-
command: "git",
|
35
|
-
arguments: arguments,
|
36
|
-
timeout: options.fetch(:timeout, 300),
|
37
|
-
metadata: {
|
38
|
-
operation: "git_clone",
|
39
|
-
repository: repository_url,
|
40
|
-
target: target_directory,
|
41
|
-
}.merge(options.fetch(:metadata, {})),
|
42
|
-
)
|
43
|
-
end
|
44
|
-
|
45
|
-
# Create a git pull request.
|
46
|
-
#
|
47
|
-
# @param directory [String] repository directory
|
48
|
-
# @param options [Hash] additional options
|
49
|
-
# @option options [String] :remote ("origin") remote name
|
50
|
-
# @option options [String] :branch (nil) specific branch
|
51
|
-
# @option options [Integer] :timeout (120) timeout in seconds
|
52
|
-
# @return [Request] git pull request
|
53
|
-
def self.git_pull(directory = Dir.pwd, **options)
|
54
|
-
arguments = ["pull"]
|
55
|
-
arguments << options[:remote] if options[:remote]
|
56
|
-
arguments << options[:branch] if options[:branch]
|
57
|
-
|
58
|
-
Request.new(
|
59
|
-
command: "git",
|
60
|
-
arguments: arguments,
|
61
|
-
directory: directory,
|
62
|
-
timeout: options.fetch(:timeout, 120),
|
63
|
-
metadata: {
|
64
|
-
operation: "git_pull",
|
65
|
-
remote: options[:remote] || "origin",
|
66
|
-
branch: options[:branch],
|
67
|
-
}.merge(options.fetch(:metadata, {})),
|
68
|
-
)
|
69
|
-
end
|
70
|
-
|
71
|
-
# Create a git status request.
|
72
|
-
#
|
73
|
-
# @param directory [String] repository directory
|
74
|
-
# @param options [Hash] additional options
|
75
|
-
# @option options [Boolean] :porcelain (false) use porcelain format
|
76
|
-
# @option options [Boolean] :short (false) use short format
|
77
|
-
# @return [Request] git status request
|
78
|
-
def self.git_status(directory = Dir.pwd, **options)
|
79
|
-
arguments = ["status"]
|
80
|
-
arguments << "--porcelain" if options[:porcelain]
|
81
|
-
arguments << "--short" if options[:short]
|
82
|
-
|
83
|
-
Request.new(
|
84
|
-
command: "git",
|
85
|
-
arguments: arguments,
|
86
|
-
directory: directory,
|
87
|
-
metadata: {
|
88
|
-
operation: "git_status",
|
89
|
-
porcelain: options[:porcelain],
|
90
|
-
short: options[:short],
|
91
|
-
}.merge(options.fetch(:metadata, {})),
|
92
|
-
)
|
93
|
-
end
|
94
|
-
|
95
|
-
# Create a git log request.
|
96
|
-
#
|
97
|
-
# @param directory [String] repository directory
|
98
|
-
# @param options [Hash] additional options
|
99
|
-
# @option options [Integer] :limit (nil) limit number of commits
|
100
|
-
# @option options [String] :format (nil) log format
|
101
|
-
# @option options [String] :since (nil) since date/commit
|
102
|
-
# @return [Request] git log request
|
103
|
-
def self.git_log(directory = Dir.pwd, **options)
|
104
|
-
arguments = ["log"]
|
105
|
-
arguments.push("-n", options[:limit].to_s) if options[:limit]
|
106
|
-
arguments.push("--format", options[:format]) if options[:format]
|
107
|
-
arguments.push("--since", options[:since]) if options[:since]
|
108
|
-
|
109
|
-
Request.new(
|
110
|
-
command: "git",
|
111
|
-
arguments: arguments,
|
112
|
-
directory: directory,
|
113
|
-
metadata: {
|
114
|
-
operation: "git_log",
|
115
|
-
limit: options[:limit],
|
116
|
-
format: options[:format],
|
117
|
-
since: options[:since],
|
118
|
-
}.merge(options.fetch(:metadata, {})),
|
119
|
-
)
|
120
|
-
end
|
121
|
-
|
122
|
-
# Create a bundle install request.
|
123
|
-
#
|
124
|
-
# @param directory [String] project directory
|
125
|
-
# @param options [Hash] additional options
|
126
|
-
# @option options [Integer] :jobs (nil) number of parallel jobs
|
127
|
-
# @option options [String] :path (nil) install path
|
128
|
-
# @option options [Boolean] :deployment (false) deployment mode
|
129
|
-
# @option options [Integer] :timeout (300) timeout in seconds
|
130
|
-
# @return [Request] bundle install request
|
131
|
-
def self.bundle_install(directory = Dir.pwd, **options)
|
132
|
-
arguments = ["install"]
|
133
|
-
arguments.push("--jobs", options[:jobs].to_s) if options[:jobs]
|
134
|
-
arguments.push("--path", options[:path]) if options[:path]
|
135
|
-
arguments << "--deployment" if options[:deployment]
|
136
|
-
|
137
|
-
Request.new(
|
138
|
-
command: "bundle",
|
139
|
-
arguments: arguments,
|
140
|
-
directory: directory,
|
141
|
-
timeout: options.fetch(:timeout, 300),
|
142
|
-
metadata: {
|
143
|
-
operation: "bundle_install",
|
144
|
-
jobs: options[:jobs],
|
145
|
-
path: options[:path],
|
146
|
-
deployment: options[:deployment],
|
147
|
-
}.merge(options.fetch(:metadata, {})),
|
148
|
-
)
|
149
|
-
end
|
150
|
-
|
151
|
-
# Create a bundle exec request.
|
152
|
-
#
|
153
|
-
# @param command_string [String] command to execute with bundle exec
|
154
|
-
# @param directory [String] project directory
|
155
|
-
# @param options [Hash] additional options
|
156
|
-
# @option options [Integer] :timeout (120) timeout in seconds
|
157
|
-
# @return [Request] bundle exec request
|
158
|
-
def self.bundle_exec(command_string, directory = Dir.pwd, **options)
|
159
|
-
# Parse the command string to get command and arguments
|
160
|
-
parts = command_string.strip.split(/\s+/)
|
161
|
-
arguments = ["exec"] + parts
|
162
|
-
|
163
|
-
Request.new(
|
164
|
-
command: "bundle",
|
165
|
-
arguments: arguments,
|
166
|
-
directory: directory,
|
167
|
-
timeout: options.fetch(:timeout, 120),
|
168
|
-
metadata: {
|
169
|
-
operation: "bundle_exec",
|
170
|
-
exec_command: command_string,
|
171
|
-
}.merge(options.fetch(:metadata, {})),
|
172
|
-
)
|
173
|
-
end
|
174
|
-
|
175
|
-
# Create a rake task request.
|
176
|
-
#
|
177
|
-
# @param task_name [String] rake task name
|
178
|
-
# @param directory [String] project directory
|
179
|
-
# @param options [Hash] additional options
|
180
|
-
# @option options [Array<String>] :arguments additional task arguments
|
181
|
-
# @option options [Hash] :environment environment variables
|
182
|
-
# @option options [Integer] :timeout (300) timeout in seconds
|
183
|
-
# @return [Request] rake task request
|
184
|
-
def self.rake_task(task_name, directory = Dir.pwd, **options)
|
185
|
-
arguments = [task_name]
|
186
|
-
arguments.concat(options[:arguments]) if options[:arguments]
|
187
|
-
|
188
|
-
Request.new(
|
189
|
-
command: "rake",
|
190
|
-
arguments: arguments,
|
191
|
-
directory: directory,
|
192
|
-
environment: options[:environment] || {},
|
193
|
-
timeout: options.fetch(:timeout, 300),
|
194
|
-
metadata: {
|
195
|
-
operation: "rake_task",
|
196
|
-
task: task_name,
|
197
|
-
arguments: options[:arguments],
|
198
|
-
}.merge(options.fetch(:metadata, {})),
|
199
|
-
)
|
200
|
-
end
|
201
|
-
|
202
|
-
# Create a gem build request.
|
203
|
-
#
|
204
|
-
# @param gemspec_file [String, nil] gemspec file (optional, will auto-detect)
|
205
|
-
# @param directory [String] project directory
|
206
|
-
# @param options [Hash] additional options
|
207
|
-
# @option options [Integer] :timeout (120) timeout in seconds
|
208
|
-
# @return [Request] gem build request
|
209
|
-
def self.gem_build(gemspec_file = nil, directory = Dir.pwd, **options)
|
210
|
-
arguments = ["build"]
|
211
|
-
arguments << gemspec_file if gemspec_file
|
212
|
-
|
213
|
-
Request.new(
|
214
|
-
command: "gem",
|
215
|
-
arguments: arguments,
|
216
|
-
directory: directory,
|
217
|
-
timeout: options.fetch(:timeout, 120),
|
218
|
-
metadata: {
|
219
|
-
operation: "gem_build",
|
220
|
-
gemspec: gemspec_file,
|
221
|
-
}.merge(options.fetch(:metadata, {})),
|
222
|
-
)
|
223
|
-
end
|
224
|
-
|
225
|
-
# Create a gem install request.
|
226
|
-
#
|
227
|
-
# @param gem_name [String] gem name or gem file
|
228
|
-
# @param options [Hash] additional options
|
229
|
-
# @option options [String] :version specific version
|
230
|
-
# @option options [Boolean] :local (false) install from local file
|
231
|
-
# @option options [String] :source gem source
|
232
|
-
# @option options [Integer] :timeout (180) timeout in seconds
|
233
|
-
# @return [Request] gem install request
|
234
|
-
def self.gem_install(gem_name, **options)
|
235
|
-
arguments = ["install", gem_name]
|
236
|
-
arguments.push("--version", options[:version]) if options[:version]
|
237
|
-
arguments << "--local" if options[:local]
|
238
|
-
arguments.push("--source", options[:source]) if options[:source]
|
239
|
-
|
240
|
-
Request.new(
|
241
|
-
command: "gem",
|
242
|
-
arguments: arguments,
|
243
|
-
timeout: options.fetch(:timeout, 180),
|
244
|
-
metadata: {
|
245
|
-
operation: "gem_install",
|
246
|
-
gem: gem_name,
|
247
|
-
version: options[:version],
|
248
|
-
local: options[:local],
|
249
|
-
source: options[:source],
|
250
|
-
}.merge(options.fetch(:metadata, {})),
|
251
|
-
)
|
252
|
-
end
|
253
|
-
|
254
|
-
# Create a Ruby script execution request.
|
255
|
-
#
|
256
|
-
# @param script_file [String] Ruby script file to execute
|
257
|
-
# @param directory [String] working directory
|
258
|
-
# @param options [Hash] additional options
|
259
|
-
# @option options [Array<String>] :arguments script arguments
|
260
|
-
# @option options [Hash] :environment environment variables
|
261
|
-
# @option options [Integer] :timeout (120) timeout in seconds
|
262
|
-
# @return [Request] Ruby script execution request
|
263
|
-
def self.ruby_script(script_file, directory = Dir.pwd, **options)
|
264
|
-
arguments = [script_file]
|
265
|
-
arguments.concat(options[:arguments]) if options[:arguments]
|
266
|
-
|
267
|
-
Request.new(
|
268
|
-
command: "ruby",
|
269
|
-
arguments: arguments,
|
270
|
-
directory: directory,
|
271
|
-
environment: options[:environment] || {},
|
272
|
-
timeout: options.fetch(:timeout, 120),
|
273
|
-
metadata: {
|
274
|
-
operation: "ruby_script",
|
275
|
-
script: script_file,
|
276
|
-
arguments: options[:arguments],
|
277
|
-
}.merge(options.fetch(:metadata, {})),
|
278
|
-
)
|
279
|
-
end
|
280
|
-
|
281
|
-
# Create a system command request with validation.
|
282
|
-
#
|
283
|
-
# @param command [String] system command
|
284
|
-
# @param arguments [Array<String>] command arguments
|
285
|
-
# @param options [Hash] additional options
|
286
|
-
# @option options [String] :directory working directory
|
287
|
-
# @option options [Hash] :environment environment variables
|
288
|
-
# @option options [Integer] :timeout (60) timeout in seconds
|
289
|
-
# @return [Request] system command request
|
290
|
-
def self.system_command(command, arguments = [], **options)
|
291
|
-
Request.new(
|
292
|
-
command: command,
|
293
|
-
arguments: Array(arguments),
|
294
|
-
directory: options[:directory] || Dir.pwd,
|
295
|
-
environment: options[:environment] || {},
|
296
|
-
timeout: options.fetch(:timeout, 60),
|
297
|
-
metadata: {
|
298
|
-
operation: "system_command",
|
299
|
-
system_command: command,
|
300
|
-
}.merge(options.fetch(:metadata, {})),
|
301
|
-
)
|
302
|
-
end
|
303
|
-
|
304
|
-
# Create a dotnet CLI request.
|
305
|
-
#
|
306
|
-
# @param subcommand [String] dotnet subcommand (build, test, run, etc.)
|
307
|
-
# @param directory [String] project directory
|
308
|
-
# @param options [Hash] additional options
|
309
|
-
# @option options [Array<String>] :arguments additional arguments
|
310
|
-
# @option options [String] :configuration (nil) build configuration
|
311
|
-
# @option options [String] :framework (nil) target framework
|
312
|
-
# @option options [Integer] :timeout (300) timeout in seconds
|
313
|
-
# @return [Request] dotnet CLI request
|
314
|
-
def self.dotnet_command(subcommand, directory = Dir.pwd, **options)
|
315
|
-
arguments = [subcommand]
|
316
|
-
arguments.concat(options[:arguments]) if options[:arguments]
|
317
|
-
arguments.push("--configuration", options[:configuration]) if options[:configuration]
|
318
|
-
arguments.push("--framework", options[:framework]) if options[:framework]
|
319
|
-
|
320
|
-
Request.new(
|
321
|
-
command: "dotnet",
|
322
|
-
arguments: arguments,
|
323
|
-
directory: directory,
|
324
|
-
timeout: options.fetch(:timeout, 300),
|
325
|
-
metadata: {
|
326
|
-
operation: "dotnet_#{subcommand}",
|
327
|
-
subcommand: subcommand,
|
328
|
-
configuration: options[:configuration],
|
329
|
-
framework: options[:framework],
|
330
|
-
}.merge(options.fetch(:metadata, {})),
|
331
|
-
)
|
332
|
-
end
|
333
|
-
|
334
|
-
# Create a Node.js/npm command request.
|
335
|
-
#
|
336
|
-
# @param subcommand [String] npm subcommand (install, test, run, etc.)
|
337
|
-
# @param directory [String] project directory
|
338
|
-
# @param options [Hash] additional options
|
339
|
-
# @option options [Array<String>] :arguments additional arguments
|
340
|
-
# @option options [Integer] :timeout (300) timeout in seconds
|
341
|
-
# @return [Request] npm command request
|
342
|
-
def self.npm_command(subcommand, directory = Dir.pwd, **options)
|
343
|
-
arguments = [subcommand]
|
344
|
-
arguments.concat(options[:arguments]) if options[:arguments]
|
345
|
-
|
346
|
-
Request.new(
|
347
|
-
command: "npm",
|
348
|
-
arguments: arguments,
|
349
|
-
directory: directory,
|
350
|
-
timeout: options.fetch(:timeout, 300),
|
351
|
-
metadata: {
|
352
|
-
operation: "npm_#{subcommand}",
|
353
|
-
subcommand: subcommand,
|
354
|
-
}.merge(options.fetch(:metadata, {})),
|
355
|
-
)
|
356
|
-
end
|
357
|
-
end
|
358
|
-
end
|
359
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "request"
|
4
|
+
|
5
|
+
module Makit
|
6
|
+
module Commands
|
7
|
+
# Factory for creating common command requests.
|
8
|
+
#
|
9
|
+
# This factory provides convenient methods for creating Request objects
|
10
|
+
# for common operations like git commands, bundle operations, rake tasks,
|
11
|
+
# and system utilities.
|
12
|
+
#
|
13
|
+
# @example Creating git commands
|
14
|
+
# request = Factory.git_clone("https://github.com/user/repo.git", "/path/to/clone")
|
15
|
+
# request = Factory.git_status("/path/to/repo")
|
16
|
+
#
|
17
|
+
# @example Creating Ruby commands
|
18
|
+
# request = Factory.bundle_install("/path/to/project")
|
19
|
+
# request = Factory.rake_task("test", "/path/to/project")
|
20
|
+
class Factory
|
21
|
+
# Create a git clone request.
|
22
|
+
#
|
23
|
+
# @param repository_url [String] git repository URL
|
24
|
+
# @param target_directory [String, nil] target directory (optional)
|
25
|
+
# @param options [Hash] additional options
|
26
|
+
# @option options [Integer] :timeout (300) timeout in seconds
|
27
|
+
# @option options [Hash] :metadata additional metadata
|
28
|
+
# @return [Request] git clone request
|
29
|
+
def self.git_clone(repository_url, target_directory = nil, **options)
|
30
|
+
arguments = ["clone", repository_url]
|
31
|
+
arguments << target_directory if target_directory
|
32
|
+
|
33
|
+
Request.new(
|
34
|
+
command: "git",
|
35
|
+
arguments: arguments,
|
36
|
+
timeout: options.fetch(:timeout, 300),
|
37
|
+
metadata: {
|
38
|
+
operation: "git_clone",
|
39
|
+
repository: repository_url,
|
40
|
+
target: target_directory,
|
41
|
+
}.merge(options.fetch(:metadata, {})),
|
42
|
+
)
|
43
|
+
end
|
44
|
+
|
45
|
+
# Create a git pull request.
|
46
|
+
#
|
47
|
+
# @param directory [String] repository directory
|
48
|
+
# @param options [Hash] additional options
|
49
|
+
# @option options [String] :remote ("origin") remote name
|
50
|
+
# @option options [String] :branch (nil) specific branch
|
51
|
+
# @option options [Integer] :timeout (120) timeout in seconds
|
52
|
+
# @return [Request] git pull request
|
53
|
+
def self.git_pull(directory = Dir.pwd, **options)
|
54
|
+
arguments = ["pull"]
|
55
|
+
arguments << options[:remote] if options[:remote]
|
56
|
+
arguments << options[:branch] if options[:branch]
|
57
|
+
|
58
|
+
Request.new(
|
59
|
+
command: "git",
|
60
|
+
arguments: arguments,
|
61
|
+
directory: directory,
|
62
|
+
timeout: options.fetch(:timeout, 120),
|
63
|
+
metadata: {
|
64
|
+
operation: "git_pull",
|
65
|
+
remote: options[:remote] || "origin",
|
66
|
+
branch: options[:branch],
|
67
|
+
}.merge(options.fetch(:metadata, {})),
|
68
|
+
)
|
69
|
+
end
|
70
|
+
|
71
|
+
# Create a git status request.
|
72
|
+
#
|
73
|
+
# @param directory [String] repository directory
|
74
|
+
# @param options [Hash] additional options
|
75
|
+
# @option options [Boolean] :porcelain (false) use porcelain format
|
76
|
+
# @option options [Boolean] :short (false) use short format
|
77
|
+
# @return [Request] git status request
|
78
|
+
def self.git_status(directory = Dir.pwd, **options)
|
79
|
+
arguments = ["status"]
|
80
|
+
arguments << "--porcelain" if options[:porcelain]
|
81
|
+
arguments << "--short" if options[:short]
|
82
|
+
|
83
|
+
Request.new(
|
84
|
+
command: "git",
|
85
|
+
arguments: arguments,
|
86
|
+
directory: directory,
|
87
|
+
metadata: {
|
88
|
+
operation: "git_status",
|
89
|
+
porcelain: options[:porcelain],
|
90
|
+
short: options[:short],
|
91
|
+
}.merge(options.fetch(:metadata, {})),
|
92
|
+
)
|
93
|
+
end
|
94
|
+
|
95
|
+
# Create a git log request.
|
96
|
+
#
|
97
|
+
# @param directory [String] repository directory
|
98
|
+
# @param options [Hash] additional options
|
99
|
+
# @option options [Integer] :limit (nil) limit number of commits
|
100
|
+
# @option options [String] :format (nil) log format
|
101
|
+
# @option options [String] :since (nil) since date/commit
|
102
|
+
# @return [Request] git log request
|
103
|
+
def self.git_log(directory = Dir.pwd, **options)
|
104
|
+
arguments = ["log"]
|
105
|
+
arguments.push("-n", options[:limit].to_s) if options[:limit]
|
106
|
+
arguments.push("--format", options[:format]) if options[:format]
|
107
|
+
arguments.push("--since", options[:since]) if options[:since]
|
108
|
+
|
109
|
+
Request.new(
|
110
|
+
command: "git",
|
111
|
+
arguments: arguments,
|
112
|
+
directory: directory,
|
113
|
+
metadata: {
|
114
|
+
operation: "git_log",
|
115
|
+
limit: options[:limit],
|
116
|
+
format: options[:format],
|
117
|
+
since: options[:since],
|
118
|
+
}.merge(options.fetch(:metadata, {})),
|
119
|
+
)
|
120
|
+
end
|
121
|
+
|
122
|
+
# Create a bundle install request.
|
123
|
+
#
|
124
|
+
# @param directory [String] project directory
|
125
|
+
# @param options [Hash] additional options
|
126
|
+
# @option options [Integer] :jobs (nil) number of parallel jobs
|
127
|
+
# @option options [String] :path (nil) install path
|
128
|
+
# @option options [Boolean] :deployment (false) deployment mode
|
129
|
+
# @option options [Integer] :timeout (300) timeout in seconds
|
130
|
+
# @return [Request] bundle install request
|
131
|
+
def self.bundle_install(directory = Dir.pwd, **options)
|
132
|
+
arguments = ["install"]
|
133
|
+
arguments.push("--jobs", options[:jobs].to_s) if options[:jobs]
|
134
|
+
arguments.push("--path", options[:path]) if options[:path]
|
135
|
+
arguments << "--deployment" if options[:deployment]
|
136
|
+
|
137
|
+
Request.new(
|
138
|
+
command: "bundle",
|
139
|
+
arguments: arguments,
|
140
|
+
directory: directory,
|
141
|
+
timeout: options.fetch(:timeout, 300),
|
142
|
+
metadata: {
|
143
|
+
operation: "bundle_install",
|
144
|
+
jobs: options[:jobs],
|
145
|
+
path: options[:path],
|
146
|
+
deployment: options[:deployment],
|
147
|
+
}.merge(options.fetch(:metadata, {})),
|
148
|
+
)
|
149
|
+
end
|
150
|
+
|
151
|
+
# Create a bundle exec request.
|
152
|
+
#
|
153
|
+
# @param command_string [String] command to execute with bundle exec
|
154
|
+
# @param directory [String] project directory
|
155
|
+
# @param options [Hash] additional options
|
156
|
+
# @option options [Integer] :timeout (120) timeout in seconds
|
157
|
+
# @return [Request] bundle exec request
|
158
|
+
def self.bundle_exec(command_string, directory = Dir.pwd, **options)
|
159
|
+
# Parse the command string to get command and arguments
|
160
|
+
parts = command_string.strip.split(/\s+/)
|
161
|
+
arguments = ["exec"] + parts
|
162
|
+
|
163
|
+
Request.new(
|
164
|
+
command: "bundle",
|
165
|
+
arguments: arguments,
|
166
|
+
directory: directory,
|
167
|
+
timeout: options.fetch(:timeout, 120),
|
168
|
+
metadata: {
|
169
|
+
operation: "bundle_exec",
|
170
|
+
exec_command: command_string,
|
171
|
+
}.merge(options.fetch(:metadata, {})),
|
172
|
+
)
|
173
|
+
end
|
174
|
+
|
175
|
+
# Create a rake task request.
|
176
|
+
#
|
177
|
+
# @param task_name [String] rake task name
|
178
|
+
# @param directory [String] project directory
|
179
|
+
# @param options [Hash] additional options
|
180
|
+
# @option options [Array<String>] :arguments additional task arguments
|
181
|
+
# @option options [Hash] :environment environment variables
|
182
|
+
# @option options [Integer] :timeout (300) timeout in seconds
|
183
|
+
# @return [Request] rake task request
|
184
|
+
def self.rake_task(task_name, directory = Dir.pwd, **options)
|
185
|
+
arguments = [task_name]
|
186
|
+
arguments.concat(options[:arguments]) if options[:arguments]
|
187
|
+
|
188
|
+
Request.new(
|
189
|
+
command: "rake",
|
190
|
+
arguments: arguments,
|
191
|
+
directory: directory,
|
192
|
+
environment: options[:environment] || {},
|
193
|
+
timeout: options.fetch(:timeout, 300),
|
194
|
+
metadata: {
|
195
|
+
operation: "rake_task",
|
196
|
+
task: task_name,
|
197
|
+
arguments: options[:arguments],
|
198
|
+
}.merge(options.fetch(:metadata, {})),
|
199
|
+
)
|
200
|
+
end
|
201
|
+
|
202
|
+
# Create a gem build request.
|
203
|
+
#
|
204
|
+
# @param gemspec_file [String, nil] gemspec file (optional, will auto-detect)
|
205
|
+
# @param directory [String] project directory
|
206
|
+
# @param options [Hash] additional options
|
207
|
+
# @option options [Integer] :timeout (120) timeout in seconds
|
208
|
+
# @return [Request] gem build request
|
209
|
+
def self.gem_build(gemspec_file = nil, directory = Dir.pwd, **options)
|
210
|
+
arguments = ["build"]
|
211
|
+
arguments << gemspec_file if gemspec_file
|
212
|
+
|
213
|
+
Request.new(
|
214
|
+
command: "gem",
|
215
|
+
arguments: arguments,
|
216
|
+
directory: directory,
|
217
|
+
timeout: options.fetch(:timeout, 120),
|
218
|
+
metadata: {
|
219
|
+
operation: "gem_build",
|
220
|
+
gemspec: gemspec_file,
|
221
|
+
}.merge(options.fetch(:metadata, {})),
|
222
|
+
)
|
223
|
+
end
|
224
|
+
|
225
|
+
# Create a gem install request.
|
226
|
+
#
|
227
|
+
# @param gem_name [String] gem name or gem file
|
228
|
+
# @param options [Hash] additional options
|
229
|
+
# @option options [String] :version specific version
|
230
|
+
# @option options [Boolean] :local (false) install from local file
|
231
|
+
# @option options [String] :source gem source
|
232
|
+
# @option options [Integer] :timeout (180) timeout in seconds
|
233
|
+
# @return [Request] gem install request
|
234
|
+
def self.gem_install(gem_name, **options)
|
235
|
+
arguments = ["install", gem_name]
|
236
|
+
arguments.push("--version", options[:version]) if options[:version]
|
237
|
+
arguments << "--local" if options[:local]
|
238
|
+
arguments.push("--source", options[:source]) if options[:source]
|
239
|
+
|
240
|
+
Request.new(
|
241
|
+
command: "gem",
|
242
|
+
arguments: arguments,
|
243
|
+
timeout: options.fetch(:timeout, 180),
|
244
|
+
metadata: {
|
245
|
+
operation: "gem_install",
|
246
|
+
gem: gem_name,
|
247
|
+
version: options[:version],
|
248
|
+
local: options[:local],
|
249
|
+
source: options[:source],
|
250
|
+
}.merge(options.fetch(:metadata, {})),
|
251
|
+
)
|
252
|
+
end
|
253
|
+
|
254
|
+
# Create a Ruby script execution request.
|
255
|
+
#
|
256
|
+
# @param script_file [String] Ruby script file to execute
|
257
|
+
# @param directory [String] working directory
|
258
|
+
# @param options [Hash] additional options
|
259
|
+
# @option options [Array<String>] :arguments script arguments
|
260
|
+
# @option options [Hash] :environment environment variables
|
261
|
+
# @option options [Integer] :timeout (120) timeout in seconds
|
262
|
+
# @return [Request] Ruby script execution request
|
263
|
+
def self.ruby_script(script_file, directory = Dir.pwd, **options)
|
264
|
+
arguments = [script_file]
|
265
|
+
arguments.concat(options[:arguments]) if options[:arguments]
|
266
|
+
|
267
|
+
Request.new(
|
268
|
+
command: "ruby",
|
269
|
+
arguments: arguments,
|
270
|
+
directory: directory,
|
271
|
+
environment: options[:environment] || {},
|
272
|
+
timeout: options.fetch(:timeout, 120),
|
273
|
+
metadata: {
|
274
|
+
operation: "ruby_script",
|
275
|
+
script: script_file,
|
276
|
+
arguments: options[:arguments],
|
277
|
+
}.merge(options.fetch(:metadata, {})),
|
278
|
+
)
|
279
|
+
end
|
280
|
+
|
281
|
+
# Create a system command request with validation.
|
282
|
+
#
|
283
|
+
# @param command [String] system command
|
284
|
+
# @param arguments [Array<String>] command arguments
|
285
|
+
# @param options [Hash] additional options
|
286
|
+
# @option options [String] :directory working directory
|
287
|
+
# @option options [Hash] :environment environment variables
|
288
|
+
# @option options [Integer] :timeout (60) timeout in seconds
|
289
|
+
# @return [Request] system command request
|
290
|
+
def self.system_command(command, arguments = [], **options)
|
291
|
+
Request.new(
|
292
|
+
command: command,
|
293
|
+
arguments: Array(arguments),
|
294
|
+
directory: options[:directory] || Dir.pwd,
|
295
|
+
environment: options[:environment] || {},
|
296
|
+
timeout: options.fetch(:timeout, 60),
|
297
|
+
metadata: {
|
298
|
+
operation: "system_command",
|
299
|
+
system_command: command,
|
300
|
+
}.merge(options.fetch(:metadata, {})),
|
301
|
+
)
|
302
|
+
end
|
303
|
+
|
304
|
+
# Create a dotnet CLI request.
|
305
|
+
#
|
306
|
+
# @param subcommand [String] dotnet subcommand (build, test, run, etc.)
|
307
|
+
# @param directory [String] project directory
|
308
|
+
# @param options [Hash] additional options
|
309
|
+
# @option options [Array<String>] :arguments additional arguments
|
310
|
+
# @option options [String] :configuration (nil) build configuration
|
311
|
+
# @option options [String] :framework (nil) target framework
|
312
|
+
# @option options [Integer] :timeout (300) timeout in seconds
|
313
|
+
# @return [Request] dotnet CLI request
|
314
|
+
def self.dotnet_command(subcommand, directory = Dir.pwd, **options)
|
315
|
+
arguments = [subcommand]
|
316
|
+
arguments.concat(options[:arguments]) if options[:arguments]
|
317
|
+
arguments.push("--configuration", options[:configuration]) if options[:configuration]
|
318
|
+
arguments.push("--framework", options[:framework]) if options[:framework]
|
319
|
+
|
320
|
+
Request.new(
|
321
|
+
command: "dotnet",
|
322
|
+
arguments: arguments,
|
323
|
+
directory: directory,
|
324
|
+
timeout: options.fetch(:timeout, 300),
|
325
|
+
metadata: {
|
326
|
+
operation: "dotnet_#{subcommand}",
|
327
|
+
subcommand: subcommand,
|
328
|
+
configuration: options[:configuration],
|
329
|
+
framework: options[:framework],
|
330
|
+
}.merge(options.fetch(:metadata, {})),
|
331
|
+
)
|
332
|
+
end
|
333
|
+
|
334
|
+
# Create a Node.js/npm command request.
|
335
|
+
#
|
336
|
+
# @param subcommand [String] npm subcommand (install, test, run, etc.)
|
337
|
+
# @param directory [String] project directory
|
338
|
+
# @param options [Hash] additional options
|
339
|
+
# @option options [Array<String>] :arguments additional arguments
|
340
|
+
# @option options [Integer] :timeout (300) timeout in seconds
|
341
|
+
# @return [Request] npm command request
|
342
|
+
def self.npm_command(subcommand, directory = Dir.pwd, **options)
|
343
|
+
arguments = [subcommand]
|
344
|
+
arguments.concat(options[:arguments]) if options[:arguments]
|
345
|
+
|
346
|
+
Request.new(
|
347
|
+
command: "npm",
|
348
|
+
arguments: arguments,
|
349
|
+
directory: directory,
|
350
|
+
timeout: options.fetch(:timeout, 300),
|
351
|
+
metadata: {
|
352
|
+
operation: "npm_#{subcommand}",
|
353
|
+
subcommand: subcommand,
|
354
|
+
}.merge(options.fetch(:metadata, {})),
|
355
|
+
)
|
356
|
+
end
|
357
|
+
end
|
358
|
+
end
|
359
|
+
end
|