raystool 1.0.2
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.
- data/bin/__rays_exec.rb +31 -0
- data/bin/__rays_init +79 -0
- data/lib/rays/config/backup.rb +42 -0
- data/lib/rays/config/configuration.rb +376 -0
- data/lib/rays/config/environment.rb +73 -0
- data/lib/rays/config/templates/global/global.yml +3 -0
- data/lib/rays/config/templates/global/scripts/rays +187 -0
- data/lib/rays/config/templates/project/.rays +0 -0
- data/lib/rays/config/templates/project/config/environment.yml +68 -0
- data/lib/rays/config/templates/project/config/project.yml +4 -0
- data/lib/rays/core.rb +128 -0
- data/lib/rays/exceptions/rays_exception.rb +25 -0
- data/lib/rays/interface/commander.rb +394 -0
- data/lib/rays/interface/controller.rb +365 -0
- data/lib/rays/loaders/highline.rb +24 -0
- data/lib/rays/loaders/logging.rb +60 -0
- data/lib/rays/models/appmodule/base.rb +185 -0
- data/lib/rays/models/appmodule/content.rb +35 -0
- data/lib/rays/models/appmodule/ext.rb +36 -0
- data/lib/rays/models/appmodule/hook.rb +36 -0
- data/lib/rays/models/appmodule/layout.rb +36 -0
- data/lib/rays/models/appmodule/manager.rb +130 -0
- data/lib/rays/models/appmodule/portlet.rb +36 -0
- data/lib/rays/models/appmodule/servicebuilder.rb +36 -0
- data/lib/rays/models/appmodule/theme.rb +36 -0
- data/lib/rays/models/project.rb +116 -0
- data/lib/rays/servers/base.rb +70 -0
- data/lib/rays/servers/database.rb +73 -0
- data/lib/rays/servers/liferay.rb +64 -0
- data/lib/rays/servers/solr.rb +111 -0
- data/lib/rays/services/application_service.rb +116 -0
- data/lib/rays/services/backup_service.rb +94 -0
- data/lib/rays/services/database.rb +59 -0
- data/lib/rays/services/remote.rb +75 -0
- data/lib/rays/services/scm.rb +92 -0
- data/lib/rays/services/sync.rb +90 -0
- data/lib/rays/utils/common_utils.rb +153 -0
- data/lib/rays/utils/file_utils.rb +118 -0
- data/lib/rays/utils/network_utils.rb +50 -0
- data/lib/rays/workers/base.rb +134 -0
- data/lib/rays/workers/builder.rb +63 -0
- data/lib/rays/workers/cleaner.rb +42 -0
- data/lib/rays/workers/deployer.rb +92 -0
- data/lib/rays/workers/generator.rb +49 -0
- metadata +175 -0
@@ -0,0 +1,153 @@
|
|
1
|
+
=begin
|
2
|
+
Copyright (c) 2012 Dmitri Carpov
|
3
|
+
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
a copy of this software and associated documentation files (the
|
6
|
+
"Software"), to deal in the Software without restriction, including
|
7
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be
|
13
|
+
included in all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
=end
|
23
|
+
|
24
|
+
#
|
25
|
+
# 1. Execution pointcuts
|
26
|
+
# 2. General use methods
|
27
|
+
#
|
28
|
+
|
29
|
+
# 1. Execution pointcuts
|
30
|
+
|
31
|
+
#
|
32
|
+
# Execute a given block and process any exception with a proper logging.
|
33
|
+
#
|
34
|
+
def log_block(message)
|
35
|
+
begin
|
36
|
+
yield
|
37
|
+
rescue RaysException => e
|
38
|
+
$log.error(e)
|
39
|
+
$log.debug("#{e}:\tBacktrace:\r\n#{e.backtrace.join("\r\n")}")
|
40
|
+
raise e
|
41
|
+
rescue => e
|
42
|
+
$log.error("Cannot #{message}.")
|
43
|
+
$log.debug("#{e}:\tBacktrace:\r\n#{e.backtrace.join("\r\n")}")
|
44
|
+
raise e
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
#
|
49
|
+
# Wrap a given block with progress information.
|
50
|
+
#
|
51
|
+
def task(start_message, done_message, failed_message)
|
52
|
+
begin
|
53
|
+
$log.info("<!#{start_message}!>")
|
54
|
+
yield
|
55
|
+
$log.info(done_message)
|
56
|
+
rescue => e
|
57
|
+
$log.error("#{failed_message}\nreason: #{e.message}")
|
58
|
+
$log.debug("#{e}.:\tBacktrace:\r\n#{e.backtrace.join("\r\n")}")
|
59
|
+
raise e
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
#
|
64
|
+
# Block console output for a given block.
|
65
|
+
#
|
66
|
+
def silent
|
67
|
+
begin
|
68
|
+
orig_stdout = $stdout.dup # does a dup2() internally
|
69
|
+
$stdout.reopen('/dev/null', 'w')
|
70
|
+
yield
|
71
|
+
ensure
|
72
|
+
$stdout.reopen(orig_stdout)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
# 2. General use methods
|
78
|
+
|
79
|
+
#
|
80
|
+
# Execute OS command.
|
81
|
+
#
|
82
|
+
def rays_exec(command)
|
83
|
+
success = false
|
84
|
+
if $log.debug?
|
85
|
+
success = system command
|
86
|
+
else
|
87
|
+
silent { success = system command }
|
88
|
+
end
|
89
|
+
raise RaysException.new("Failed to execute: #{command}") unless success
|
90
|
+
success
|
91
|
+
end
|
92
|
+
|
93
|
+
#
|
94
|
+
# Safe execute. Use it for user input commands.
|
95
|
+
#
|
96
|
+
def rays_safe_exec(command, *args)
|
97
|
+
SafeShell.execute(command, *args)
|
98
|
+
end
|
99
|
+
|
100
|
+
#
|
101
|
+
# Execute a given code a directory.
|
102
|
+
#
|
103
|
+
def in_directory(directory)
|
104
|
+
original_directory = Dir.pwd
|
105
|
+
Dir.chdir(directory) if Dir.exist?(directory)
|
106
|
+
begin
|
107
|
+
yield
|
108
|
+
ensure
|
109
|
+
Dir.chdir(original_directory)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
#
|
114
|
+
# Execute a given command while liferay service is stopped.
|
115
|
+
#
|
116
|
+
def service_safe(stop = true)
|
117
|
+
environment = $rays_config.environment
|
118
|
+
if stop and environment.liferay.service.alive?
|
119
|
+
environment.liferay.service.stop
|
120
|
+
yield
|
121
|
+
environment.liferay.service.start
|
122
|
+
else
|
123
|
+
yield
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
#
|
128
|
+
# In local environment
|
129
|
+
#
|
130
|
+
def in_local_environment
|
131
|
+
original_environment_name = $rays_config.environment.name
|
132
|
+
begin
|
133
|
+
$rays_config.environment = 'local'
|
134
|
+
yield
|
135
|
+
ensure
|
136
|
+
$rays_config.environment = original_environment_name
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
#
|
141
|
+
# Create a missing option string
|
142
|
+
#
|
143
|
+
def missing_environment_option(name, option)
|
144
|
+
"#{name} does not contain #{option} information. see config/environment.yml"
|
145
|
+
end
|
146
|
+
|
147
|
+
#
|
148
|
+
# Check if command in the PATH
|
149
|
+
#
|
150
|
+
def command?(command)
|
151
|
+
system("which #{ command} > /dev/null 2>&1")
|
152
|
+
end
|
153
|
+
|
@@ -0,0 +1,118 @@
|
|
1
|
+
=begin
|
2
|
+
Copyright (c) 2012 Dmitri Carpov
|
3
|
+
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
a copy of this software and associated documentation files (the
|
6
|
+
"Software"), to deal in the Software without restriction, including
|
7
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be
|
13
|
+
included in all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
=end
|
23
|
+
|
24
|
+
module Rays
|
25
|
+
module Utils
|
26
|
+
module FileUtils
|
27
|
+
#
|
28
|
+
# Get parent path from a given path
|
29
|
+
#
|
30
|
+
def self.parent dir
|
31
|
+
return nil unless Dir.exists?(dir)
|
32
|
+
Pathname.new(dir).parent.to_s
|
33
|
+
end
|
34
|
+
|
35
|
+
#
|
36
|
+
# Find a file specified by regexp in a given directory recursively down.
|
37
|
+
#
|
38
|
+
def self.find_down dir, file
|
39
|
+
files = []
|
40
|
+
if Dir.exist?(dir)
|
41
|
+
Find.find(dir) do |file_path|
|
42
|
+
next unless file_path.match(file)
|
43
|
+
files << file_path
|
44
|
+
end
|
45
|
+
end
|
46
|
+
files
|
47
|
+
end
|
48
|
+
|
49
|
+
#
|
50
|
+
# Find a parent directory which contains a given file name (no patterns allowed)
|
51
|
+
#
|
52
|
+
def self.find_up file, dir = Dir.pwd, limit = '/'
|
53
|
+
return nil if dir.eql? limit or !dir.start_with?(limit)
|
54
|
+
return dir unless Dir.new(dir).find_index(file).nil?
|
55
|
+
find_up file, Pathname.new(dir).parent.to_s, limit
|
56
|
+
end
|
57
|
+
|
58
|
+
#
|
59
|
+
# Get list of child directory names of a given directory.
|
60
|
+
# Goes one level down only.
|
61
|
+
#
|
62
|
+
def self.find_directories path, hidden=false
|
63
|
+
dirs = []
|
64
|
+
Dir.glob("#{path}/*/").each do |dir|
|
65
|
+
dirs << File.basename(dir)
|
66
|
+
end
|
67
|
+
if hidden
|
68
|
+
Dir.glob("#{path}/.*/").each do |dir|
|
69
|
+
basename = File.basename(dir)
|
70
|
+
dirs << File.basename(dir) if basename != '.' and basename != '..'
|
71
|
+
end
|
72
|
+
end
|
73
|
+
dirs
|
74
|
+
end
|
75
|
+
|
76
|
+
#
|
77
|
+
# YamlFile allows to work with java .properties files as a ruby hash
|
78
|
+
#
|
79
|
+
class YamlFile
|
80
|
+
attr_reader :properties
|
81
|
+
|
82
|
+
def initialize(file)
|
83
|
+
@file_name = file
|
84
|
+
@properties = {}
|
85
|
+
@properties = YAML::load_file(File.open(@file_name)) || Hash.new
|
86
|
+
end
|
87
|
+
|
88
|
+
def write
|
89
|
+
File.open(@file_name, 'w') do |out|
|
90
|
+
YAML.dump(@properties, out)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
#
|
96
|
+
# PropertiesFile allows to work with java .properties files as a ruby hash
|
97
|
+
#
|
98
|
+
class PropertiesFile
|
99
|
+
attr_reader :properties
|
100
|
+
|
101
|
+
def initialize file
|
102
|
+
@file_name = file
|
103
|
+
@properties = {}
|
104
|
+
file = File.open(@file_name, 'r')
|
105
|
+
IO.foreach(file) do |line|
|
106
|
+
@properties[$1.strip] = $2 if line =~ /([^=]*)=(.*)\/\/(.*)/ || line =~ /([^=]*)=(.*)/
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def write
|
111
|
+
properties_file = File.new(@file_name, 'w+')
|
112
|
+
@properties.each { |key, value| properties_file.puts "#{key}=#{value}\n" }
|
113
|
+
properties_file.close
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
=begin
|
2
|
+
Copyright (c) 2012 Dmitri Carpov
|
3
|
+
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
a copy of this software and associated documentation files (the
|
6
|
+
"Software"), to deal in the Software without restriction, including
|
7
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be
|
13
|
+
included in all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
=end
|
23
|
+
|
24
|
+
module Rays
|
25
|
+
module Utils
|
26
|
+
class NetworkUtils
|
27
|
+
class << self
|
28
|
+
|
29
|
+
def port_open?(ip, port)
|
30
|
+
begin
|
31
|
+
Timeout::timeout(1) do
|
32
|
+
begin
|
33
|
+
s = TCPSocket.new(ip, port)
|
34
|
+
s.close
|
35
|
+
return true
|
36
|
+
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
|
37
|
+
return false
|
38
|
+
end
|
39
|
+
end
|
40
|
+
rescue Timeout::Error
|
41
|
+
return false
|
42
|
+
end
|
43
|
+
|
44
|
+
false
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
=begin
|
2
|
+
Copyright (c) 2012 Dmitri Carpov
|
3
|
+
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
a copy of this software and associated documentation files (the
|
6
|
+
"Software"), to deal in the Software without restriction, including
|
7
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be
|
13
|
+
included in all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
=end
|
23
|
+
module Rays
|
24
|
+
module Worker
|
25
|
+
class Manager
|
26
|
+
include Singleton
|
27
|
+
|
28
|
+
def initialize
|
29
|
+
@workers = {}
|
30
|
+
end
|
31
|
+
|
32
|
+
def register(type, name, worker_class)
|
33
|
+
@workers[type] = {} if @workers[type].nil?
|
34
|
+
@workers[type][name] = worker_class
|
35
|
+
end
|
36
|
+
|
37
|
+
def create(type, name)
|
38
|
+
if !@workers[type].nil? and !@workers[type][name].nil?
|
39
|
+
@workers[type][name].instance
|
40
|
+
else
|
41
|
+
raise RaysException.new("Cannot find #{type} #{name}")
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
class BaseWorker
|
47
|
+
def self.register(type, name)
|
48
|
+
Manager.instance.register(type, name, self)
|
49
|
+
end
|
50
|
+
|
51
|
+
def execute(process, app_module)
|
52
|
+
if app_module.nil? or !Dir.exist?(app_module.path)
|
53
|
+
raise RaysException.new("Do not know how to #{process} <!#{app_module.inspect}!>")
|
54
|
+
end
|
55
|
+
|
56
|
+
in_directory(app_module.path) do
|
57
|
+
task("#{process} <!#{app_module.type} #{app_module.name}!>", "done", "failed") do
|
58
|
+
yield
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
class MavenUtil
|
65
|
+
class << self
|
66
|
+
def link_to_parent(module_pom)
|
67
|
+
check_parent_pom
|
68
|
+
add_parent_pom_to module_pom
|
69
|
+
end
|
70
|
+
|
71
|
+
private
|
72
|
+
def check_parent_pom
|
73
|
+
in_directory($rays_config.project_root) do
|
74
|
+
unless File.exists?('pom.xml')
|
75
|
+
builder = Nokogiri::XML::Builder.new do |xml|
|
76
|
+
xml.project {
|
77
|
+
xml.name Project.instance.name
|
78
|
+
xml.groupId Project.instance.package
|
79
|
+
xml.artifactId Project.instance.name
|
80
|
+
xml.version '1.0'
|
81
|
+
xml.packaging 'pom'
|
82
|
+
xml.properties {
|
83
|
+
xml << "<liferay.version>#{Project.instance.liferay}</liferay.version>"
|
84
|
+
}
|
85
|
+
}
|
86
|
+
end
|
87
|
+
|
88
|
+
File.open('pom.xml', 'w') do |file|
|
89
|
+
file.write(builder.to_xml)
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def add_parent_pom_to(module_pom)
|
97
|
+
doc = Nokogiri::XML(open(module_pom), &:noblanks)
|
98
|
+
|
99
|
+
# remove generated liferay.version tags
|
100
|
+
properties_node = doc.css('properties')
|
101
|
+
unless properties_node.nil?
|
102
|
+
properties_node.children.each do |node|
|
103
|
+
if node.name == 'liferay.version'
|
104
|
+
node.remove
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
parent_node = Nokogiri::XML::Node.new('parent',doc)
|
110
|
+
|
111
|
+
group_id_node = Nokogiri::XML::Node.new('groupId',doc)
|
112
|
+
group_id_node.content = Project.instance.package
|
113
|
+
parent_node.add_child group_id_node
|
114
|
+
|
115
|
+
artifact_id_node = Nokogiri::XML::Node.new('artifactId',doc)
|
116
|
+
artifact_id_node.content = Project.instance.name
|
117
|
+
parent_node.add_child artifact_id_node
|
118
|
+
|
119
|
+
version_node = Nokogiri::XML::Node.new('version',doc)
|
120
|
+
version_node.content = '1.0'
|
121
|
+
parent_node.add_child version_node
|
122
|
+
|
123
|
+
relative_path_node = Nokogiri::XML::Node.new('relativePath',doc)
|
124
|
+
relative_path_node.content = '../../pom.xml'
|
125
|
+
parent_node.add_child relative_path_node
|
126
|
+
|
127
|
+
doc.root.children.first.add_previous_sibling parent_node
|
128
|
+
|
129
|
+
File.open(module_pom, 'w') { |file| file.write doc.to_xml }
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
=begin
|
2
|
+
Copyright (c) 2012 Dmitri Carpov
|
3
|
+
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
a copy of this software and associated documentation files (the
|
6
|
+
"Software"), to deal in the Software without restriction, including
|
7
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be
|
13
|
+
included in all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
=end
|
23
|
+
module Rays
|
24
|
+
module Worker
|
25
|
+
module Builder
|
26
|
+
|
27
|
+
# Maven builder
|
28
|
+
class Maven < BaseWorker
|
29
|
+
register :builder, :maven
|
30
|
+
include Singleton
|
31
|
+
|
32
|
+
def build(app_module, skip_test = false)
|
33
|
+
execute('build', app_module) do
|
34
|
+
test_args = ''
|
35
|
+
test_args = '-Dmaven.skip.tests=true' if skip_test
|
36
|
+
|
37
|
+
rays_exec("#{$rays_config.mvn} clean package #{test_args}")
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# Content builder
|
43
|
+
class Content < BaseWorker
|
44
|
+
register :builder, :content_sync
|
45
|
+
include Singleton
|
46
|
+
|
47
|
+
def build(app_module, skip_test = false)
|
48
|
+
execute('build', app_module) do
|
49
|
+
# replace liferay server port
|
50
|
+
properties_file = Rays::Utils::FileUtils::PropertiesFile.new "#{app_module.path}/src/main/resources/configuration.properties"
|
51
|
+
properties_file.properties['server.port'] = $rays_config.environment.liferay.port
|
52
|
+
properties_file.write
|
53
|
+
|
54
|
+
test_args = ''
|
55
|
+
test_args = '-Dmaven.skip.tests=true' if skip_test
|
56
|
+
|
57
|
+
rays_exec("cd #{app_module.path} && #{$rays_config.mvn} clean assembly:single package #{test_args}")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
=begin
|
2
|
+
Copyright (c) 2012 Dmitri Carpov
|
3
|
+
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
a copy of this software and associated documentation files (the
|
6
|
+
"Software"), to deal in the Software without restriction, including
|
7
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be
|
13
|
+
included in all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
=end
|
23
|
+
module Rays
|
24
|
+
module Worker
|
25
|
+
module Cleaner
|
26
|
+
|
27
|
+
# Maven cleaner
|
28
|
+
class Maven < BaseWorker
|
29
|
+
register :cleaner, :maven
|
30
|
+
|
31
|
+
include Singleton
|
32
|
+
|
33
|
+
def clean(app_module)
|
34
|
+
execute('clean', app_module) do
|
35
|
+
rays_exec("#{$rays_config.mvn} clean")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
=begin
|
2
|
+
Copyright (c) 2012 Dmitri Carpov
|
3
|
+
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
a copy of this software and associated documentation files (the
|
6
|
+
"Software"), to deal in the Software without restriction, including
|
7
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be
|
13
|
+
included in all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
=end
|
23
|
+
require 'net/ssh'
|
24
|
+
|
25
|
+
module Rays
|
26
|
+
module Worker
|
27
|
+
module Deployer
|
28
|
+
|
29
|
+
# Maven deployer
|
30
|
+
class Maven < BaseWorker
|
31
|
+
register :deployer, :maven
|
32
|
+
|
33
|
+
include Singleton
|
34
|
+
|
35
|
+
def deploy(app_module)
|
36
|
+
execute('deploy', app_module) do
|
37
|
+
env = $rays_config.environment
|
38
|
+
Rays::Utils::FileUtils.find_down("./", '.*\\.war$').each do |file_to_deploy|
|
39
|
+
if env.liferay.remote?
|
40
|
+
env.liferay.remote.copy_to(file_to_deploy, env.liferay.deploy_directory)
|
41
|
+
else
|
42
|
+
FileUtils.cp(file_to_deploy, env.liferay.deploy_directory)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Content deployer
|
50
|
+
class Content < BaseWorker
|
51
|
+
register :deployer, :content_sync
|
52
|
+
|
53
|
+
include Singleton
|
54
|
+
|
55
|
+
def deploy(app_module)
|
56
|
+
execute('deploy', app_module) do
|
57
|
+
env = $rays_config.environment
|
58
|
+
base_filenames = []
|
59
|
+
deploy_dir = "/tmp/content_sync"
|
60
|
+
if env.liferay.remote?
|
61
|
+
env.liferay.remote.exec("rm -rf #{deploy_dir} && mkdir #{deploy_dir}")
|
62
|
+
else
|
63
|
+
rays_exec("rm -rf #{deploy_dir} && mkdir #{deploy_dir}")
|
64
|
+
end
|
65
|
+
Rays::Utils::FileUtils.find_down("./target/", '.*\\.jar$').each do |file|
|
66
|
+
if env.liferay.remote?
|
67
|
+
env.liferay.remote.copy_to(file, deploy_dir)
|
68
|
+
else
|
69
|
+
FileUtils.cp(file, env.liferay.deploy_directory)
|
70
|
+
end
|
71
|
+
base_filenames << File.basename(file)
|
72
|
+
end
|
73
|
+
|
74
|
+
class_path = base_filenames.join ':'
|
75
|
+
structures_cmd = "export JAVA_HOME=#{env.liferay.java_home} && cd #{deploy_dir} && #{env.liferay.java_cmd} -cp #{class_path} com.savoirfairelinux.liferay.client.UpdateStructures"
|
76
|
+
templates_cmd = "export JAVA_HOME=#{env.liferay.java_home} && cd #{deploy_dir} && #{env.liferay.java_cmd} -cp #{class_path} com.savoirfairelinux.liferay.client.UpdateTemplates"
|
77
|
+
|
78
|
+
if env.liferay.remote?
|
79
|
+
env.liferay.remote.exec(structures_cmd)
|
80
|
+
env.liferay.remote.exec(templates_cmd)
|
81
|
+
else
|
82
|
+
rays_exec(structures_cmd)
|
83
|
+
rays_exec(templates_cmd)
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
=begin
|
2
|
+
Copyright (c) 2012 Dmitri Carpov
|
3
|
+
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
a copy of this software and associated documentation files (the
|
6
|
+
"Software"), to deal in the Software without restriction, including
|
7
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be
|
13
|
+
included in all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
=end
|
23
|
+
module Rays
|
24
|
+
module Worker
|
25
|
+
module Generator
|
26
|
+
|
27
|
+
# Maven generator
|
28
|
+
class Maven < BaseWorker
|
29
|
+
register :generator, :maven
|
30
|
+
|
31
|
+
include Singleton
|
32
|
+
|
33
|
+
def create(app_module)
|
34
|
+
raise RaysException.new("Don't know how to create #{app_module.type}/#{app_module.name}.") if app_module.archetype_name.nil?
|
35
|
+
create_cmd = "#{$rays_config.mvn} archetype:generate" <<
|
36
|
+
" -DarchetypeGroupId=com.liferay.maven.archetypes" <<
|
37
|
+
" -DarchetypeArtifactId=#{app_module.archetype_name}" <<
|
38
|
+
" -DarchetypeVersion=#{Project.instance.liferay}" <<
|
39
|
+
" -DgroupId=#{Project.instance.package}.#{app_module.type}" <<
|
40
|
+
" -DartifactId=#{app_module.name}" <<
|
41
|
+
" -Dversion=1.0-SNAPSHOT" <<
|
42
|
+
" -Dpackaging=war -B"
|
43
|
+
rays_exec(create_cmd)
|
44
|
+
MavenUtil.link_to_parent File.join(app_module.path, 'pom.xml')
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|