blob: a2506a88d2fe455f15d8e6f66bb3a9e54a73e801 [file] [log] [blame]
$LOAD_PATH << File.expand_path(File.dirname(__FILE__))
require 'version'
require 'fileutils'
class Repository
attr_reader :name
attr_reader :targets
attr_reader :clone_command
attr_reader :bundle_version
attr_reader :path
attr_reader :master_branch
def initialize(repo_root, name, path, variable, bundle_version = nil, master_branch = '3.0.x', targets = 'clean clean-integration test publish-ivy')
if repo_root.nil?
abort('Repository Git Root cannot be nil for repository ' + @name)
end
@repo_root = repo_root
if name.nil?
abort('Name cannot be nil')
end
@name = name
if path.nil? || path == ''
abort('Repository path cannot be nil for repository ' + @name)
end
@path = File.expand_path(path)
@variable = variable
@bundle_version = bundle_version
if targets.nil?
abort('Repository build targets cannot be nil for repository ' + @name)
end
@targets = targets
if master_branch.nil?
abort('Repository master branch cannot be nil for repository ' + @name)
end
@master_branch = master_branch
@clone_command = 'git clone -b ' + @master_branch + " " + @repo_root + @name + '.git ' + @path
end
def checkout(quietly=false)
if File.exist?(@path)
puts ' Deleting old checkout at ' + @path
FileUtils.rm_rf(@path)
end
tonull = " > /dev/null 2>&1"
puts ' Checking out ' + @path
execute(@clone_command + (quietly ? tonull : ""))
Dir.chdir(@path)
execute('git submodule update --init' + (quietly ? tonull : ""))
if @bundle_version.nil?
create_new_bundle_version_from_properties
end
end
def create_release_branch(version, build_stamp, release_type, versions)
create_branch(@bundle_version)
update_build_properties(version, build_stamp, release_type)
update_build_versions(versions)
end
def update_versions(versions)
create_branch(@bundle_version)
puts ' Updating versions'
versions.sort.reverse.each do |var_version|
Version.update(var_version[0], var_version[1], @path, true)
end
execute('cd ' + @path + '; git commit --allow-empty -a -m "[RIPPLOR] Updated versions"')
end
def build(committerId, log_file)
puts ' Building:'
puts ' BUNDLE_VERSION: ' + @bundle_version
puts ' TARGETS: ' + @targets
execute('ant -f ' + @path + '/build-*/build.xml -Declipse.committerId=' + committerId + ' -Dbundle.version=' + @bundle_version + ' ' + @targets + ' >> ' + log_file)
end
def create_tag
puts ' Creating tag ' + @bundle_version
Dir.chdir(@path)
execute('git tag -a -m "[RELEASELOR] ' + @bundle_version +'" ' + @bundle_version)
end
def update_master_branch(new_version, versions)
create_branch(new_version)
update_build_properties(new_version)
update_build_versions(versions)
end
def versions
versions = Hash.new
IO.foreach(@path + '/build.versions') do |line|
if line =~ /([^=]*)=(.*)/
if !($1.strip[-6..-1] == '-RANGE')
versions[$1.strip] = $2.strip
end
end
end
versions[@variable] = @bundle_version
versions
end
def push(new_version=nil)
new_version = @bundle_version if new_version.nil?
puts 'Pushing ' + @name
Dir.chdir(@path)
execute('git push origin ' + new_version + ':' + @master_branch + ' --tags')
end
def update_virgo_build(new_version)
puts ' Updating to Virgo Build version \'' + new_version + '\''
Dir.chdir(@path + "/virgo-build")
execute("git pull origin master:master ")
execute("git fetch --tags")
execute("git checkout " + new_version)
Dir.chdir(@path)
execute('git commit --allow-empty -a -m "[UPDATE BUILDLOR] Updated Virgo Build to \'' + new_version + '\'"')
end
def fork(branch_name)
create_branch(branch_name)
end
def push_fork(branch_name)
puts 'Pushing ' + @name
Dir.chdir(@path)
execute('git push origin ' + branch_name)
end
########################################################################################################################
private
def create_branch(name)
puts(' Creating branch ' + name + ' -> ' + @master_branch)
execute('cd ' + @path + '; git checkout -q -b ' + name + ' --track origin/' + @master_branch)
end
def create_new_bundle_version_from_properties
version = nil
IO.foreach(@path + '/build.properties') do |line|
version = $1.strip if line =~ /^version=(.*)/
end
@bundle_version = version + '.D-' + Time.now.utc.strftime("%Y%m%d%H%M%S")
end
def update_build_properties(version, build_stamp = nil, release_type = 'integration')
properties = @path + '/build.properties'
puts ' Updating properties'
lines = IO.readlines(properties)
lines.each do |line|
if line =~ /^version/
line.gsub!(/^version.*/, 'version=' + version)
if(!build_stamp.nil?)
lines.insert(lines.index(line) + 2, 'build.stamp=' + build_stamp + $/)
end
elsif line =~ /^release\.type/
line.gsub!(/^release\.type.*/, 'release.type=' + release_type)
end
end
write_file(properties, lines)
execute('cd ' + @path + '; git commit --allow-empty -a -m "[RELEASELOR] Updated properties"')
end
def update_build_versions(versions)
puts ' Updating versions'
versions.sort.reverse.each do |var_version|
Version.update(var_version[0], var_version[1], @path)
end
execute('cd ' + @path + '; git commit --allow-empty -a -m "[RELEASELOR] Updated versions"')
end
def execute(command)
output = `#{command}`
if $?.to_i != 0
abort('Execution Failed')
end
output
end
def write_file(path, lines)
file = File.new(path, 'w')
lines.each do |line|
file.write(line)
end
file.close
end
end