makit 0.0.111 → 0.0.112
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/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 +62 -62
- data/lib/makit/cli/project_commands.rb +868 -868
- data/lib/makit/cli/repository_commands.rb +661 -661
- 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 +320 -323
- data/lib/makit/commands/middleware/unified_logger.rb +243 -243
- data/lib/makit/commands/middleware/validator.rb +269 -269
- data/lib/makit/commands/request.rb +254 -254
- data/lib/makit/commands/result.rb +323 -323
- data/lib/makit/commands/runner.rb +337 -317
- data/lib/makit/commands/strategies/base.rb +160 -160
- data/lib/makit/commands/strategies/synchronous.rb +134 -134
- data/lib/makit/commands.rb +51 -42
- data/lib/makit/configuration/gitlab_helper.rb +60 -60
- data/lib/makit/configuration/project.rb +127 -127
- data/lib/makit/configuration/rakefile_helper.rb +43 -43
- data/lib/makit/configuration/step.rb +34 -34
- data/lib/makit/configuration.rb +14 -14
- data/lib/makit/content/default_gitignore.rb +7 -7
- 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 +141 -141
- 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/project.rb +153 -153
- 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 +305 -305
- data/lib/makit/logging/formatters/base.rb +39 -39
- data/lib/makit/logging/formatters/console_formatter.rb +140 -127
- 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 +115 -115
- data/lib/makit/logging/logger.rb +163 -159
- data/lib/makit/logging/sinks/console.rb +72 -72
- data/lib/makit/logging/sinks/file_sink.rb +92 -92
- data/lib/makit/logging/sinks/unified_file_sink.rb +303 -303
- data/lib/makit/logging.rb +530 -521
- 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 +193 -348
- 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 +25 -25
- 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 -117
- data/lib/makit/services/builder.rb +186 -186
- data/lib/makit/services/error_handler.rb +226 -226
- data/lib/makit/services/repository_manager.rb +229 -229
- data/lib/makit/services/validator.rb +112 -112
- data/lib/makit/setup/classlib.rb +53 -53
- data/lib/makit/setup/gem.rb +30 -17
- data/lib/makit/setup/runner.rb +45 -40
- data/lib/makit/setup.rb +5 -0
- data/lib/makit/show.rb +110 -110
- data/lib/makit/storage.rb +126 -126
- data/lib/makit/symbols.rb +170 -161
- data/lib/makit/task_info.rb +128 -128
- data/lib/makit/tasks/at_exit.rb +13 -13
- data/lib/makit/tasks/build.rb +19 -18
- data/lib/makit/tasks/clean.rb +11 -11
- data/lib/makit/tasks/hook_manager.rb +393 -239
- data/lib/makit/tasks/init.rb +47 -47
- data/lib/makit/tasks/integrate.rb +17 -15
- data/lib/makit/tasks/pull_incoming.rb +11 -12
- data/lib/makit/tasks/setup.rb +6 -6
- data/lib/makit/tasks/sync.rb +12 -11
- data/lib/makit/tasks/tag.rb +15 -0
- data/lib/makit/tasks/task_monkey_patch.rb +79 -79
- data/lib/makit/tasks.rb +10 -0
- data/lib/makit/test_cache.rb +239 -239
- data/lib/makit/tree.rb +37 -37
- data/lib/makit/v1/makit.v1_pb.rb +34 -34
- data/lib/makit/v1/makit.v1_services_pb.rb +27 -27
- data/lib/makit/version.rb +5 -5
- data/lib/makit/version_util.rb +21 -0
- 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 -0
- data/lib/makit.rb +40 -8
- metadata +50 -7
- data/lib/makit/command_runner.rb +0 -463
- data/lib/makit/commands/compatibility.rb +0 -365
- data/lib/makit/task_hooks.rb +0 -125
data/lib/makit/protoc.rb
CHANGED
@@ -1,107 +1,107 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "pathname"
|
4
|
-
|
5
|
-
# This module provides classes for the Makit gem.
|
6
|
-
module Makit
|
7
|
-
# This class provide methods for working with the system Environment.
|
8
|
-
#
|
9
|
-
class Protoc
|
10
|
-
def self.grpc_tools_path
|
11
|
-
File.join(Makit::Directories::NUGET_PACKAGE_CACHE, "grpc.tools", Makit::Protoc.get_latest_grpc_tools_version)
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.grpc_csharp_plugin_path
|
15
|
-
Makit::Protoc.find_plugin_path("grpc_csharp_plugin")
|
16
|
-
end
|
17
|
-
|
18
|
-
def self.setup
|
19
|
-
if Dir.exist?(Makit::Directories::NUGET_PACKAGE_CACHE)
|
20
|
-
Makit::NuGet.cache("Grpc.Tools", "2.66.0")
|
21
|
-
unless Dir.exist?(Makit::Directories::NUGET_PACKAGE_CACHE)
|
22
|
-
raise "Nuget package path #{Makit::Directories::NUGET_PACKAGE_CACHE} not found"
|
23
|
-
end
|
24
|
-
|
25
|
-
# test if protoc is installed by running >protoc --version
|
26
|
-
which_protoc = Makit::Environment.which("protoc")
|
27
|
-
if Makit::Environment.which("protoc").nil?
|
28
|
-
puts " protoc not found, installing...".colorize(:red)
|
29
|
-
"go version".run
|
30
|
-
"go install google.golang.org/protobuf/cmd/protoc-gen-go@latest".run
|
31
|
-
"go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway@latest".run
|
32
|
-
"go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@latest".run
|
33
|
-
else
|
34
|
-
puts " protoc found at #{which_protoc}".colorize(:green)
|
35
|
-
end
|
36
|
-
raise "protoc not found" unless Makit::Environment.which("protoc")
|
37
|
-
|
38
|
-
# "git clone https://github.com/googleapis/googleapis.git third_party".run unless File.directory?("third_party/google")
|
39
|
-
puts " grpc_tools_path #{Makit::Protoc.grpc_tools_path.to_s.colorize(:green)}"
|
40
|
-
puts " grpc_csharp_plugin_path #{Makit::Protoc.grpc_csharp_plugin_path.to_s.colorize(:green)}"
|
41
|
-
else
|
42
|
-
puts " warning: Nuget package cache directory #{Makit::Directories::NUGET_PACKAGE_CACHE} not found".colorize(:red)
|
43
|
-
puts " warning: Unable to proceed with protoc setup".colorize(:red)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
# get the latest version of the grpc.tools package
|
48
|
-
def self.get_latest_grpc_tools_version
|
49
|
-
Makit::NuGet.get_latest_version("Grpc.Tools")
|
50
|
-
end
|
51
|
-
|
52
|
-
# GRPC_CSHARP_PLUGIN_PATH = Makit::Protoc::find_plugin_path("grpc_csharp_plugin")
|
53
|
-
def self.find_plugin_path(plugin_name)
|
54
|
-
# search for a file matching the pattern *grpc_csharp_plugin* in the grpc.tools directory
|
55
|
-
# should match on Windows and Linux
|
56
|
-
plugin_name += ".exe" if Makit::Environment.is_windows?
|
57
|
-
|
58
|
-
plugin_path = Dir.glob("#{Makit::Directories::GRPC_TOOLS_PATH}/**/#{plugin_name}").first
|
59
|
-
|
60
|
-
raise "Plugin path #{plugin_path} not found" unless File.exist?(plugin_path)
|
61
|
-
|
62
|
-
plugin_path
|
63
|
-
end
|
64
|
-
|
65
|
-
def self.get_proto_files_from_path(proto_source_dir)
|
66
|
-
proto_files = []
|
67
|
-
Dir.chdir(proto_source_dir) do
|
68
|
-
Dir.glob("**/*.proto").each do |proto|
|
69
|
-
proto_files << proto
|
70
|
-
end
|
71
|
-
end
|
72
|
-
proto_files
|
73
|
-
end
|
74
|
-
|
75
|
-
def self.generate_source_file(proto_filename, language, csharp_output_dir)
|
76
|
-
FileUtils.mkdir_p(csharp_output_dir)
|
77
|
-
"protoc --#{language}_out=#{csharp_output_dir} #{proto_filename}".run
|
78
|
-
end
|
79
|
-
|
80
|
-
# language: charp, ruby, go, etc.
|
81
|
-
def self.generate_source_files(proto_source_dir, language, output_dir)
|
82
|
-
debug = false
|
83
|
-
puts "Generating source files for #{language} in #{proto_source_dir} to #{output_dir}" if debug
|
84
|
-
FileUtils.mkdir_p(output_dir)
|
85
|
-
|
86
|
-
path_a = Pathname.new(proto_source_dir)
|
87
|
-
path_b = Pathname.new(output_dir)
|
88
|
-
output_relative_path = path_b.relative_path_from(path_a)
|
89
|
-
puts "output_relative_path: #{output_relative_path}" if debug
|
90
|
-
|
91
|
-
Dir.chdir(proto_source_dir) do
|
92
|
-
Dir.glob("**/*.proto").each do |proto|
|
93
|
-
puts "Generating #{proto}" if debug
|
94
|
-
if language == "csharp"
|
95
|
-
namespace_dir = File.dirname(proto)
|
96
|
-
output_dir = "#{output_relative_path}/#{namespace_dir}"
|
97
|
-
puts "Generating #{proto} in #{output_dir}" if debug
|
98
|
-
FileUtils.mkdir_p(output_dir.to_s)
|
99
|
-
"protoc --csharp_out=#{output_dir} #{proto}".run
|
100
|
-
else
|
101
|
-
"protoc --#{language}_out=#{output_relative_path} #{proto}".run
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "pathname"
|
4
|
+
|
5
|
+
# This module provides classes for the Makit gem.
|
6
|
+
module Makit
|
7
|
+
# This class provide methods for working with the system Environment.
|
8
|
+
#
|
9
|
+
class Protoc
|
10
|
+
def self.grpc_tools_path
|
11
|
+
File.join(Makit::Directories::NUGET_PACKAGE_CACHE, "grpc.tools", Makit::Protoc.get_latest_grpc_tools_version)
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.grpc_csharp_plugin_path
|
15
|
+
Makit::Protoc.find_plugin_path("grpc_csharp_plugin")
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.setup
|
19
|
+
if Dir.exist?(Makit::Directories::NUGET_PACKAGE_CACHE)
|
20
|
+
Makit::NuGet.cache("Grpc.Tools", "2.66.0")
|
21
|
+
unless Dir.exist?(Makit::Directories::NUGET_PACKAGE_CACHE)
|
22
|
+
raise "Nuget package path #{Makit::Directories::NUGET_PACKAGE_CACHE} not found"
|
23
|
+
end
|
24
|
+
|
25
|
+
# test if protoc is installed by running >protoc --version
|
26
|
+
which_protoc = Makit::Environment.which("protoc")
|
27
|
+
if Makit::Environment.which("protoc").nil?
|
28
|
+
puts " protoc not found, installing...".colorize(:red)
|
29
|
+
"go version".run
|
30
|
+
"go install google.golang.org/protobuf/cmd/protoc-gen-go@latest".run
|
31
|
+
"go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway@latest".run
|
32
|
+
"go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@latest".run
|
33
|
+
else
|
34
|
+
puts " protoc found at #{which_protoc}".colorize(:green)
|
35
|
+
end
|
36
|
+
raise "protoc not found" unless Makit::Environment.which("protoc")
|
37
|
+
|
38
|
+
# "git clone https://github.com/googleapis/googleapis.git third_party".run unless File.directory?("third_party/google")
|
39
|
+
puts " grpc_tools_path #{Makit::Protoc.grpc_tools_path.to_s.colorize(:green)}"
|
40
|
+
puts " grpc_csharp_plugin_path #{Makit::Protoc.grpc_csharp_plugin_path.to_s.colorize(:green)}"
|
41
|
+
else
|
42
|
+
puts " warning: Nuget package cache directory #{Makit::Directories::NUGET_PACKAGE_CACHE} not found".colorize(:red)
|
43
|
+
puts " warning: Unable to proceed with protoc setup".colorize(:red)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# get the latest version of the grpc.tools package
|
48
|
+
def self.get_latest_grpc_tools_version
|
49
|
+
Makit::NuGet.get_latest_version("Grpc.Tools")
|
50
|
+
end
|
51
|
+
|
52
|
+
# GRPC_CSHARP_PLUGIN_PATH = Makit::Protoc::find_plugin_path("grpc_csharp_plugin")
|
53
|
+
def self.find_plugin_path(plugin_name)
|
54
|
+
# search for a file matching the pattern *grpc_csharp_plugin* in the grpc.tools directory
|
55
|
+
# should match on Windows and Linux
|
56
|
+
plugin_name += ".exe" if Makit::Environment.is_windows?
|
57
|
+
|
58
|
+
plugin_path = Dir.glob("#{Makit::Directories::GRPC_TOOLS_PATH}/**/#{plugin_name}").first
|
59
|
+
|
60
|
+
raise "Plugin path #{plugin_path} not found" unless File.exist?(plugin_path)
|
61
|
+
|
62
|
+
plugin_path
|
63
|
+
end
|
64
|
+
|
65
|
+
def self.get_proto_files_from_path(proto_source_dir)
|
66
|
+
proto_files = []
|
67
|
+
Dir.chdir(proto_source_dir) do
|
68
|
+
Dir.glob("**/*.proto").each do |proto|
|
69
|
+
proto_files << proto
|
70
|
+
end
|
71
|
+
end
|
72
|
+
proto_files
|
73
|
+
end
|
74
|
+
|
75
|
+
def self.generate_source_file(proto_filename, language, csharp_output_dir)
|
76
|
+
FileUtils.mkdir_p(csharp_output_dir)
|
77
|
+
"protoc --#{language}_out=#{csharp_output_dir} #{proto_filename}".run
|
78
|
+
end
|
79
|
+
|
80
|
+
# language: charp, ruby, go, etc.
|
81
|
+
def self.generate_source_files(proto_source_dir, language, output_dir)
|
82
|
+
debug = false
|
83
|
+
puts "Generating source files for #{language} in #{proto_source_dir} to #{output_dir}" if debug
|
84
|
+
FileUtils.mkdir_p(output_dir)
|
85
|
+
|
86
|
+
path_a = Pathname.new(proto_source_dir)
|
87
|
+
path_b = Pathname.new(output_dir)
|
88
|
+
output_relative_path = path_b.relative_path_from(path_a)
|
89
|
+
puts "output_relative_path: #{output_relative_path}" if debug
|
90
|
+
|
91
|
+
Dir.chdir(proto_source_dir) do
|
92
|
+
Dir.glob("**/*.proto").each do |proto|
|
93
|
+
puts "Generating #{proto}" if debug
|
94
|
+
if language == "csharp"
|
95
|
+
namespace_dir = File.dirname(proto)
|
96
|
+
output_dir = "#{output_relative_path}/#{namespace_dir}"
|
97
|
+
puts "Generating #{proto} in #{output_dir}" if debug
|
98
|
+
FileUtils.mkdir_p(output_dir.to_s)
|
99
|
+
"protoc --csharp_out=#{output_dir} #{proto}".run
|
100
|
+
else
|
101
|
+
"protoc --#{language}_out=#{output_relative_path} #{proto}".run
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
data/lib/makit/rake/cli.rb
CHANGED
@@ -1,196 +1,196 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "clamp"
|
4
|
-
|
5
|
-
module Makit
|
6
|
-
module Rake
|
7
|
-
# CLI command for managing rake-related functionality
|
8
|
-
# Command to run rake tasks
|
9
|
-
class RunCommand < Clamp::Command
|
10
|
-
self.description = "Run a rake task in a directory or repository"
|
11
|
-
|
12
|
-
parameter "TARGET", "Directory path or repository URL"
|
13
|
-
parameter "TASK", "Rake task to run"
|
14
|
-
option ["-v", "--verbose"], :flag, "Verbose output"
|
15
|
-
option ["-f", "--fail-fast"], :flag, "Stop on first failure"
|
16
|
-
option ["-j", "--jobs"], "JOBS", "Number of parallel jobs", default: "1"
|
17
|
-
option ["-t", "--trace"], :flag, "Show full backtrace on errors"
|
18
|
-
|
19
|
-
def execute
|
20
|
-
target_path = resolve_target(target)
|
21
|
-
|
22
|
-
signal_usage_error "Target directory does not exist: #{target_path}" unless Dir.exist?(target_path)
|
23
|
-
|
24
|
-
Dir.chdir(target_path) do
|
25
|
-
puts "Running rake task '#{task}' in #{target_path}".colorize(:blue)
|
26
|
-
|
27
|
-
# Build rake command with options
|
28
|
-
rake_cmd = build_rake_command
|
29
|
-
|
30
|
-
# Execute the command
|
31
|
-
result = system(rake_cmd)
|
32
|
-
|
33
|
-
if result
|
34
|
-
puts "Rake task '#{task}' completed successfully".colorize(:green)
|
35
|
-
else
|
36
|
-
puts "Rake task '#{task}' failed".colorize(:red)
|
37
|
-
exit(1)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
private
|
43
|
-
|
44
|
-
def resolve_target(target)
|
45
|
-
return handle_repository_target(target) if target.start_with?("http")
|
46
|
-
|
47
|
-
# It's a repository URL, clone or update it
|
48
|
-
|
49
|
-
# It's a local path
|
50
|
-
File.expand_path(target)
|
51
|
-
end
|
52
|
-
|
53
|
-
def handle_repository_target(url)
|
54
|
-
local_path = File.join(
|
55
|
-
Makit::Directories::HOME,
|
56
|
-
"code",
|
57
|
-
"work",
|
58
|
-
Makit::Directories.get_relative_directory(url)
|
59
|
-
)
|
60
|
-
|
61
|
-
if Dir.exist?(local_path)
|
62
|
-
puts "Updating existing repository: #{url}".colorize(:yellow)
|
63
|
-
Dir.chdir(local_path) do
|
64
|
-
"git pull".run
|
65
|
-
end
|
66
|
-
else
|
67
|
-
puts "Cloning repository: #{url}".colorize(:green)
|
68
|
-
`git clone #{url} #{local_path}`
|
69
|
-
end
|
70
|
-
|
71
|
-
local_path
|
72
|
-
end
|
73
|
-
|
74
|
-
def build_rake_command
|
75
|
-
cmd_parts = ["rake", task]
|
76
|
-
|
77
|
-
cmd_parts << "--verbose" if verbose?
|
78
|
-
cmd_parts << "--fail-fast" if fail_fast?
|
79
|
-
cmd_parts << "--jobs" << jobs if jobs != "1"
|
80
|
-
cmd_parts << "--trace" if trace?
|
81
|
-
|
82
|
-
cmd_parts.join(" ")
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
# Command to list available rake tasks
|
87
|
-
class ListCommand < Clamp::Command
|
88
|
-
self.description = "List available rake tasks in a directory or repository"
|
89
|
-
|
90
|
-
parameter "TARGET", "Directory path or repository URL"
|
91
|
-
option ["-a", "--all"], :flag, "Show all tasks including private ones"
|
92
|
-
option ["-p", "--pattern"], "PATTERN", "Filter tasks by pattern"
|
93
|
-
|
94
|
-
def execute
|
95
|
-
target_path = resolve_target(target)
|
96
|
-
|
97
|
-
signal_usage_error "Target directory does not exist: #{target_path}" unless Dir.exist?(target_path)
|
98
|
-
|
99
|
-
Dir.chdir(target_path) do
|
100
|
-
puts "Available rake tasks in #{target_path}:".colorize(:blue)
|
101
|
-
|
102
|
-
# Build rake command to list tasks
|
103
|
-
rake_cmd = "rake --tasks"
|
104
|
-
rake_cmd += " --all" if all?
|
105
|
-
|
106
|
-
# Execute and capture output
|
107
|
-
output = `#{rake_cmd} 2>/dev/null`
|
108
|
-
|
109
|
-
if output.empty?
|
110
|
-
puts "No rake tasks found or Rakefile not present".colorize(:yellow)
|
111
|
-
return
|
112
|
-
end
|
113
|
-
|
114
|
-
# Filter by pattern if specified
|
115
|
-
output = output.lines.select { |line| line.include?(pattern) }.join if pattern
|
116
|
-
|
117
|
-
puts output
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
private
|
122
|
-
|
123
|
-
def resolve_target(target)
|
124
|
-
return handle_repository_target(target) if target.start_with?("http")
|
125
|
-
|
126
|
-
# It's a repository URL, clone or update it
|
127
|
-
|
128
|
-
# It's a local path
|
129
|
-
File.expand_path(target)
|
130
|
-
end
|
131
|
-
|
132
|
-
def handle_repository_target(url)
|
133
|
-
local_path = File.join(
|
134
|
-
Makit::Directories::HOME,
|
135
|
-
"code",
|
136
|
-
"work",
|
137
|
-
Makit::Directories.get_relative_directory(url)
|
138
|
-
)
|
139
|
-
|
140
|
-
if Dir.exist?(local_path)
|
141
|
-
puts "Updating existing repository: #{url}".colorize(:yellow)
|
142
|
-
Dir.chdir(local_path) do
|
143
|
-
"git pull".run
|
144
|
-
end
|
145
|
-
else
|
146
|
-
puts "Cloning repository: #{url}".colorize(:green)
|
147
|
-
`git clone #{url} #{local_path}`
|
148
|
-
end
|
149
|
-
|
150
|
-
local_path
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
# Command to run rake tasks in repositories (legacy compatibility)
|
155
|
-
class RepositoryCommand < Clamp::Command
|
156
|
-
self.description = "Run a rake task in a repository (legacy command)"
|
157
|
-
|
158
|
-
parameter "URL", "Repository URL"
|
159
|
-
parameter "TASK", "Rake task to run"
|
160
|
-
|
161
|
-
def execute
|
162
|
-
puts "Running rake task '#{task}' in repository: #{url}".colorize(:blue)
|
163
|
-
Makit::Rake.rake_repository(url, task)
|
164
|
-
end
|
165
|
-
end
|
166
|
-
|
167
|
-
# CLI command for managing rake-related functionality
|
168
|
-
class CliCommand < Clamp::Command
|
169
|
-
self.description = <<~DESC
|
170
|
-
Rake management commands for Makit.
|
171
|
-
|
172
|
-
This command provides utilities for working with Rake tasks, including:
|
173
|
-
- Running rake tasks in repositories
|
174
|
-
- Managing rake task execution
|
175
|
-
- Repository-based rake operations
|
176
|
-
|
177
|
-
Common usage examples:
|
178
|
-
# Run a rake task in a repository
|
179
|
-
makit rake run https://github.com/user/repo test
|
180
|
-
#{" "}
|
181
|
-
# Run a rake task in a local directory
|
182
|
-
makit rake run ./my-project build
|
183
|
-
#{" "}
|
184
|
-
# List available rake tasks in a repository
|
185
|
-
makit rake list https://github.com/user/repo
|
186
|
-
#{" "}
|
187
|
-
# Run rake task with specific options
|
188
|
-
makit rake run ./my-project test --verbose
|
189
|
-
DESC
|
190
|
-
|
191
|
-
subcommand "run", "Run a rake task in a repository or directory", RunCommand
|
192
|
-
subcommand "list", "List available rake tasks", ListCommand
|
193
|
-
subcommand "repository", "Run rake task in a repository", RepositoryCommand
|
194
|
-
end
|
195
|
-
end
|
196
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "clamp"
|
4
|
+
|
5
|
+
module Makit
|
6
|
+
module Rake
|
7
|
+
# CLI command for managing rake-related functionality
|
8
|
+
# Command to run rake tasks
|
9
|
+
class RunCommand < Clamp::Command
|
10
|
+
self.description = "Run a rake task in a directory or repository"
|
11
|
+
|
12
|
+
parameter "TARGET", "Directory path or repository URL"
|
13
|
+
parameter "TASK", "Rake task to run"
|
14
|
+
option ["-v", "--verbose"], :flag, "Verbose output"
|
15
|
+
option ["-f", "--fail-fast"], :flag, "Stop on first failure"
|
16
|
+
option ["-j", "--jobs"], "JOBS", "Number of parallel jobs", default: "1"
|
17
|
+
option ["-t", "--trace"], :flag, "Show full backtrace on errors"
|
18
|
+
|
19
|
+
def execute
|
20
|
+
target_path = resolve_target(target)
|
21
|
+
|
22
|
+
signal_usage_error "Target directory does not exist: #{target_path}" unless Dir.exist?(target_path)
|
23
|
+
|
24
|
+
Dir.chdir(target_path) do
|
25
|
+
puts "Running rake task '#{task}' in #{target_path}".colorize(:blue)
|
26
|
+
|
27
|
+
# Build rake command with options
|
28
|
+
rake_cmd = build_rake_command
|
29
|
+
|
30
|
+
# Execute the command
|
31
|
+
result = system(rake_cmd)
|
32
|
+
|
33
|
+
if result
|
34
|
+
puts "Rake task '#{task}' completed successfully".colorize(:green)
|
35
|
+
else
|
36
|
+
puts "Rake task '#{task}' failed".colorize(:red)
|
37
|
+
exit(1)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def resolve_target(target)
|
45
|
+
return handle_repository_target(target) if target.start_with?("http")
|
46
|
+
|
47
|
+
# It's a repository URL, clone or update it
|
48
|
+
|
49
|
+
# It's a local path
|
50
|
+
File.expand_path(target)
|
51
|
+
end
|
52
|
+
|
53
|
+
def handle_repository_target(url)
|
54
|
+
local_path = File.join(
|
55
|
+
Makit::Directories::HOME,
|
56
|
+
"code",
|
57
|
+
"work",
|
58
|
+
Makit::Directories.get_relative_directory(url)
|
59
|
+
)
|
60
|
+
|
61
|
+
if Dir.exist?(local_path)
|
62
|
+
puts "Updating existing repository: #{url}".colorize(:yellow)
|
63
|
+
Dir.chdir(local_path) do
|
64
|
+
"git pull".run
|
65
|
+
end
|
66
|
+
else
|
67
|
+
puts "Cloning repository: #{url}".colorize(:green)
|
68
|
+
`git clone #{url} #{local_path}`
|
69
|
+
end
|
70
|
+
|
71
|
+
local_path
|
72
|
+
end
|
73
|
+
|
74
|
+
def build_rake_command
|
75
|
+
cmd_parts = ["rake", task]
|
76
|
+
|
77
|
+
cmd_parts << "--verbose" if verbose?
|
78
|
+
cmd_parts << "--fail-fast" if fail_fast?
|
79
|
+
cmd_parts << "--jobs" << jobs if jobs != "1"
|
80
|
+
cmd_parts << "--trace" if trace?
|
81
|
+
|
82
|
+
cmd_parts.join(" ")
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
# Command to list available rake tasks
|
87
|
+
class ListCommand < Clamp::Command
|
88
|
+
self.description = "List available rake tasks in a directory or repository"
|
89
|
+
|
90
|
+
parameter "TARGET", "Directory path or repository URL"
|
91
|
+
option ["-a", "--all"], :flag, "Show all tasks including private ones"
|
92
|
+
option ["-p", "--pattern"], "PATTERN", "Filter tasks by pattern"
|
93
|
+
|
94
|
+
def execute
|
95
|
+
target_path = resolve_target(target)
|
96
|
+
|
97
|
+
signal_usage_error "Target directory does not exist: #{target_path}" unless Dir.exist?(target_path)
|
98
|
+
|
99
|
+
Dir.chdir(target_path) do
|
100
|
+
puts "Available rake tasks in #{target_path}:".colorize(:blue)
|
101
|
+
|
102
|
+
# Build rake command to list tasks
|
103
|
+
rake_cmd = "rake --tasks"
|
104
|
+
rake_cmd += " --all" if all?
|
105
|
+
|
106
|
+
# Execute and capture output
|
107
|
+
output = `#{rake_cmd} 2>/dev/null`
|
108
|
+
|
109
|
+
if output.empty?
|
110
|
+
puts "No rake tasks found or Rakefile not present".colorize(:yellow)
|
111
|
+
return
|
112
|
+
end
|
113
|
+
|
114
|
+
# Filter by pattern if specified
|
115
|
+
output = output.lines.select { |line| line.include?(pattern) }.join if pattern
|
116
|
+
|
117
|
+
puts output
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
private
|
122
|
+
|
123
|
+
def resolve_target(target)
|
124
|
+
return handle_repository_target(target) if target.start_with?("http")
|
125
|
+
|
126
|
+
# It's a repository URL, clone or update it
|
127
|
+
|
128
|
+
# It's a local path
|
129
|
+
File.expand_path(target)
|
130
|
+
end
|
131
|
+
|
132
|
+
def handle_repository_target(url)
|
133
|
+
local_path = File.join(
|
134
|
+
Makit::Directories::HOME,
|
135
|
+
"code",
|
136
|
+
"work",
|
137
|
+
Makit::Directories.get_relative_directory(url)
|
138
|
+
)
|
139
|
+
|
140
|
+
if Dir.exist?(local_path)
|
141
|
+
puts "Updating existing repository: #{url}".colorize(:yellow)
|
142
|
+
Dir.chdir(local_path) do
|
143
|
+
"git pull".run
|
144
|
+
end
|
145
|
+
else
|
146
|
+
puts "Cloning repository: #{url}".colorize(:green)
|
147
|
+
`git clone #{url} #{local_path}`
|
148
|
+
end
|
149
|
+
|
150
|
+
local_path
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
# Command to run rake tasks in repositories (legacy compatibility)
|
155
|
+
class RepositoryCommand < Clamp::Command
|
156
|
+
self.description = "Run a rake task in a repository (legacy command)"
|
157
|
+
|
158
|
+
parameter "URL", "Repository URL"
|
159
|
+
parameter "TASK", "Rake task to run"
|
160
|
+
|
161
|
+
def execute
|
162
|
+
puts "Running rake task '#{task}' in repository: #{url}".colorize(:blue)
|
163
|
+
Makit::Rake.rake_repository(url, task)
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
# CLI command for managing rake-related functionality
|
168
|
+
class CliCommand < Clamp::Command
|
169
|
+
self.description = <<~DESC
|
170
|
+
Rake management commands for Makit.
|
171
|
+
|
172
|
+
This command provides utilities for working with Rake tasks, including:
|
173
|
+
- Running rake tasks in repositories
|
174
|
+
- Managing rake task execution
|
175
|
+
- Repository-based rake operations
|
176
|
+
|
177
|
+
Common usage examples:
|
178
|
+
# Run a rake task in a repository
|
179
|
+
makit rake run https://github.com/user/repo test
|
180
|
+
#{" "}
|
181
|
+
# Run a rake task in a local directory
|
182
|
+
makit rake run ./my-project build
|
183
|
+
#{" "}
|
184
|
+
# List available rake tasks in a repository
|
185
|
+
makit rake list https://github.com/user/repo
|
186
|
+
#{" "}
|
187
|
+
# Run rake task with specific options
|
188
|
+
makit rake run ./my-project test --verbose
|
189
|
+
DESC
|
190
|
+
|
191
|
+
subcommand "run", "Run a rake task in a repository or directory", RunCommand
|
192
|
+
subcommand "list", "List available rake tasks", ListCommand
|
193
|
+
subcommand "repository", "Run rake task in a repository", RepositoryCommand
|
194
|
+
end
|
195
|
+
end
|
196
|
+
end
|
data/lib/makit/rake.rb
CHANGED
@@ -1,25 +1,25 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# This module provides classes for the Makit gem.
|
4
|
-
module Makit
|
5
|
-
# This class provide methods for working with the system Environment.
|
6
|
-
#
|
7
|
-
class RakeHelper
|
8
|
-
def self.rake_repository(url, task_name)
|
9
|
-
local_path = File.join(Makit::Directories::HOME, "code", "work", Makit::Directories.get_relative_directory(url))
|
10
|
-
if Dir.exist?(local_path)
|
11
|
-
Dir.chdir(local_path) do
|
12
|
-
puts " #{local_path.to_s.colorize(:grey)}"
|
13
|
-
"git pull".run
|
14
|
-
end
|
15
|
-
else
|
16
|
-
puts "> ".colorize(:grey) + "git clone #{url} #{local_path}".colorize(:green)
|
17
|
-
`git clone #{url} #{local_path}`
|
18
|
-
end
|
19
|
-
Dir.chdir(local_path) do
|
20
|
-
puts " #{local_path.to_s.colorize(:grey)}"
|
21
|
-
"rake #{task_name}".run
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# This module provides classes for the Makit gem.
|
4
|
+
module Makit
|
5
|
+
# This class provide methods for working with the system Environment.
|
6
|
+
#
|
7
|
+
class RakeHelper
|
8
|
+
def self.rake_repository(url, task_name)
|
9
|
+
local_path = File.join(Makit::Directories::HOME, "code", "work", Makit::Directories.get_relative_directory(url))
|
10
|
+
if Dir.exist?(local_path)
|
11
|
+
Dir.chdir(local_path) do
|
12
|
+
puts " #{local_path.to_s.colorize(:grey)}"
|
13
|
+
"git pull".run
|
14
|
+
end
|
15
|
+
else
|
16
|
+
puts "> ".colorize(:grey) + "git clone #{url} #{local_path}".colorize(:green)
|
17
|
+
`git clone #{url} #{local_path}`
|
18
|
+
end
|
19
|
+
Dir.chdir(local_path) do
|
20
|
+
puts " #{local_path.to_s.colorize(:grey)}"
|
21
|
+
"rake #{task_name}".run
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|