raykit 0.0.32 → 0.0.33

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: dc2266065d0df37a80226e779a8f26f4b5c601799f3d192f0f9bbe4b3993a83f
4
- data.tar.gz: 2abf6c259c946bfd87daeb4ff8a8a998051c966ef566d305f4a622f994893bc3
3
+ metadata.gz: 218589240662e60620c795592b3267c89889088de85c49c89cb1c967d6261c64
4
+ data.tar.gz: baf5ea297191fd2b3df63b3a18bd40dc62a4b682a28a1bb0e80234b569bd0b69
5
5
  SHA512:
6
- metadata.gz: dadbae23b9756844415cfbbc2bb62dae2fbee6816d81e1cc2417693182a9d8f8dbb4193583d6e6f3b51c19315c7bf869de2bc816982031da0b8fce0ae2826dfd
7
- data.tar.gz: b4a29ab8e2c314440e2ba491589392535a4aefd18bbb97e77162ab19012418f89e10637c2a0be8ded613a782b649b821818814483f7519c4251fc8078052a1b3
6
+ metadata.gz: 6ad342a4609e7d3bee552f752b090925f396a69cab4754914dd90a1e68c9eddfb73242a63d7e0176767c59edde05adf6228a1706478cd075f6e5a4cff4d278f0
7
+ data.tar.gz: 80b3c4ab5631bdd3857caa4dca78f452015d620aa643c413859fdd09afb3f6a137606b9532139d771a8428988f1ee6e4eeb9b21abe1ed1da0b2b9b5fba685f76
data/lib/raykit.rb CHANGED
@@ -5,7 +5,8 @@ require_relative './raykit/version.rb'
5
5
  require_relative './raykit/environment.rb'
6
6
  require_relative './raykit/logging.rb'
7
7
  require_relative './raykit/command.rb'
8
- require_relative './raykit/runner.rb'
8
+ require_relative './raykit/rake.rb'
9
+ #require_relative './raykit/runner.rb'
9
10
  require_relative './raykit/console.rb'
10
11
  require 'rainbow'
11
12
  require 'rake/clean'
@@ -15,9 +16,9 @@ require 'open3'
15
16
 
16
17
  module Raykit
17
18
  def Raykit.run(command)
18
- cmd = Command.new
19
- cmd.command = command
20
- cmd.run()#command)
19
+ cmd = Command.new(command)
20
+ #cmd.command = command
21
+ #cmd.run()#command)
21
22
  elapsed_str = Timer.get_elapsed_str(cmd.elapsed)
22
23
  if(cmd.exitstatus == 0)
23
24
  puts elapsed_str + " " + Rainbow(cmd.command).yellow.bright
@@ -6,10 +6,11 @@ BUFFER_SIZE=1024 if(!defined?(BUFFER_SIZE))
6
6
 
7
7
  module Raykit
8
8
  class Command
9
- attr_accessor :directory,:timeout,:start_time,:elapsed
9
+ attr_accessor :timeout
10
+ attr_accessor :directory,:start_time,:elapsed
10
11
  attr_accessor :command,:output,:error,:exitstatus
11
12
 
12
- def initialize()
13
+ def init_defaults
13
14
  @timeout=0
14
15
  @directory = Dir.pwd
15
16
  @output = ''
@@ -17,6 +18,16 @@ module Raykit
17
18
  @exitstatus = 0
18
19
  end
19
20
 
21
+ def initialize(command,timeout=0)
22
+ init_defaults
23
+ @command=command
24
+ @timeout=timeout
25
+ if(@command.length > 0)
26
+ run
27
+ end
28
+ self
29
+ end
30
+
20
31
  def run()
21
32
  @start_time = Time.now
22
33
  timer = Timer.new
@@ -73,5 +84,22 @@ module Raykit
73
84
  hash[:exitstatus] = @exitstatus
74
85
  hash
75
86
  end
87
+
88
+ def from_hash(hash)
89
+ @command = hash["command"]
90
+ @directory=hash["directory"]
91
+ @timeout=hash["timeout"]
92
+ @start_time=hash["start_time"]
93
+ @elapsed=hash["elapsed"]
94
+ @output=hash["output"]
95
+ @error=hash["error"]
96
+ @exitstatus=hash["exitstatus"]
97
+ end
98
+
99
+ def self.parse(json)
100
+ cmd=Command.new('')
101
+ cmd.from_hash(JSON.parse(json))
102
+ cmd
103
+ end
76
104
  end
77
105
  end
@@ -6,35 +6,25 @@ module Raykit
6
6
 
7
7
  class Parser
8
8
  def self.parse(options)
9
+ hash=Hash.new
9
10
  args = Options.new("world")
10
11
  opt_parser = OptionParser.new do |opts|
11
12
  opts.banner = "Usage: raykit [options]"
12
13
  opts.on('-l','--list [PATTERN]','list remotes') do |pattern|
13
- Raykit::Git::remote_urls.each{|url|
14
- if(pattern.nil? || url.include?(pattern))
15
- puts Rainbow(url).yellow.bright
16
- end
17
- }
18
- exit
14
+ hash[:verb]="list"
15
+ hash[:pattern]=pattern
16
+ return hash
19
17
  end
20
18
 
21
19
  opts.on('-i','--import','import remotes') do |import|
22
- puts 'scanning...'
23
- scanned_remotes = Raykit::Git::scan_remote_urls
24
- remotes = Raykit::Git::remote_urls
25
- count = 0
26
- scanned_remotes.each{|remote|
27
- if(!remotes.include?(remote))
28
- puts "imported " + Rainbow(remote).yellow.bright
29
- remotes.insert(0,remote)
30
- count = count + 1
31
- end
32
- }
33
- if(count > 0)
34
- puts 'updating Raykit::Git::remote_urls'
35
- Raykit::Git::remote_urls = remotes
36
- end
37
- exit
20
+ hash[:verb]="import"
21
+ return hash
22
+ end
23
+
24
+ opts.on('-r','--rake [REMOTE]','rake [REMOTE]') do |remote|
25
+ hash[:verb]="rake"
26
+ hash[:remote]=remote
27
+ return hash
38
28
  end
39
29
 
40
30
  opts.on('-h','--help','help') do
@@ -44,7 +34,7 @@ module Raykit
44
34
  end
45
35
 
46
36
  opt_parser.parse!(options)
47
- return args
37
+ hash
48
38
  end
49
39
  end
50
40
 
@@ -54,7 +44,64 @@ module Raykit
54
44
  Parser.parse %w[--help]
55
45
  0
56
46
  else
57
- Parser.parse ARGV
47
+ hash = Parser.parse ARGV
48
+ #puts "hash: #{hash.to_s}"
49
+ if(hash.include?(:verb))
50
+ verb = hash[:verb]
51
+ case verb
52
+ when 'list'
53
+ list(hash)
54
+ when 'import'
55
+ import(hash)
56
+ when 'rake'
57
+ rake(hash)
58
+ end
59
+ end
60
+ end
61
+ end
62
+
63
+ def self.list(hash)
64
+ pattern=nil
65
+ if(hash.include?(:pattern))
66
+ pattern=hash[:pattern]
67
+ end
68
+ Raykit::Git::remote_urls.each{|url|
69
+ if(pattern.nil? || url.include?(pattern))
70
+ puts Rainbow(url).yellow.bright
71
+ end
72
+ }
73
+ end
74
+
75
+ def self.import(hash)
76
+ puts 'scanning...'
77
+ scanned_remotes = Raykit::Git::scan_remote_urls
78
+ remotes = Raykit::Git::remote_urls
79
+ count = 0
80
+ scanned_remotes.each{|remote|
81
+ if(!remotes.include?(remote))
82
+ puts "imported " + Rainbow(remote).yellow.bright
83
+ remotes.insert(0,remote)
84
+ count = count + 1
85
+ end
86
+ }
87
+ if(count > 0)
88
+ puts 'updating Raykit::Git::remote_urls'
89
+ Raykit::Git::remote_urls = remotes
90
+ end
91
+ end
92
+
93
+ def self.rake(hash)
94
+ cmd = Raykit::Rake::run(hash[:remote],'master')
95
+ elapsed_str = Timer.get_elapsed_str(cmd.elapsed)
96
+ if(cmd.exitstatus == 0)
97
+ puts elapsed_str + " " + Rainbow(cmd.command).yellow.bright + " (#{cmd.directory})"
98
+ return elapsed_str + " " + cmd.command
99
+ else
100
+ puts "\r\n" + cmd.command + "\r\n"
101
+ puts "\r\n" + cmd.output + "\r\n"
102
+ puts "\r\n" + cmd.error + "\r\n"
103
+ puts ''
104
+ abort Rainbow(elapsed_str).red.bright + " " + Rainbow(cmd.command).white
58
105
  end
59
106
  end
60
107
  end
@@ -32,6 +32,22 @@ module Raykit
32
32
  end
33
33
  work_dir
34
34
  end
35
+
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
50
+ end
35
51
  end
36
52
  end
37
53
 
data/lib/raykit/git.rb CHANGED
@@ -33,24 +33,49 @@ module Raykit
33
33
  end
34
34
  end
35
35
 
36
- def self.get_remote
37
- if(Dir.exist?('.git'))
36
+ def self.get_current_branch
37
+ `git branch`.scan(/\*\s([\w\.-]+)/)[0][0].to_s
38
+ end
39
+
40
+ def self.get_latest_commit(remote,branch)
41
+ clone_dir="#{Environment::clone_dir}/#{get_relative_path(remote)}"
42
+ if(!Dir.exist?(clone_dir))
43
+ parent_dir = File.expand_path('..',clone_dir)
44
+ if(!Dir.exist?(parent_dir))
45
+ FileUtils.mkdir_p(parent_dir)
46
+ end
38
47
  cmd = Command.new
39
- cmd.command = 'git config --get remote.origin.url'
48
+ cmd.command = "git clone #{remote} #{clone_dir}"
40
49
  cmd.run
50
+ else
51
+ Dir.chdir(clone_dir) do
52
+ cmd = Command.new('git pull')
53
+ #cmd.run
54
+ if(get_current_branch != branch)
55
+ cmd.command = "git checkout #{branch}"
56
+ end
57
+ return `git log --name-status HEAD^..HEAD`.scan(/commit ([\w]+)\s/)[0][0].to_s
58
+ end
59
+ end
60
+ end
61
+
62
+ def self.get_relative_path(remote)
63
+ remote.gsub('https://','').gsub('.git','')
64
+ end
65
+
66
+ def self.get_remote
67
+ if(Dir.exist?('.git'))
68
+ cmd = Command.new('git config --get remote.origin.url')
69
+ #cmd.run
41
70
  return cmd.output.strip
42
71
  else
43
72
  ``
44
73
  end
45
74
  end
75
+
46
76
  def self.add_remote
47
77
  remote = get_remote
48
78
  if(remote.length > 0)
49
- #if(Dir.exist?('.git'))
50
- #cmd = Command.new
51
- #cmd.command = 'git config --get remote.origin.url'
52
- #cmd.run
53
- #remote = cmd.output.strip
54
79
  remote_urls_copy = remote_urls
55
80
  if(!remote_urls_copy.include?(remote))
56
81
  remote_urls_copy.insert(0,remote)
@@ -0,0 +1,34 @@
1
+ require 'time'
2
+
3
+ module Raykit
4
+ class Rake
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
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
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.32
4
+ version: 0.0.33
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lou Parslow
@@ -69,7 +69,7 @@ files:
69
69
  - lib/raykit/environment.rb
70
70
  - lib/raykit/git.rb
71
71
  - lib/raykit/logging.rb
72
- - lib/raykit/runner.rb
72
+ - lib/raykit/rake.rb
73
73
  - lib/raykit/timer.rb
74
74
  - lib/raykit/version.rb
75
75
  homepage: http://rubygems.org/gems/raykit
@@ -91,7 +91,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
91
  - !ruby/object:Gem::Version
92
92
  version: '0'
93
93
  requirements: []
94
- rubygems_version: 3.0.3
94
+ rubyforge_project:
95
+ rubygems_version: 2.7.9
95
96
  signing_key:
96
97
  specification_version: 4
97
98
  summary: ruby gem to support rake ci/cd tasks
data/lib/raykit/runner.rb DELETED
@@ -1,10 +0,0 @@
1
- require 'time'
2
-
3
- module Raykit
4
- class Runner
5
-
6
-
7
- def self.run(remote)
8
- end
9
- end
10
- end