makit 0.0.99 → 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 -0
- data/exe/makit +5 -0
- data/lib/makit/apache.rb +28 -32
- data/lib/makit/cli/build_commands.rb +500 -0
- data/lib/makit/cli/generators/base_generator.rb +74 -0
- data/lib/makit/cli/generators/dotnet_generator.rb +50 -0
- data/lib/makit/cli/generators/generator_factory.rb +49 -0
- data/lib/makit/cli/generators/node_generator.rb +50 -0
- data/lib/makit/cli/generators/ruby_generator.rb +77 -0
- data/lib/makit/cli/generators/rust_generator.rb +50 -0
- data/lib/makit/cli/generators/templates/dotnet_templates.rb +167 -0
- data/lib/makit/cli/generators/templates/node_templates.rb +161 -0
- data/lib/makit/cli/generators/templates/ruby/gemfile.rb +26 -0
- data/lib/makit/cli/generators/templates/ruby/gemspec.rb +40 -0
- data/lib/makit/cli/generators/templates/ruby/main_lib.rb +33 -0
- data/lib/makit/cli/generators/templates/ruby/rakefile.rb +35 -0
- data/lib/makit/cli/generators/templates/ruby/readme.rb +63 -0
- data/lib/makit/cli/generators/templates/ruby/test.rb +39 -0
- data/lib/makit/cli/generators/templates/ruby/test_helper.rb +29 -0
- data/lib/makit/cli/generators/templates/ruby/version.rb +29 -0
- data/lib/makit/cli/generators/templates/rust_templates.rb +128 -0
- data/lib/makit/cli/main.rb +62 -33
- data/lib/makit/cli/project_commands.rb +868 -0
- data/lib/makit/cli/repository_commands.rb +661 -0
- data/lib/makit/cli/utility_commands.rb +521 -0
- data/lib/makit/commands/factory.rb +359 -0
- data/lib/makit/commands/middleware/base.rb +73 -0
- data/lib/makit/commands/middleware/cache.rb +248 -0
- data/lib/makit/commands/middleware/command_logger.rb +320 -0
- data/lib/makit/commands/middleware/unified_logger.rb +243 -0
- data/lib/makit/commands/middleware/validator.rb +269 -0
- data/lib/makit/commands/request.rb +254 -0
- data/lib/makit/commands/result.rb +323 -0
- data/lib/makit/commands/runner.rb +337 -0
- data/lib/makit/commands/strategies/base.rb +160 -0
- data/lib/makit/commands/strategies/synchronous.rb +134 -0
- data/lib/makit/commands.rb +51 -21
- data/lib/makit/configuration/gitlab_helper.rb +60 -0
- data/lib/makit/configuration/project.rb +127 -0
- data/lib/makit/configuration/rakefile_helper.rb +43 -0
- data/lib/makit/configuration/step.rb +34 -0
- data/lib/makit/configuration.rb +14 -0
- data/lib/makit/content/default_gitignore.rb +7 -5
- data/lib/makit/content/default_rakefile.rb +13 -11
- data/lib/makit/content/gem_rakefile.rb +16 -14
- data/lib/makit/context.rb +1 -0
- data/lib/makit/data.rb +49 -50
- data/lib/makit/directories.rb +141 -145
- data/lib/makit/directory.rb +262 -276
- data/lib/makit/docs/files.rb +89 -94
- data/lib/makit/docs/rake.rb +102 -106
- data/lib/makit/dotnet/cli.rb +65 -0
- data/lib/makit/dotnet/project.rb +153 -0
- data/lib/makit/dotnet/solution.rb +38 -0
- data/lib/makit/dotnet/solution_classlib.rb +239 -0
- data/lib/makit/dotnet/solution_console.rb +264 -0
- data/lib/makit/dotnet/solution_maui.rb +354 -0
- data/lib/makit/dotnet/solution_wasm.rb +275 -0
- data/lib/makit/dotnet/solution_wpf.rb +304 -0
- data/lib/makit/dotnet.rb +102 -219
- data/lib/makit/email.rb +90 -61
- data/lib/makit/environment.rb +142 -139
- data/lib/makit/examples/runner.rb +370 -0
- data/lib/makit/exceptions.rb +45 -0
- data/lib/makit/fileinfo.rb +24 -26
- data/lib/makit/files.rb +43 -47
- data/lib/makit/gems.rb +29 -28
- data/lib/makit/git/cli.rb +54 -0
- data/lib/makit/git/repository.rb +90 -0
- data/lib/makit/git.rb +98 -145
- data/lib/makit/gitlab_runner.rb +59 -60
- data/lib/makit/humanize.rb +137 -129
- data/lib/makit/indexer.rb +47 -56
- data/lib/makit/logging/configuration.rb +305 -0
- data/lib/makit/logging/format_registry.rb +84 -0
- data/lib/makit/logging/formatters/base.rb +39 -0
- data/lib/makit/logging/formatters/console_formatter.rb +140 -0
- data/lib/makit/logging/formatters/json_formatter.rb +65 -0
- data/lib/makit/logging/formatters/plain_text_formatter.rb +71 -0
- data/lib/makit/logging/formatters/text_formatter.rb +64 -0
- data/lib/makit/logging/log_request.rb +115 -0
- data/lib/makit/logging/logger.rb +163 -0
- data/lib/makit/logging/sinks/base.rb +91 -0
- data/lib/makit/logging/sinks/console.rb +72 -0
- data/lib/makit/logging/sinks/file_sink.rb +92 -0
- data/lib/makit/logging/sinks/structured.rb +129 -0
- data/lib/makit/logging/sinks/unified_file_sink.rb +303 -0
- data/lib/makit/logging.rb +530 -106
- data/lib/makit/markdown.rb +75 -75
- data/lib/makit/mp/basic_object_mp.rb +17 -16
- data/lib/makit/mp/command_mp.rb +13 -13
- data/lib/makit/mp/command_request.mp.rb +17 -16
- data/lib/makit/mp/project_mp.rb +199 -210
- data/lib/makit/mp/string_mp.rb +193 -176
- data/lib/makit/nuget.rb +74 -72
- data/lib/makit/port.rb +32 -34
- data/lib/makit/process.rb +163 -65
- data/lib/makit/protoc.rb +107 -104
- data/lib/makit/rake/cli.rb +196 -0
- data/lib/makit/rake.rb +25 -25
- data/lib/makit/ruby/cli.rb +185 -0
- data/lib/makit/ruby.rb +25 -0
- data/lib/makit/secrets.rb +51 -51
- data/lib/makit/serializer.rb +130 -115
- data/lib/makit/services/builder.rb +186 -0
- data/lib/makit/services/error_handler.rb +226 -0
- data/lib/makit/services/repository_manager.rb +229 -0
- data/lib/makit/services/validator.rb +112 -0
- data/lib/makit/setup/classlib.rb +53 -0
- data/lib/makit/setup/gem.rb +263 -0
- data/lib/makit/setup/runner.rb +45 -0
- data/lib/makit/setup.rb +5 -0
- data/lib/makit/show.rb +110 -110
- data/lib/makit/storage.rb +126 -131
- data/lib/makit/symbols.rb +170 -149
- data/lib/makit/task_info.rb +128 -86
- data/lib/makit/tasks/at_exit.rb +13 -0
- data/lib/makit/tasks/build.rb +19 -0
- data/lib/makit/tasks/clean.rb +11 -0
- data/lib/makit/tasks/hook_manager.rb +393 -0
- data/lib/makit/tasks/init.rb +47 -0
- data/lib/makit/tasks/integrate.rb +17 -0
- data/lib/makit/tasks/pull_incoming.rb +11 -0
- data/lib/makit/tasks/setup.rb +6 -0
- data/lib/makit/tasks/sync.rb +12 -0
- data/lib/makit/tasks/tag.rb +15 -0
- data/lib/makit/tasks/task_monkey_patch.rb +79 -0
- data/lib/makit/tasks.rb +15 -150
- data/lib/makit/test_cache.rb +239 -0
- data/lib/makit/tree.rb +37 -37
- data/lib/makit/v1/makit.v1_pb.rb +3 -4
- data/lib/makit/v1/makit.v1_services_pb.rb +27 -25
- data/lib/makit/version.rb +5 -61
- data/lib/makit/version_util.rb +21 -0
- data/lib/makit/wix.rb +95 -95
- data/lib/makit/yaml.rb +29 -17
- data/lib/makit/zip.rb +17 -17
- data/lib/makit copy.rb +44 -0
- data/lib/makit.rb +40 -267
- metadata +117 -110
- data/lib/makit/cli/clean.rb +0 -14
- data/lib/makit/cli/clone.rb +0 -59
- data/lib/makit/cli/init.rb +0 -38
- data/lib/makit/cli/make.rb +0 -54
- data/lib/makit/cli/new.rb +0 -37
- data/lib/makit/cli/nuget_cache.rb +0 -38
- data/lib/makit/cli/pull.rb +0 -31
- data/lib/makit/cli/setup.rb +0 -71
- data/lib/makit/cli/work.rb +0 -21
- data/lib/makit/command_runner.rb +0 -404
- data/lib/makit/content/default_gitignore.txt +0 -222
data/lib/makit/wix.rb
CHANGED
@@ -1,95 +1,95 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
# test if wix is already installed
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
puts "
|
25
|
-
# display the link to https://
|
26
|
-
puts " https://
|
27
|
-
|
28
|
-
puts "
|
29
|
-
end
|
30
|
-
else
|
31
|
-
puts "Wix is not supported on non-Windows platforms"
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def self.version
|
36
|
-
`wix --version`.strip.split("+").first
|
37
|
-
end
|
38
|
-
|
39
|
-
def self.setup_package(name, path, files)
|
40
|
-
# create the path if it does not exist
|
41
|
-
FileUtils.mkdir_p(path) unless File.directory?(path)
|
42
|
-
# create the #{name}.wixproj file
|
43
|
-
File.open("#{path}/#{name}.wixproj", "w") do |f|
|
44
|
-
f.puts "<Project Sdk=\"WixToolset.Sdk/#{Wix
|
45
|
-
f.puts "</Project>"
|
46
|
-
end
|
47
|
-
# create the Package.wxs file
|
48
|
-
File.open("#{path}/Package.wxs", "w") do |f|
|
49
|
-
f.puts "<Wix xmlns=\"http://wixtoolset.org/schemas/v4/wxs\">"
|
50
|
-
f.puts " <Package Name=\"#{name}\" Manufacturer=\"Acme\" Version=\"0.0.0.0\" UpgradeCode=\"#{SecureRandom.uuid}\">"
|
51
|
-
#f.puts " <MajorUpgrade DowngradeErrorMessage=\"!(loc.DowngradeError)\" />"
|
52
|
-
f.puts " <Files Include=\"#{files}\" />"
|
53
|
-
#f.puts " <Feature Id=\"Main\">"
|
54
|
-
#f.puts " <ComponentGroupRef Id=\"Components\" />"
|
55
|
-
#f.puts " </Feature>"
|
56
|
-
f.puts " </Package>"
|
57
|
-
f.puts "</Wix>"
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
# Package.wxs with File harvesting
|
64
|
-
|
65
|
-
# <Package Name="MyProduct" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="B0B15C00-1DC4-0374-A1D1-E902240936D5">
|
66
|
-
# <Files Include="path\to\files\**" />
|
67
|
-
# </Package>
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
# <Package Name="Msi.Demo" Manufacturer="Acme" Version="1.0.0.0" UpgradeCode="a87571ec-8be3-447e-ae23-b3a94a85b727">
|
72
|
-
# <MajorUpgrade DowngradeErrorMessage="!(loc.DowngradeError)" />
|
73
|
-
|
74
|
-
# <Feature Id="Main">
|
75
|
-
# <ComponentGroupRef Id="Components" />
|
76
|
-
# </Feature>
|
77
|
-
# </Package>
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
# Components.wxs
|
84
|
-
|
85
|
-
# <Fragment>
|
86
|
-
# <ComponentGroup Id="Components" Directory="INSTALLFOLDER">
|
87
|
-
# <Component Guid="b8085fb3-3718-46df-8bf6-ecf9f968dd3d">
|
88
|
-
# <File Source="../../artifacts/Msi.Demo.exe" />
|
89
|
-
# <File Source="../../artifacts/Msi.Demo.dll" />
|
90
|
-
# <File Source="../../artifacts/Msi.Demo.deps.json" />
|
91
|
-
# <File Source="../../artifacts/Msi.Demo.runtimeconfig.json" />
|
92
|
-
# </Component>
|
93
|
-
# </ComponentGroup>
|
94
|
-
# </Fragment>
|
95
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "securerandom"
|
4
|
+
|
5
|
+
module Makit
|
6
|
+
# This class provide methods for working with the Nuget package cache
|
7
|
+
#
|
8
|
+
# Example:
|
9
|
+
#
|
10
|
+
# Makit::Directory.cache("Google.Protobuf", "3.27.2")
|
11
|
+
#
|
12
|
+
# dotnet nuget locals all --list
|
13
|
+
# dotnet nuget locals all --clear
|
14
|
+
#
|
15
|
+
class Wix
|
16
|
+
def self.setup
|
17
|
+
if Makit::Environment.is_windows?
|
18
|
+
# test if dotnet is installed
|
19
|
+
if Makit::DotNet.is_installed?
|
20
|
+
# test if wix is already installed
|
21
|
+
"dotnet tool install --global wix".run unless `dotnet tool list --global`.include?("wix")
|
22
|
+
puts " Wix version #{Wix.version.to_s.colorize(:green)}"
|
23
|
+
# display the link to https://wixtoolset.org/
|
24
|
+
puts " https://wixtoolset.org/".colorize(:green)
|
25
|
+
# display the link to https://marketplace.visualstudio.com/items?itemName=FireGiant.FireGiantHeatWaveDev17
|
26
|
+
puts " https://marketplace.visualstudio.com/items?itemName=FireGiant.FireGiantHeatWaveDev17".colorize(:green)
|
27
|
+
else # !File.exist?(Makit::Environment.which("dotnet"))
|
28
|
+
puts "dotnet does not appear to be installed"
|
29
|
+
end
|
30
|
+
else
|
31
|
+
puts "Wix is not supported on non-Windows platforms"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.version
|
36
|
+
`wix --version`.strip.split("+").first
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.setup_package(name, path, files)
|
40
|
+
# create the path if it does not exist
|
41
|
+
FileUtils.mkdir_p(path) unless File.directory?(path)
|
42
|
+
# create the #{name}.wixproj file
|
43
|
+
File.open("#{path}/#{name}.wixproj", "w") do |f|
|
44
|
+
f.puts "<Project Sdk=\"WixToolset.Sdk/#{Wix.version}\">"
|
45
|
+
f.puts "</Project>"
|
46
|
+
end
|
47
|
+
# create the Package.wxs file
|
48
|
+
File.open("#{path}/Package.wxs", "w") do |f|
|
49
|
+
f.puts "<Wix xmlns=\"http://wixtoolset.org/schemas/v4/wxs\">"
|
50
|
+
f.puts " <Package Name=\"#{name}\" Manufacturer=\"Acme\" Version=\"0.0.0.0\" UpgradeCode=\"#{SecureRandom.uuid}\">"
|
51
|
+
# f.puts " <MajorUpgrade DowngradeErrorMessage=\"!(loc.DowngradeError)\" />"
|
52
|
+
f.puts " <Files Include=\"#{files}\" />"
|
53
|
+
# f.puts " <Feature Id=\"Main\">"
|
54
|
+
# f.puts " <ComponentGroupRef Id=\"Components\" />"
|
55
|
+
# f.puts " </Feature>"
|
56
|
+
f.puts " </Package>"
|
57
|
+
f.puts "</Wix>"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
# Package.wxs with File harvesting
|
64
|
+
# <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
|
65
|
+
# <Package Name="MyProduct" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="B0B15C00-1DC4-0374-A1D1-E902240936D5">
|
66
|
+
# <Files Include="path\to\files\**" />
|
67
|
+
# </Package>
|
68
|
+
# </Wix>
|
69
|
+
|
70
|
+
# <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
|
71
|
+
# <Package Name="Msi.Demo" Manufacturer="Acme" Version="1.0.0.0" UpgradeCode="a87571ec-8be3-447e-ae23-b3a94a85b727">
|
72
|
+
# <MajorUpgrade DowngradeErrorMessage="!(loc.DowngradeError)" />
|
73
|
+
|
74
|
+
# <Feature Id="Main">
|
75
|
+
# <ComponentGroupRef Id="Components" />
|
76
|
+
# </Feature>
|
77
|
+
# </Package>
|
78
|
+
# </Wix>
|
79
|
+
|
80
|
+
# <Project Sdk="WixToolset.Sdk/5.0.1">
|
81
|
+
# </Project>
|
82
|
+
|
83
|
+
# Components.wxs
|
84
|
+
# <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
|
85
|
+
# <Fragment>
|
86
|
+
# <ComponentGroup Id="Components" Directory="INSTALLFOLDER">
|
87
|
+
# <Component Guid="b8085fb3-3718-46df-8bf6-ecf9f968dd3d">
|
88
|
+
# <File Source="../../artifacts/Msi.Demo.exe" />
|
89
|
+
# <File Source="../../artifacts/Msi.Demo.dll" />
|
90
|
+
# <File Source="../../artifacts/Msi.Demo.deps.json" />
|
91
|
+
# <File Source="../../artifacts/Msi.Demo.runtimeconfig.json" />
|
92
|
+
# </Component>
|
93
|
+
# </ComponentGroup>
|
94
|
+
# </Fragment>
|
95
|
+
# </Wix>
|
data/lib/makit/yaml.rb
CHANGED
@@ -1,17 +1,29 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
#
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "yaml"
|
4
|
+
|
5
|
+
# frozen_string_literal: true
|
6
|
+
|
7
|
+
# This module provides classes for the Makit gem.
|
8
|
+
module Makit
|
9
|
+
# YAML file validation utilities
|
10
|
+
#
|
11
|
+
# This class provides methods for validating YAML file syntax
|
12
|
+
# and structure, helping to catch configuration errors early.
|
13
|
+
class Yaml
|
14
|
+
# Validate YAML file syntax and structure
|
15
|
+
#
|
16
|
+
# Attempts to parse a YAML file to verify it has valid syntax.
|
17
|
+
# Prints a success message if valid, raises an error if invalid.
|
18
|
+
#
|
19
|
+
# @param file_path [String] Path to the YAML file to validate
|
20
|
+
# @return [nil] Prints success message if validation passes
|
21
|
+
# @raise [RuntimeError] If YAML syntax is invalid
|
22
|
+
def self.validate_yaml(file_path)
|
23
|
+
YAML.load_file(file_path)
|
24
|
+
puts "#{file_path} is a valid YAML file."
|
25
|
+
rescue Psych::SyntaxError => e
|
26
|
+
raise "YAML validation failed for #{file_path}: #{e}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/makit/zip.rb
CHANGED
@@ -1,17 +1,17 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "zip"
|
4
|
-
require "fileutils"
|
5
|
-
|
6
|
-
module Makit
|
7
|
-
# Zip a directory
|
8
|
-
class Zip
|
9
|
-
def self.zip_directory(directory, zip_file)
|
10
|
-
::Zip::File.open(zip_file, ::Zip::File::CREATE) do |zipfile|
|
11
|
-
Dir[File.join(directory, "**", "**")].each do |file|
|
12
|
-
zipfile.add(file.sub("#{directory}/", ""), file)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "zip"
|
4
|
+
require "fileutils"
|
5
|
+
|
6
|
+
module Makit
|
7
|
+
# Zip a directory
|
8
|
+
class Zip
|
9
|
+
def self.zip_directory(directory, zip_file)
|
10
|
+
::Zip::File.open(zip_file, ::Zip::File::CREATE) do |zipfile|
|
11
|
+
Dir[File.join(directory, "**", "**")].each do |file|
|
12
|
+
zipfile.add(file.sub("#{directory}/", ""), file)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/makit copy.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
begin
|
4
|
+
require "colorize"
|
5
|
+
rescue LoadError
|
6
|
+
# colorize gem not available, define a no-op colorize method
|
7
|
+
class String
|
8
|
+
def colorize(*args)
|
9
|
+
self
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
require_relative "makit/version"
|
15
|
+
|
16
|
+
# Load essential modules for Rakefile
|
17
|
+
require_relative "makit/version_util"
|
18
|
+
require_relative "makit/configuration"
|
19
|
+
require_relative "makit/logging"
|
20
|
+
require_relative "makit/commands"
|
21
|
+
require_relative "makit/serializer"
|
22
|
+
require_relative "makit/humanize"
|
23
|
+
require_relative "makit/directories"
|
24
|
+
require_relative "makit/files"
|
25
|
+
require_relative "makit/tasks"
|
26
|
+
require_relative "makit/environment"
|
27
|
+
require_relative "makit/process"
|
28
|
+
require_relative "makit/mp/string_mp"
|
29
|
+
require_relative "makit/git"
|
30
|
+
require_relative "makit/protoc"
|
31
|
+
|
32
|
+
module Makit
|
33
|
+
class Error < StandardError; end
|
34
|
+
|
35
|
+
# Your code goes here...
|
36
|
+
end
|
37
|
+
|
38
|
+
# Commands::Runner is now the primary command execution system
|
39
|
+
|
40
|
+
# Additional constants needed by Rakefile
|
41
|
+
Makit::GIT_FILE_INFOS = Makit::Git::Repository.get_file_infos
|
42
|
+
Makit::IS_READ_ONLY = Makit::Git::Repository.read_only?
|
43
|
+
Makit::IS_GIT_REPO = Makit::Git::Repository.git_repo?
|
44
|
+
Makit::PROJECT = Makit::Configuration::Project.default
|
data/lib/makit.rb
CHANGED
@@ -1,267 +1,40 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
|
4
|
-
require "
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
#
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
STARTTIME = Time.now
|
43
|
-
SHOW = Makit::Show.new
|
44
|
-
IS_GIT_REPO = Dir.exist? ".git"
|
45
|
-
DETACHED = `git status`.include?("detached")
|
46
|
-
IS_READ_ONLY = !IS_GIT_REPO || DETACHED
|
47
|
-
RUNTIME_IDENTIFIER = Makit::Environment::get_runtime_identifier
|
48
|
-
DEVICE = Socket.gethostname
|
49
|
-
LOGGER = Makit::Logging::MultiLogger.create_logger
|
50
|
-
|
51
|
-
# Git Commit and Branch/Tag constants
|
52
|
-
ENV["COMMIT_SHA"] = Makit::Git::commitsha
|
53
|
-
ENV["COMMIT_BRANCH"] = Makit::Git::branch
|
54
|
-
|
55
|
-
RUNNER = CommandRunner.new
|
56
|
-
GIT_FILE_INFOS = Makit::Git::get_file_infos
|
57
|
-
#RUNNER.log_to_artifacts = true
|
58
|
-
# Variables
|
59
|
-
log_level = Logger::INFO
|
60
|
-
package_type = Makit::V1::PackageType::GEM
|
61
|
-
commands = Makit::Commands.new
|
62
|
-
|
63
|
-
# methods
|
64
|
-
#
|
65
|
-
# initialize a git repository
|
66
|
-
def self.init(directory)
|
67
|
-
if !Dir.exist?(directory)
|
68
|
-
FileUtils.mkdir_p(directory)
|
69
|
-
end
|
70
|
-
raise Makit::Error.new("directory does not exist: #{directory}") if !Dir.exist?(directory)
|
71
|
-
Dir.chdir(directory) do
|
72
|
-
File.write(".gitignore", Makit::Content::GITIGNORE) unless File.exist?(".gitignore")
|
73
|
-
init = Makit::RUNNER.execute "git init"
|
74
|
-
if init.exit_code != 0
|
75
|
-
raise Makit::Error.new("failed to initialize local repository: #{directory}\n#{Makit::Humanize.get_command_summary(init)}")
|
76
|
-
end
|
77
|
-
init
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
# clone a git repository to a local directory in Directories::CLONE
|
82
|
-
# returns the Makit::V1::Command for 'git clone ...'
|
83
|
-
def self.clone(git_repository)
|
84
|
-
commands = []
|
85
|
-
# make sure a local clone of the repository exists
|
86
|
-
clone_dir = Directories::get_clone_directory(git_repository)
|
87
|
-
if (!Dir.exist?(clone_dir))
|
88
|
-
commands << Makit::RUNNER.execute("git clone #{git_repository} #{clone_dir}")
|
89
|
-
end
|
90
|
-
commands
|
91
|
-
end
|
92
|
-
|
93
|
-
# pull the latest changes from the remote repository to a local clone in Directories::CLONE
|
94
|
-
def self.pull(git_repository)
|
95
|
-
clone_dir = Directories::get_clone_directory(git_repository)
|
96
|
-
raise Makit::Error.new("clone directory does not exist: #{clone_dir}") if !Dir.exist?(clone_dir)
|
97
|
-
Dir.chdir(clone_dir) do
|
98
|
-
request = Makit::V1::CommandRequest.new(
|
99
|
-
name: "git",
|
100
|
-
arguments: ["pull"],
|
101
|
-
directory: clone_dir,
|
102
|
-
)
|
103
|
-
pull_command = Makit::RUNNER.execute(request)
|
104
|
-
raise Makit::Error.new(Makit::Humanize::get_command_details(pull_command)) if pull_command.exit_code != 0
|
105
|
-
return pull_command
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
def self.clone_or_pull(git_repository)
|
110
|
-
commands = []
|
111
|
-
clone_dir = Directories::get_clone_directory(git_repository)
|
112
|
-
if Dir.exist?(clone_dir)
|
113
|
-
commands << pull(git_repository)
|
114
|
-
else
|
115
|
-
commands << clone(git_repository)
|
116
|
-
end
|
117
|
-
commands
|
118
|
-
end
|
119
|
-
|
120
|
-
# log information about a specific repository
|
121
|
-
# return an array of GitLogEntry objects
|
122
|
-
def self.log(git_repository, limit, skip)
|
123
|
-
entries = []
|
124
|
-
clone_dir = Directories::get_clone_directory(git_repository)
|
125
|
-
raise Makit::Error.new("clone directory does not exist: #{clone_dir}") if !Dir.exist?(clone_dir)
|
126
|
-
Dir.chdir(clone_dir) do
|
127
|
-
log_command = Makit::RUNNER.execute("git log -n #{limit} --skip #{skip} --date=iso")
|
128
|
-
if log_command.exit_code != 0
|
129
|
-
lines = log_command.stderr.split("\n")
|
130
|
-
# iterate over the lines, generating a GitLogEntry for each commit
|
131
|
-
lines.each do |line|
|
132
|
-
if line.start_with?("commit")
|
133
|
-
commit = line.split(" ")[1]
|
134
|
-
entries << GitLogEntry.new(commit)
|
135
|
-
end
|
136
|
-
if line.start_with?("Author:")
|
137
|
-
entries.last.author = line.split(" ")[1..-1].join(" ")
|
138
|
-
end
|
139
|
-
if line.start_with?("Date:")
|
140
|
-
entries.last.date = line.split(" ")[1..-1].join(" ")
|
141
|
-
end
|
142
|
-
if line.start_with?(" ")
|
143
|
-
entries.last.message += line[4..-1]
|
144
|
-
end
|
145
|
-
end
|
146
|
-
end
|
147
|
-
end
|
148
|
-
entries
|
149
|
-
end
|
150
|
-
|
151
|
-
# work on a local clone of a git repository
|
152
|
-
# if the repository does not exist, clone it
|
153
|
-
# if the repository exists, pull the latest changes
|
154
|
-
# if a build command can be found, execute it and return the result Makit::V1::WorkResult
|
155
|
-
def self.work(repository)
|
156
|
-
commands = []
|
157
|
-
work_dir = Makit::Directories::get_work_directory(repository)
|
158
|
-
commands << clone_or_pull(repository)
|
159
|
-
clone_dir = Makit::Directories::get_clone_directory(repository)
|
160
|
-
if !Dir.exist?(work_dir)
|
161
|
-
# make the parent directory for work_dir if it does not exist
|
162
|
-
FileUtils.mkdir_p(File.dirname(work_dir)) unless Dir.exist?(File.dirname(work_dir))
|
163
|
-
Makit::RUNNER::execute "git clone #{clone_dir} #{work_dir}"
|
164
|
-
end
|
165
|
-
Dir.chdir(work_dir) do
|
166
|
-
# if there is no .gitignore file, create one
|
167
|
-
File.write(".gitignore", Makit::Content::GITIGNORE) unless File.exist?(".gitignore")
|
168
|
-
end
|
169
|
-
nil?
|
170
|
-
end
|
171
|
-
|
172
|
-
def self.enable_monkey_patch
|
173
|
-
%w[makit/mp].each do |dir|
|
174
|
-
Dir[File.join(__dir__, dir, "*.rb")].each do |file|
|
175
|
-
require_relative file
|
176
|
-
end
|
177
|
-
end
|
178
|
-
end
|
179
|
-
# Given a git repository URL and a commit id, create a new MakeResult object.
|
180
|
-
def self.make(url, commit, force = false)
|
181
|
-
log_filename = File.join(Directories::get_log_directory(url), commit, +"#{RUNTIME_IDENTIFIER}.#{DEVICE}.json")
|
182
|
-
if File.exist?(log_filename) && !force && commit != "latest"
|
183
|
-
begin
|
184
|
-
# deserialize the log file to a Makite::V1::MakeResult object
|
185
|
-
make_result = Makit::V1::MakeResult.decode_json(File.read(log_filename))
|
186
|
-
return make_result
|
187
|
-
rescue => e
|
188
|
-
# if deserialization fails, delete the log file and continue
|
189
|
-
FileUtils.rm(log_filename)
|
190
|
-
end
|
191
|
-
else
|
192
|
-
commands = []
|
193
|
-
begin
|
194
|
-
clone_or_pull(url).each do |command|
|
195
|
-
commands << command
|
196
|
-
end
|
197
|
-
# make sure a local clone of the repository exists
|
198
|
-
clone_dir = Directories::get_clone_directory(url)
|
199
|
-
raise Makit::Error.new("clone directory does not exist: #{clone_dir}") if !Dir.exist?(clone_dir)
|
200
|
-
|
201
|
-
if (commit == "latest")
|
202
|
-
Dir.chdir(clone_dir) do
|
203
|
-
git_log = Makit::RUNNER.execute("git log -n 1 --date=iso")
|
204
|
-
|
205
|
-
commands << git_log
|
206
|
-
# assert that the commit is valid
|
207
|
-
commit = git_log.output.match(/^commit ([0-9a-f]{40})$/i)[1]
|
208
|
-
raise Makit::Error.new("invalid commit: #{commit}") if commit.nil? || commit.empty? || !commit.match?(/\A[0-9a-f]{40}\z/i)
|
209
|
-
log_filename = File.join(Directories::get_log_directory(url), commit, +"#{RUNTIME_IDENTIFIER}.#{DEVICE}.json")
|
210
|
-
end
|
211
|
-
end
|
212
|
-
|
213
|
-
# clone a fresh copy of the repository to a make directory
|
214
|
-
make_dir = Directories::get_make_commit_directory(url, commit)
|
215
|
-
FileUtils.rm_rf(make_dir) if Dir.exist?(make_dir)
|
216
|
-
commands << Makit::RUNNER.execute("git clone #{clone_dir} #{make_dir}")
|
217
|
-
raise Makit::Error.new("failed to clone repository: #{url} to #{make_dir}") if !Dir.exist?(make_dir)
|
218
|
-
Dir.chdir(make_dir) do
|
219
|
-
commands << Makit::RUNNER.execute("git reset --hard #{commit}")
|
220
|
-
commands << Makit::RUNNER.execute("git log -n 1")
|
221
|
-
|
222
|
-
commands << Makit::RUNNER.execute("bundle install") if File.exist? "Gemfile"
|
223
|
-
if File.exist? ("Rakefile")
|
224
|
-
commands << Makit::RUNNER.execute("rake default")
|
225
|
-
else
|
226
|
-
commands << Makit::RUNNER.execute("rake default") if File.exist? "rakefile.rb"
|
227
|
-
end
|
228
|
-
|
229
|
-
make_result = Makit::V1::MakeResult.new(
|
230
|
-
repository: url,
|
231
|
-
commit: commit,
|
232
|
-
branch: "?",
|
233
|
-
tag: "?",
|
234
|
-
device: DEVICE,
|
235
|
-
runtime_identifier: RUNTIME_IDENTIFIER,
|
236
|
-
)
|
237
|
-
commands.flatten.each do |command|
|
238
|
-
make_result.commands << command
|
239
|
-
end
|
240
|
-
|
241
|
-
# save the MakeResult object to a log file as pretty printed json
|
242
|
-
FileUtils.mkdir_p(File.dirname(log_filename)) unless Dir.exist?(File.dirname(log_filename))
|
243
|
-
File.write(log_filename, make_result.to_json)
|
244
|
-
|
245
|
-
return make_result
|
246
|
-
end
|
247
|
-
rescue => e
|
248
|
-
message = "error raised attempting to make repository: #{url} commit: #{commit}\n\n"
|
249
|
-
message += "#{e.message}\n"
|
250
|
-
backtrace = e.backtrace.join("\n")
|
251
|
-
message += "#{backtrace}\n\n"
|
252
|
-
message += "commands:\n"
|
253
|
-
commands.flatten.each do |command|
|
254
|
-
message += Makit::Humanize::get_command_details(command)
|
255
|
-
end
|
256
|
-
raise Makit::Error.new(message)
|
257
|
-
end
|
258
|
-
end
|
259
|
-
end
|
260
|
-
end
|
261
|
-
|
262
|
-
if !File.exist?(".gitignore")
|
263
|
-
Makit::LOGGER.info("added .gitignore file")
|
264
|
-
File.open(".gitignore", "w") do |file|
|
265
|
-
file.puts Makit::Content::GITIGNORE
|
266
|
-
end
|
267
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
|
4
|
+
require "colorize"
|
5
|
+
|
6
|
+
|
7
|
+
# Set default LOG_LEVEL if not already set
|
8
|
+
ENV["LOG_LEVEL"] ||= "info"
|
9
|
+
|
10
|
+
require_relative "makit/version"
|
11
|
+
|
12
|
+
# Load essential modules for Rakefile
|
13
|
+
require_relative "makit/version_util"
|
14
|
+
require_relative "makit/configuration"
|
15
|
+
require_relative "makit/logging"
|
16
|
+
require_relative "makit/commands"
|
17
|
+
require_relative "makit/serializer"
|
18
|
+
require_relative "makit/humanize"
|
19
|
+
require_relative "makit/directories"
|
20
|
+
require_relative "makit/files"
|
21
|
+
require_relative "makit/tasks"
|
22
|
+
require_relative "makit/environment"
|
23
|
+
require_relative "makit/process"
|
24
|
+
require_relative "makit/mp/string_mp"
|
25
|
+
require_relative "makit/git"
|
26
|
+
require_relative "makit/protoc"
|
27
|
+
|
28
|
+
module Makit
|
29
|
+
class Error < StandardError; end
|
30
|
+
|
31
|
+
# Your code goes here...
|
32
|
+
end
|
33
|
+
|
34
|
+
# Commands::Runner is now the primary command execution system
|
35
|
+
|
36
|
+
# Additional constants needed by Rakefile
|
37
|
+
Makit::GIT_FILE_INFOS = Makit::Git::Repository.get_file_infos
|
38
|
+
Makit::IS_READ_ONLY = Makit::Git::Repository.read_only?
|
39
|
+
Makit::IS_GIT_REPO = Makit::Git::Repository.git_repo?
|
40
|
+
Makit::PROJECT = Makit::Configuration::Project.default
|