makit 0.0.21 → 0.0.22
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/lib/makit/command_runner.rb +42 -43
- data/lib/makit/directory.rb +6 -4
- data/lib/makit/fileinfo.rb +16 -0
- data/lib/makit/git.rb +14 -0
- data/lib/makit/humanize.rb +16 -11
- data/lib/makit/mp/command_request.mp.rb +16 -13
- data/lib/makit/mp/project_mp.rb +1 -2
- data/lib/makit/mp/string_mp.rb +5 -16
- data/lib/makit/tasks.rb +4 -14
- data/lib/makit/version.rb +1 -1
- data/lib/makit.rb +10 -9
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d20004d1c96605bb23375807ee5541a266909981ad0c81893c719a2c7574c5fb
|
4
|
+
data.tar.gz: 467f47e68f11b74a165d2a26c21c69edfc75fc37a6dc183ae6045005717afeec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 91c8cbbf9bf948fb47f7acbb7edde9048ba630c29ac6c28c799cca4fbda8c5cf2dc0e18b0368b9085bc238ce76a9c545deb7fa83c3dbd846a4c0b4c7cecceea0
|
7
|
+
data.tar.gz: e4f4153782e42b0d0af6bcfff17694a05ec20c41978ee272860ea0519bcb989b5a8947beb2ea34aef432dce377212b258c80d2c1aa5b98e387b83304e190a300
|
data/lib/makit/command_runner.rb
CHANGED
@@ -3,6 +3,7 @@ require "open3"
|
|
3
3
|
require "socket"
|
4
4
|
require "etc"
|
5
5
|
require "logger"
|
6
|
+
require_relative "mp/command_request.mp"
|
6
7
|
|
7
8
|
# This module provides classes for the Makit gem.
|
8
9
|
module Makit
|
@@ -10,21 +11,18 @@ module Makit
|
|
10
11
|
#
|
11
12
|
class CommandRunner
|
12
13
|
attr_accessor :show_output_on_success, :log_to_artifacts, :commands
|
14
|
+
attr_accessor :debug
|
13
15
|
|
14
16
|
def initialize
|
15
17
|
@show_output_on_success = false
|
16
|
-
@log_to_artifacts =
|
18
|
+
@log_to_artifacts = false
|
17
19
|
@commands = []
|
20
|
+
@debug = false
|
18
21
|
end
|
19
22
|
|
20
23
|
def get_cache_filename(command)
|
21
|
-
|
22
|
-
|
23
|
-
# also replacing any path delimiters with an underscore
|
24
|
-
int_hash = Digest::SHA256.hexdigest("{command.name}.#{command.arguments.join(" ")}")
|
25
|
-
# int_hash
|
26
|
-
#int_hash = command_request.to_hash
|
27
|
-
hash_string = "#{int_hash}"[0, 8]
|
24
|
+
int_hash = Digest::SHA256.hexdigest("#{command.name}.#{command.arguments.join(" ")}")
|
25
|
+
hash_string = "#{int_hash}"
|
28
26
|
cache_filename = Makit::Directories::PROJECT_ARTIFACTS +
|
29
27
|
"/commands/cache/#{hash_string}.pb"
|
30
28
|
# create the directory if it does not already exist
|
@@ -37,31 +35,35 @@ module Makit
|
|
37
35
|
# otherwise run the command and save the result to a cache file
|
38
36
|
# then return the result
|
39
37
|
def cache_run(command_request, timestamp)
|
40
|
-
|
41
|
-
# and use it to create a cache filename, making sure it is a valid filename,
|
42
|
-
# by replacing all characters that are not valid in a filename with an underscore
|
43
|
-
# also replacing any path delimiters with an underscore
|
44
|
-
int_hash = command_request.to_hash
|
45
|
-
hash_string = "#{int_hash}"[0, 8]
|
38
|
+
raise "Invalid command_request" unless command_request.is_a? Makit::V1::CommandRequest
|
46
39
|
cache_filename = get_cache_filename(command_request)
|
47
|
-
|
48
|
-
#Makit::Directories::PROJECT_ARTIFACTS +
|
49
|
-
# "/commands/#{hash_string}.pb"
|
50
|
-
#puts "cache_filename: #{cache_filename}"
|
51
40
|
|
41
|
+
if debug
|
42
|
+
puts " timestamp: #{Makit::Humanize.get_humanized_timestamp(timestamp)}"
|
43
|
+
puts " command.name: #{command_request.name}"
|
44
|
+
puts " command.arguments: #{command_request.arguments.join(" ")}"
|
45
|
+
puts " cache_filename: #{cache_filename}"
|
46
|
+
end
|
52
47
|
#cache_filename = Makit::Directories::PROJECT_ARTIFACTS + "/commands/#{command_request.name}.#{command_request.arguments.join("_")}.#{timestamp.seconds}.pb"
|
53
48
|
if File.exist?(cache_filename)
|
49
|
+
cache_timestamp = File.mtime(cache_filename)
|
50
|
+
if debug
|
51
|
+
puts " cache timestamp: #{Makit::Humanize.get_humanized_timestamp(cache_timestamp)}"
|
52
|
+
end
|
54
53
|
#puts "cache file date: #{File.mtime(cache_filename)}"
|
55
54
|
if (File.mtime(cache_filename) > timestamp)
|
56
|
-
|
55
|
+
|
56
|
+
#puts " found cached command (newer than #{timestamp})".colorize(:grey)
|
57
|
+
#puts " cache_filename: #{cache_filename}"
|
57
58
|
command = Makit::Serializer.open(cache_filename, Makit::V1::Command)
|
58
|
-
|
59
|
+
show_cached_command(command)
|
59
60
|
if command.exit_code != 0
|
60
61
|
abort "cached command failed: #{command.name} #{command.arguments.join(" ")}"
|
61
62
|
end
|
62
|
-
return command
|
63
|
+
return command
|
63
64
|
else
|
64
|
-
|
65
|
+
puts " cache_filename exists, but is older than #{timestamp}" if debug
|
66
|
+
File.delete(cache_filename)
|
65
67
|
end
|
66
68
|
end
|
67
69
|
|
@@ -88,6 +90,20 @@ module Makit
|
|
88
90
|
end
|
89
91
|
end
|
90
92
|
|
93
|
+
def show_cached_command(command)
|
94
|
+
if command.exit_code != 0
|
95
|
+
puts Makit::CommandRunner.get_command_summary(command) + " (exit code #{command.exit_code})".colorize(:default)
|
96
|
+
puts " directory: #{command.directory}\n"
|
97
|
+
puts " duration: #{command.duration.seconds} seconds\n"
|
98
|
+
puts Makit::Humanize::indent_string(command.output, 2) if command.output.length > 0
|
99
|
+
puts Makit::Humanize::indent_string(command.error, 2) if command.error.length > 0
|
100
|
+
#exit 1 if command.exit_on_error
|
101
|
+
else
|
102
|
+
puts Makit::CommandRunner.get_command_summary(command).strip_color_codes.colorize(:grey) + " (#{command.duration.seconds} seconds)".colorize(:grey)
|
103
|
+
puts Makit::Humanize::indent_string(command.output, 2).colorize(:default) if show_output_on_success
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
91
107
|
# Run a command and return a Makit::V1::Command.
|
92
108
|
def run(command_request)
|
93
109
|
raise "Invalid command_request" unless command_request.is_a? Makit::V1::CommandRequest
|
@@ -97,33 +113,16 @@ module Makit
|
|
97
113
|
|
98
114
|
log_to_artifacts(command) if @log_to_artifacts
|
99
115
|
show_command(command)
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
# puts " directory: #{command.directory}\n"
|
104
|
-
# puts " duration: #{command.duration.seconds} seconds\n"
|
105
|
-
# puts Makit::Humanize::indent_string(command.output, 2) if command.output.length > 0
|
106
|
-
# puts Makit::Humanize::indent_string(command.error, 2) if command.error.length > 0
|
107
|
-
# exit 1 if command_request.exit_on_error
|
108
|
-
#else
|
109
|
-
# puts Makit::CommandRunner.get_command_summary(command) + " (#{command.duration.seconds} seconds)".colorize(:cyan)
|
110
|
-
# puts Makit::Humanize::indent_string(command.output, 2).colorize(:default) if show_output_on_success
|
111
|
-
#end
|
112
|
-
|
116
|
+
if command.exit_code != 0
|
117
|
+
exit 1 if command_request.exit_on_error
|
118
|
+
end
|
113
119
|
commands.push(command)
|
114
120
|
command
|
115
121
|
end
|
116
122
|
|
117
123
|
def log_to_artifacts(command)
|
118
|
-
#dir = File.join(Makit::Directories::PROJECT_ARTIFACTS, "commands")
|
119
|
-
#FileUtils.mkdir_p(dir) unless Dir.exist?(dir)
|
120
|
-
#filename_friendly_timestamp = Time.now.strftime("%Y.%m.%d_%H%M%S")
|
121
|
-
#log_filename = File.join(dir, "#{filename_friendly_timestamp}.json")
|
122
124
|
log_filename = get_cache_filename(command)
|
123
|
-
|
124
|
-
json = command.to_json
|
125
|
-
pretty_json = JSON.pretty_generate(JSON.parse(json))
|
126
|
-
File.write(log_filename, pretty_json)
|
125
|
+
Makit::Serializer.save_as(log_filename, command)
|
127
126
|
end
|
128
127
|
|
129
128
|
# Run a command and return a Makit::V1::Command.
|
data/lib/makit/directory.rb
CHANGED
@@ -91,10 +91,13 @@ module Makit
|
|
91
91
|
end
|
92
92
|
|
93
93
|
def self.get_git_tracked_files(directory_path)
|
94
|
-
|
95
|
-
|
94
|
+
#raise "do not use this method"
|
95
|
+
#output, status = Open3.capture2("git ls-files directory", chdir: directory_path)
|
96
|
+
#raise "Failed to list git-tracked files" unless status.success?
|
97
|
+
#command = "git ls-files #{directory_path}".run
|
96
98
|
|
97
|
-
output.split("\n")
|
99
|
+
#command.output.split("\n")
|
100
|
+
`git ls-files #{directory_path}`.split("\n")
|
98
101
|
end
|
99
102
|
|
100
103
|
def self.get_newest_git_file(directory_path)
|
@@ -110,7 +113,6 @@ module Makit
|
|
110
113
|
newest_file.nil? ? Time.now : File.mtime(newest_file)
|
111
114
|
end
|
112
115
|
|
113
|
-
|
114
116
|
# Normalize the path by removing any leading or trailing slashes
|
115
117
|
# and replacing any backslashes with forward slashes
|
116
118
|
def self.normalize(path)
|
@@ -0,0 +1,16 @@
|
|
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 FileInfo
|
8
|
+
attr_accessor :name, :mtime, :size
|
9
|
+
|
10
|
+
def initialize(name:, mtime:, size:)
|
11
|
+
@name = name
|
12
|
+
@mtime = mtime
|
13
|
+
@size = size
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/makit/git.rb
CHANGED
@@ -39,6 +39,20 @@ module Makit
|
|
39
39
|
"git archive --format zip --output #{zipfilename} HEAD".run
|
40
40
|
end
|
41
41
|
|
42
|
+
def self.get_file_infos()
|
43
|
+
file_infos = []
|
44
|
+
command = `git ls-files`
|
45
|
+
command.split("\n").map do |path|
|
46
|
+
begin
|
47
|
+
file_infos << FileInfo.new(name: path, mtime: File.mtime(path), size: File.size(path))
|
48
|
+
rescue
|
49
|
+
next
|
50
|
+
end
|
51
|
+
end
|
52
|
+
file_infos.sort_by! { |info| info.mtime }.reverse!
|
53
|
+
file_infos
|
54
|
+
end
|
55
|
+
|
42
56
|
def self.branch
|
43
57
|
`git branch --show-current`.strip
|
44
58
|
end
|
data/lib/makit/humanize.rb
CHANGED
@@ -14,6 +14,11 @@ module Makit
|
|
14
14
|
format("%.#{precision}f %s", size, units[exp])
|
15
15
|
end
|
16
16
|
|
17
|
+
def self.get_humanized_timestamp(timestamp)
|
18
|
+
return timestamp.strftime("%Y-%m-%d %I:%M:%S %p") if timestamp.respond_to?(:strftime)
|
19
|
+
timestamp.strftime("%Y-%m-%d %H:%M:%S")
|
20
|
+
end
|
21
|
+
|
17
22
|
def self.get_make_result_summary(make_result)
|
18
23
|
summary = "Make Result\n"
|
19
24
|
summary += " Repository: #{make_result.repository}\n"
|
@@ -88,19 +93,19 @@ module Makit
|
|
88
93
|
|
89
94
|
def self.get_humanized_duration(seconds)
|
90
95
|
minutes = (seconds / 60).to_i
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
+
seconds = (seconds % 60).to_i
|
97
|
+
hours = (minutes / 60).to_i
|
98
|
+
minutes = minutes % 60
|
99
|
+
days = (hours / 24).to_i
|
100
|
+
hours = hours % 24
|
96
101
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
+
parts = []
|
103
|
+
parts << "#{days} days" if days > 0
|
104
|
+
parts << "#{hours} hours" if hours > 0
|
105
|
+
parts << "#{minutes} minutes" if minutes > 0
|
106
|
+
parts << "#{seconds} seconds" if seconds > 0
|
102
107
|
|
103
|
-
|
108
|
+
parts.join(", ")
|
104
109
|
end
|
105
110
|
end
|
106
111
|
end
|
@@ -1,13 +1,16 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require "digest"
|
3
|
-
|
4
|
-
module Makit
|
5
|
-
module V1
|
6
|
-
class CommandRequest
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require "digest"
|
3
|
+
|
4
|
+
module Makit
|
5
|
+
module V1
|
6
|
+
#class CommandRequest
|
7
|
+
# def to_hash
|
8
|
+
# int_hash = Digest::SHA256.hexdigest("{self.name}.#{self.arguments.join(" ")}")
|
9
|
+
# int_hash
|
10
|
+
# end
|
11
|
+
# def to_hash_string
|
12
|
+
# hash_string = "#{int_hash}"
|
13
|
+
# end
|
14
|
+
# end
|
15
|
+
end
|
16
|
+
end # module Makit
|
data/lib/makit/mp/project_mp.rb
CHANGED
@@ -150,7 +150,7 @@ module Makit
|
|
150
150
|
#Makit::DotNet.new_solution(self.name)
|
151
151
|
Makit::DotNet.sln_add_projects(self.name)
|
152
152
|
else
|
153
|
-
puts " no dotnet projects found".colorize(:yellow)
|
153
|
+
#puts " no dotnet projects found".colorize(:yellow)
|
154
154
|
end
|
155
155
|
end
|
156
156
|
|
@@ -179,7 +179,6 @@ module Makit
|
|
179
179
|
#newest_file = Makit::Directory::get_newest_file_or_now(project.output)
|
180
180
|
command_request = Makit::RUNNER::parse_command_request(command)
|
181
181
|
RUNNER.cache_run(command_request, newest_file_timestamp)
|
182
|
-
|
183
182
|
end
|
184
183
|
project.build_args.each do |build_arg|
|
185
184
|
project_path = File.join(project.output, "#{project.name}.csproj")
|
data/lib/makit/mp/string_mp.rb
CHANGED
@@ -35,25 +35,14 @@ class String
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
-
def cache_run(
|
39
|
-
|
38
|
+
def cache_run(timestamp = nil)
|
40
39
|
if timestamp.nil?
|
41
|
-
timestamp = Makit::Directory.get_newest_git_file_timestamp(Makit::Directories::PROJECT_ROOT)
|
40
|
+
timestamp = Makit::GIT_FILE_INFOS.first.mtime #GIT_FILE_INFOS. Makit::Directory.get_newest_git_file_timestamp(Makit::Directories::PROJECT_ROOT)
|
42
41
|
#timestamp = Makit::Timestamp.now
|
43
42
|
end
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
else
|
48
|
-
command = self
|
49
|
-
request = Makit::RUNNER.parse_args(command)
|
50
|
-
if args.is_a?(Hash)
|
51
|
-
args.each do |key, value|
|
52
|
-
request.send("#{key}=", value)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
Makit::RUNNER.cache_run(request, timestamp)
|
56
|
-
end
|
43
|
+
|
44
|
+
command = self
|
45
|
+
Makit::RUNNER.cache_run(Makit::RUNNER::parse_command_request(command), timestamp)
|
57
46
|
end
|
58
47
|
|
59
48
|
# Read a value from a JSON file
|
data/lib/makit/tasks.rb
CHANGED
@@ -3,19 +3,7 @@ require "digest"
|
|
3
3
|
require "rake/clean"
|
4
4
|
#require "sqlite3"
|
5
5
|
|
6
|
-
|
7
|
-
at_exit do
|
8
|
-
puts "Performing cleanup for Makit..."
|
9
|
-
# Add your cleanup code here
|
10
|
-
# For example, close files, remove temporary files, etc.
|
11
|
-
# store current state of Makit::PROJECT to a file
|
12
|
-
#json_filename = File.join(Makit::Directories::PROJECT_ROOT, ".makit.project.json")
|
13
|
-
#puts "Saving project state to #{json_filename}"
|
14
|
-
#Makit::PROJECT.save_as(json_filename)
|
15
|
-
#yml_filename = File.join(Makit::Directories::PROJECT_ROOT, ".makit.project.yml")
|
16
|
-
#puts "Saving project state to #{yml_filename}"
|
17
|
-
# Makit::PROJECT.save_as(yml_filename)
|
18
|
-
end
|
6
|
+
|
19
7
|
|
20
8
|
# This module provides classes for the Makit gem.
|
21
9
|
module Makit
|
@@ -63,5 +51,7 @@ end
|
|
63
51
|
|
64
52
|
# Register the at_exit hook for cleanup
|
65
53
|
at_exit do
|
66
|
-
puts "at_exit in tasks.rb...."
|
54
|
+
#puts "at_exit in tasks.rb...."
|
55
|
+
duration = Time.now - Makit::STARTTIME
|
56
|
+
puts " completed in ".colorize(:grey) + Makit::Humanize.get_humanized_duration(duration).colorize(:green)
|
67
57
|
end
|
data/lib/makit/version.rb
CHANGED
data/lib/makit.rb
CHANGED
@@ -15,19 +15,19 @@ module Makit
|
|
15
15
|
class Error < StandardError; end
|
16
16
|
|
17
17
|
# Constants
|
18
|
-
if File.exist? ".makit.project.json"
|
19
|
-
|
20
|
-
else
|
21
|
-
if File.exist? ".makit.project.yml"
|
22
|
-
PROJECT = Makit::Serializer.open(".makit.project.yml", Makit::V1::Project)
|
18
|
+
if File.exist? ".makit.project.json"
|
19
|
+
PROJECT = Makit::Serializer.open(".makit.project.json", Makit::V1::Project)
|
23
20
|
else
|
24
|
-
|
25
|
-
|
21
|
+
if File.exist? ".makit.project.yml"
|
22
|
+
PROJECT = Makit::Serializer.open(".makit.project.yml", Makit::V1::Project)
|
23
|
+
else
|
24
|
+
PROJECT = Makit::V1::Project.new
|
25
|
+
PROJECT.set_default_values
|
26
|
+
end
|
26
27
|
end
|
27
|
-
end
|
28
|
-
|
29
28
|
|
30
29
|
STARTTIME = Time.now
|
30
|
+
|
31
31
|
IS_GIT_REPO = Dir.exist? ".git"
|
32
32
|
DETACHED = `git status`.include?("detached")
|
33
33
|
IS_READ_ONLY = !IS_GIT_REPO || DETACHED
|
@@ -40,6 +40,7 @@ end
|
|
40
40
|
ENV["COMMIT_BRANCH"] = Makit::Git::branch
|
41
41
|
|
42
42
|
RUNNER = CommandRunner.new
|
43
|
+
GIT_FILE_INFOS = Makit::Git::get_file_infos
|
43
44
|
#RUNNER.log_to_artifacts = true
|
44
45
|
# Variables
|
45
46
|
log_level = Logger::INFO
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: makit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.22
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lou Parslow
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-11-
|
11
|
+
date: 2024-11-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: clamp
|
@@ -166,6 +166,7 @@ files:
|
|
166
166
|
- lib/makit/directory.rb
|
167
167
|
- lib/makit/dotnet.rb
|
168
168
|
- lib/makit/environment.rb
|
169
|
+
- lib/makit/fileinfo.rb
|
169
170
|
- lib/makit/files.rb
|
170
171
|
- lib/makit/git.rb
|
171
172
|
- lib/makit/gitlab_runner.rb
|