raykit 0.0.48 → 0.0.49
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 +1 -1
- data/lib/raykit.rb +7 -5
- data/lib/raykit/command.rb +10 -2
- data/lib/raykit/console.rb +23 -13
- data/lib/raykit/dotnet.rb +2 -0
- data/lib/raykit/environment.rb +22 -33
- data/lib/raykit/git.rb +8 -7
- data/lib/raykit/logging.rb +7 -2
- data/lib/raykit/rake.rb +27 -24
- data/lib/raykit/timer.rb +10 -6
- data/lib/raykit/version.rb +2 -0
- metadata +13 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b317f633ca2cb66a7f82a200081804a133d96b5aa3a22a8a50857b69468954e2
|
4
|
+
data.tar.gz: 3af4b61349f2d5fbce324db2116c214dc83b56fd08a7bfff3f514b2898ac9ff3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 311ab8cf559de63e1fc696c72d31de74b7a534b12a16ab8e6ec9d3c14acd270f224a0844a0f1751d5f0909e30f5e753922bc9f193956a3d2d03389671043cbaf
|
7
|
+
data.tar.gz: cf2d8fa22bf9071247693857a436a01be66204ccae06cf89a56df7c4a7f09290d1eed663b06d7530935a2444ae6d5486f33af0c809b3190dc4061bb30efa334a
|
data/README.md
CHANGED
data/lib/raykit.rb
CHANGED
@@ -6,20 +6,22 @@ require_relative './raykit/environment.rb'
|
|
6
6
|
require_relative './raykit/logging.rb'
|
7
7
|
require_relative './raykit/command.rb'
|
8
8
|
require_relative './raykit/rake.rb'
|
9
|
-
#require_relative './raykit/runner.rb'
|
10
9
|
require_relative './raykit/console.rb'
|
11
10
|
require 'rainbow'
|
12
11
|
require 'rake/clean'
|
13
12
|
require 'open3'
|
13
|
+
require 'rake/testtask'
|
14
|
+
|
15
|
+
TIMER= Raykit::Timer.new
|
16
|
+
LOG = Raykit::Logging.new
|
14
17
|
|
15
|
-
#CLEAN.include("**/bin","**/obj")
|
16
18
|
|
17
19
|
module Raykit
|
18
20
|
def Raykit.run(command)
|
21
|
+
|
22
|
+
LOG.log('Raykit.run',Logger::Severity::DEBUG,"begin executing #{command}")
|
19
23
|
cmd = Command.new(command)
|
20
|
-
|
21
|
-
#cmd.run()#command)
|
22
|
-
elapsed_str = Timer.get_elapsed_str(cmd.elapsed)
|
24
|
+
elapsed_str = Timer.get_elapsed_str(cmd.elapsed,0)
|
23
25
|
if(cmd.exitstatus == 0)
|
24
26
|
puts elapsed_str + " " + Rainbow(cmd.command).yellow.bright
|
25
27
|
return elapsed_str + " " + cmd.command
|
data/lib/raykit/command.rb
CHANGED
@@ -2,12 +2,19 @@ require 'open3'
|
|
2
2
|
require 'timeout'
|
3
3
|
require 'json'
|
4
4
|
require 'logger'
|
5
|
-
BUFFER_SIZE=1024 if(!defined?(BUFFER_SIZE))
|
6
5
|
|
6
|
+
BUFFER_SIZE=1024 if(!defined?(BUFFER_SIZE))
|
7
7
|
module Raykit
|
8
|
+
# Functionality to support executing and logging system commands
|
8
9
|
class Command
|
10
|
+
# The timeout in seconds, defaults to 0 if not specified
|
9
11
|
attr_accessor :timeout
|
10
|
-
|
12
|
+
# The working directory, defaults the current directory if not specified
|
13
|
+
attr_accessor :directory
|
14
|
+
# The start time
|
15
|
+
attr_accessor :start_time
|
16
|
+
# The execution time in seconds
|
17
|
+
attr_accessor :elapsed
|
11
18
|
attr_accessor :command,:output,:error,:exitstatus
|
12
19
|
|
13
20
|
def init_defaults
|
@@ -29,6 +36,7 @@ module Raykit
|
|
29
36
|
end
|
30
37
|
|
31
38
|
def run()
|
39
|
+
#buffer_size=1024
|
32
40
|
@start_time = Time.now
|
33
41
|
timer = Timer.new
|
34
42
|
if(@timeout == 0)
|
data/lib/raykit/console.rb
CHANGED
@@ -2,6 +2,7 @@ require 'optparse'
|
|
2
2
|
|
3
3
|
module Raykit
|
4
4
|
|
5
|
+
# Parses the command line arguments for the Raykit console application
|
5
6
|
class Parser
|
6
7
|
def self.parse(options)
|
7
8
|
hash=Hash.new
|
@@ -20,7 +21,11 @@ module Raykit
|
|
20
21
|
|
21
22
|
opts.on('-r','--rake [PATTERN]','rake [PATTERN]') do |pattern|
|
22
23
|
hash[:verb]="rake"
|
23
|
-
|
24
|
+
if(pattern.nil?)
|
25
|
+
hash[:pattern] = ''
|
26
|
+
else
|
27
|
+
hash[:pattern]=pattern
|
28
|
+
end
|
24
29
|
return hash
|
25
30
|
end
|
26
31
|
|
@@ -35,6 +40,7 @@ module Raykit
|
|
35
40
|
end
|
36
41
|
end
|
37
42
|
|
43
|
+
# The implementation for the raykit console application
|
38
44
|
class Console
|
39
45
|
def self.run
|
40
46
|
if(ARGV.length == 0)
|
@@ -89,18 +95,22 @@ module Raykit
|
|
89
95
|
def self.rake(hash)
|
90
96
|
Raykit::Git::remote_urls.each{|remote|
|
91
97
|
if(remote.include?(hash[:pattern]))
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
98
|
+
begin
|
99
|
+
puts "remote: #{remote}"
|
100
|
+
cmd = Raykit::Rake::run(remote,'master')
|
101
|
+
elapsed_str = Timer.get_elapsed_str(cmd.elapsed)
|
102
|
+
if(cmd.exitstatus == 0)
|
103
|
+
puts elapsed_str + " " + Rainbow(cmd.command).yellow.bright + " (#{cmd.directory})"
|
104
|
+
#return elapsed_str + " " + cmd.command
|
105
|
+
else
|
106
|
+
puts "\r\n" + cmd.command + "\r\n"
|
107
|
+
puts "\r\n" + cmd.output + "\r\n"
|
108
|
+
puts "\r\n" + cmd.error + "\r\n"
|
109
|
+
puts ''
|
110
|
+
puts Rainbow(elapsed_str).red.bright + " " + Rainbow(cmd.command).white
|
111
|
+
end
|
112
|
+
rescue
|
113
|
+
puts 'rescued...'
|
104
114
|
end
|
105
115
|
end
|
106
116
|
}
|
data/lib/raykit/dotnet.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
module Raykit
|
2
2
|
class DotNet
|
3
|
+
# initialize a C# library
|
3
4
|
def self.initialize_csharp_lib(name)
|
4
5
|
if(!Dir.exists?(name))
|
5
6
|
FileUtils.mkdir(name)
|
@@ -19,6 +20,7 @@ module Raykit
|
|
19
20
|
end
|
20
21
|
end
|
21
22
|
|
23
|
+
# initialize a C# console application
|
22
24
|
def self.initialize_csharp_console(name)
|
23
25
|
if(!Dir.exists?(name))
|
24
26
|
FileUtils.mkdir(name)
|
data/lib/raykit/environment.rb
CHANGED
@@ -1,52 +1,41 @@
|
|
1
|
+
require 'pathname'
|
1
2
|
|
2
3
|
module Raykit
|
4
|
+
# Provides functionality related to the development environment
|
3
5
|
class Environment
|
4
|
-
|
5
|
-
|
6
|
+
# Normalize a directory or filename to use forward slashes
|
7
|
+
def self.normalize_path(name)
|
8
|
+
name.gsub('\\','/')
|
6
9
|
end
|
7
10
|
|
11
|
+
# The root directory for the development environment.
|
12
|
+
# May be set using the environment variable DEV_ROOT,
|
13
|
+
# otherwise defaults to the user home directory
|
8
14
|
def self.root_dir
|
9
|
-
if(
|
15
|
+
if(ENV['DEV_ROOT'].nil?)
|
10
16
|
Environment::home_dir
|
11
17
|
else
|
12
|
-
|
18
|
+
normalize_path(ENV['DEV_ROOT'])
|
13
19
|
end
|
14
20
|
end
|
15
21
|
|
22
|
+
# The user home directory
|
16
23
|
def self.home_dir
|
17
|
-
|
24
|
+
normalize_path(ENV['HOME'])
|
18
25
|
end
|
19
26
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
log_dir
|
26
|
-
end
|
27
|
-
|
28
|
-
def self.work_dir
|
29
|
-
work_dir = "#{Environment::root_dir}/work"
|
30
|
-
if(!Dir.exist?(work_dir))
|
31
|
-
Dir.mkdir(work_dir)
|
32
|
-
end
|
33
|
-
work_dir
|
27
|
+
# Get, and create if it does not exist, a specific development directory
|
28
|
+
def self.get_dev_dir(name)
|
29
|
+
dir = Pathname.new("#{Environment::root_dir}/#{name}")
|
30
|
+
dir.mkpath
|
31
|
+
dir.to_s
|
34
32
|
end
|
35
33
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
work_dir
|
42
|
-
end
|
43
|
-
|
44
|
-
def self.tmp_dir
|
45
|
-
dir = "#{Environment::root_dir}/tmp"
|
46
|
-
if(!Dir.exist?(dir))
|
47
|
-
Dir.mkdir(dir)
|
48
|
-
end
|
49
|
-
dir
|
34
|
+
# Get the size of a directory and its contents
|
35
|
+
def self.get_dir_size(dir)
|
36
|
+
Dir.glob(File.join(dir, '**', '*'))
|
37
|
+
.map{ |f| File.size(f) }
|
38
|
+
.inject(:+)
|
50
39
|
end
|
51
40
|
end
|
52
41
|
end
|
data/lib/raykit/git.rb
CHANGED
@@ -33,6 +33,11 @@ module Raykit
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
+
# get the latest tag for the current directory
|
37
|
+
def self.get_latest_tag
|
38
|
+
`git describe --abbrev=0 --tags`.strip
|
39
|
+
end
|
40
|
+
|
36
41
|
def self.get_current_branch
|
37
42
|
text=`git branch`
|
38
43
|
if(text.include?('HEAD detached'))
|
@@ -45,17 +50,13 @@ module Raykit
|
|
45
50
|
end
|
46
51
|
|
47
52
|
def self.get_latest_commit(remote,branch)
|
48
|
-
clone_dir="#{Environment::
|
53
|
+
clone_dir="#{Environment::get_dev_dir('clone')}/#{get_relative_path(remote)}"
|
49
54
|
if(!Dir.exist?(clone_dir))
|
50
55
|
parent_dir = File.expand_path('..',clone_dir)
|
51
56
|
if(!Dir.exist?(parent_dir))
|
52
57
|
FileUtils.mkdir_p(parent_dir)
|
53
58
|
end
|
54
59
|
Command.new("git clone #{remote} #{clone_dir}")
|
55
|
-
#puts "cmd.command=#{cmd.command}"
|
56
|
-
#puts "cmd.exitstatus=#{cmd.exitstatus}"
|
57
|
-
#puts "cmd.output=#{cmd.output}"
|
58
|
-
#puts "cmd.error=#{cmd.error}"
|
59
60
|
end
|
60
61
|
Dir.chdir(clone_dir) do
|
61
62
|
Command.new('git pull')
|
@@ -96,7 +97,7 @@ module Raykit
|
|
96
97
|
end
|
97
98
|
|
98
99
|
def self.remote_urls
|
99
|
-
filename="#{Environment::
|
100
|
+
filename="#{Environment::get_dev_dir('log')}/Raykit.Git.RemoteUrls.json";
|
100
101
|
if(File.exist?(filename))
|
101
102
|
JSON.parse(File.read(filename))
|
102
103
|
else
|
@@ -105,7 +106,7 @@ module Raykit
|
|
105
106
|
end
|
106
107
|
|
107
108
|
def self.remote_urls=(urls)
|
108
|
-
filename="#{Environment::
|
109
|
+
filename="#{Environment::get_dev_dir('log')}/Raykit.Git.RemoteUrls.json"
|
109
110
|
File.open(filename,'w'){|f|
|
110
111
|
f.write(JSON.generate(urls))
|
111
112
|
}
|
data/lib/raykit/logging.rb
CHANGED
@@ -5,14 +5,19 @@ module Raykit
|
|
5
5
|
class Logging
|
6
6
|
attr_accessor :enabled,:loggers
|
7
7
|
|
8
|
+
# Logger::Severity DEBUG,ERROR,FATAL,INFO,UNKOWN,WARN
|
9
|
+
# defaults to WARN
|
10
|
+
attr_accessor :severity
|
11
|
+
|
8
12
|
def initialize()
|
9
13
|
@enabled = true
|
10
14
|
@loggers = Hash.new
|
15
|
+
@severity= Logger::Severity::WARN
|
11
16
|
end
|
12
17
|
|
13
18
|
def get_logger(context)
|
14
19
|
if(!loggers.has_key?(context))
|
15
|
-
Dir.chdir(Environment::
|
20
|
+
Dir.chdir(Environment::get_dev_dir('log')) do
|
16
21
|
# start the log over whenever the log exceeds 100 megabytes in size
|
17
22
|
loggers[context] = Logger.new("#{context}.log",0,100*1024*1024)
|
18
23
|
end
|
@@ -41,5 +46,5 @@ module Raykit
|
|
41
46
|
end
|
42
47
|
end
|
43
48
|
|
44
|
-
|
49
|
+
|
45
50
|
end
|
data/lib/raykit/rake.rb
CHANGED
@@ -3,31 +3,34 @@ require 'time'
|
|
3
3
|
module Raykit
|
4
4
|
class Rake
|
5
5
|
def self.run(remote,branch,task='default')
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
6
|
+
begin
|
7
|
+
rel_dir=Raykit::Git::get_relative_path(remote)
|
8
|
+
commit=Raykit::Git::get_latest_commit(remote,branch)
|
9
|
+
log_filename="#{Environment::get_dev_dir('log')}/RayKit.Runner/#{rel_dir}/#{branch}/#{commit}.json"
|
10
|
+
if(File.exist?(log_filename))
|
11
|
+
return Command.parse(File.read(log_filename))
|
12
|
+
else
|
13
|
+
run_dir="#{Environment::get_dev_dir('tmp')}/#{Git::get_relative_path(remote)}.#{branch}.#{commit}"
|
14
|
+
if(!Dir.exist?(run_dir))
|
15
|
+
parent_dir = File.expand_path('..',run_dir)
|
16
|
+
if(!Dir.exist?(parent_dir))
|
17
|
+
FileUtils.mkdir_p(parent_dir)
|
18
|
+
end
|
19
|
+
cmd = Command.new("git clone #{remote} #{run_dir}")
|
20
|
+
end
|
21
|
+
Dir.chdir(run_dir) do
|
22
|
+
cmd = Command.new("rake #{task}")
|
23
|
+
parent_dir = File.dirname(log_filename)
|
24
|
+
if(!Dir.exist?(parent_dir))
|
25
|
+
FileUtils.mkdir_p(parent_dir)
|
26
|
+
end
|
27
|
+
File.open(log_filename,'w'){|f|
|
28
|
+
f.write(JSON.generate(cmd.to_hash))
|
29
|
+
}
|
30
|
+
return cmd
|
31
|
+
end
|
30
32
|
end
|
33
|
+
rescue
|
31
34
|
end
|
32
35
|
end
|
33
36
|
end
|
data/lib/raykit/timer.rb
CHANGED
@@ -1,24 +1,28 @@
|
|
1
1
|
require 'time'
|
2
2
|
|
3
3
|
module Raykit
|
4
|
+
# Provides functionality to record the time execution times
|
4
5
|
class Timer
|
6
|
+
# The time at which start occurred
|
5
7
|
attr_accessor :start_time
|
6
8
|
|
7
9
|
def initialize
|
8
10
|
@start_time=Time.now
|
9
11
|
end
|
10
12
|
|
11
|
-
|
13
|
+
# The elapsed time, in seconds, since the timer started
|
14
|
+
def elapsed
|
12
15
|
return Time.now-@start_time
|
13
16
|
end
|
14
17
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
+
# The elapsed time, in seconds, as a formatted string
|
19
|
+
def elapsed_str(pad=0)
|
20
|
+
Timer.get_elapsed_str(elapsed,pad)
|
18
21
|
end
|
19
22
|
|
20
|
-
|
21
|
-
|
23
|
+
# Converts a time span in seconds to a formatted string
|
24
|
+
def self.get_elapsed_str(elapsed,pad=0)
|
25
|
+
"[" + "%.0f" % (elapsed) + "s]".ljust(pad)
|
22
26
|
end
|
23
27
|
end
|
24
28
|
end
|
data/lib/raykit/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: raykit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.49
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lou Parslow
|
@@ -14,44 +14,44 @@ dependencies:
|
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
19
|
+
version: '2.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
26
|
+
version: '2.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: yard
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
33
|
+
version: '0.9'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
40
|
+
version: '0.9'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rainbow
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
47
|
+
version: '3.0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
54
|
+
version: '3.0'
|
55
55
|
description: supports common ci/cd development tasks
|
56
56
|
email: lou.parslow@gmail.com
|
57
57
|
executables:
|