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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 813784e2e2ef134abf5ef7eb7b4ba008af772e3f515ee6b7ad39a986ef115189
4
- data.tar.gz: 3481d836aa38b596be652dd76dedf8ef5260ed0aaf4634a9cdebbde6b6135056
3
+ metadata.gz: b317f633ca2cb66a7f82a200081804a133d96b5aa3a22a8a50857b69468954e2
4
+ data.tar.gz: 3af4b61349f2d5fbce324db2116c214dc83b56fd08a7bfff3f514b2898ac9ff3
5
5
  SHA512:
6
- metadata.gz: 90e04166fb5a294b4843b2e86a09906949bda4ca6296fe87a58e12487bfe64470c127e5eaaea2982d72adb2d4f6fd9f2a76c65e600ca4e743749e9ee8c9553fc
7
- data.tar.gz: 0d62b92d187aaa6c4d856f58ea52e66b6c3ba449e6bcd177777a8a200ba8ae617fcb39186c9c63319deb38e46630fb5e562697bea21425544963fab0920a5572
6
+ metadata.gz: 311ab8cf559de63e1fc696c72d31de74b7a534b12a16ab8e6ec9d3c14acd270f224a0844a0f1751d5f0909e30f5e753922bc9f193956a3d2d03389671043cbaf
7
+ data.tar.gz: cf2d8fa22bf9071247693857a436a01be66204ccae06cf89a56df7c4a7f09290d1eed663b06d7530935a2444ae6d5486f33af0c809b3190dc4061bb30efa334a
data/README.md CHANGED
@@ -1,3 +1,3 @@
1
- # rakit
1
+ # raykit
2
2
 
3
3
  ruby gem supporting rake ci/cd tasks
@@ -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
- #cmd.command = command
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
@@ -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
- attr_accessor :directory,:start_time,:elapsed
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)
@@ -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
- hash[:pattern]=pattern
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
- puts "remote: #{remote}"
93
- cmd = Raykit::Rake::run(remote,'master')
94
- elapsed_str = Timer.get_elapsed_str(cmd.elapsed)
95
- if(cmd.exitstatus == 0)
96
- puts elapsed_str + " " + Rainbow(cmd.command).yellow.bright + " (#{cmd.directory})"
97
- return elapsed_str + " " + cmd.command
98
- else
99
- puts "\r\n" + cmd.command + "\r\n"
100
- puts "\r\n" + cmd.output + "\r\n"
101
- puts "\r\n" + cmd.error + "\r\n"
102
- puts ''
103
- abort Rainbow(elapsed_str).red.bright + " " + Rainbow(cmd.command).white
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
  }
@@ -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)
@@ -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
- def self.get_env key
5
- ENV[key]
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(get_env('DEV_ROOT').nil?)
15
+ if(ENV['DEV_ROOT'].nil?)
10
16
  Environment::home_dir
11
17
  else
12
- get_env('DEV_ROOT').gsub('\\','/')
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
- get_env('HOME').gsub('\\','/')
24
+ normalize_path(ENV['HOME'])
18
25
  end
19
26
 
20
- def self.log_dir
21
- log_dir = "#{Environment::root_dir}/log"
22
- if(!Dir.exist?(log_dir))
23
- Dir.mkdir(log_dir)
24
- end
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
- def self.clone_dir
37
- work_dir = "#{Environment::root_dir}/work"
38
- if(!Dir.exist?(work_dir))
39
- Dir.mkdir(work_dir)
40
- end
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
@@ -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::clone_dir}/#{get_relative_path(remote)}"
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::log_dir}/Raykit.Git.RemoteUrls.json";
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::log_dir}/Raykit.Git.RemoteUrls.json"
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
  }
@@ -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::log_dir) do
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
- LOG = Logging.new
49
+
45
50
  end
@@ -3,31 +3,34 @@ require 'time'
3
3
  module Raykit
4
4
  class Rake
5
5
  def self.run(remote,branch,task='default')
6
- rel_dir=Raykit::Git::get_relative_path(remote)
7
- commit=Raykit::Git::get_latest_commit(remote,branch)
8
- log_filename="#{Environment::log_dir}/RayKit.Runner/#{rel_dir}/#{branch}/#{commit}.json"
9
- if(File.exist?(log_filename))
10
- return Command.parse(File.read(log_filename))
11
- else
12
- run_dir="#{Environment::tmp_dir}/#{Git::get_relative_path(remote)}.#{branch}.#{commit}"
13
- if(!Dir.exist?(run_dir))
14
- parent_dir = File.expand_path('..',run_dir)
15
- if(!Dir.exist?(parent_dir))
16
- FileUtils.mkdir_p(parent_dir)
17
- end
18
- cmd = Command.new("git clone #{remote} #{run_dir}")
19
- end
20
- Dir.chdir(run_dir) do
21
- cmd = Command.new("rake #{task}")
22
- parent_dir = File.dirname(log_filename)
23
- if(!Dir.exist?(parent_dir))
24
- FileUtils.mkdir_p(parent_dir)
25
- end
26
- File.open(log_filename,'w'){|f|
27
- f.write(JSON.generate(cmd.to_hash))
28
- }
29
- return cmd
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
@@ -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
- def elapsed # in seconds
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
- def elapsed_str
16
- get_elapsed_str(elapsed)
17
- #"[" + "%.0f" % (elapsed) + "s]"
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
- def self.get_elapsed_str(elapsed)
21
- "[" + "%.0f" % (elapsed) + "s]"
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
@@ -1,7 +1,9 @@
1
1
  module Raykit
2
+ # Version functionality
2
3
  class Version
3
4
  attr_accessor :start_time
4
5
 
6
+ # detect a version number based on the NAME variable, if defined
5
7
  def self.detect
6
8
  if(defined?(NAME))
7
9
  csproj_filename = "#{NAME}/#{NAME}.csproj"
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.48
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: