blob: 03beb238cba5d015f372cc279919deaa2c698993 [file] [log] [blame]
#!/usr/bin/env ruby -wKU
$LOAD_PATH << File.expand_path(File.dirname(__FILE__))
$LOAD_PATH << File.expand_path(File.dirname(__FILE__) + '/../lib')
require 'repository'
require 'options'
require 'console'
args = Choice.choices
SCRIPT_NAME = "ripplor"
DRY_RUN = args[:dryrun?].nil? ? false : true
puts "This is a dry run..." if DRY_RUN
if File.exist?(File.expand_path(args[:repository_map]))
paths = Hash.new
IO.foreach(File.expand_path(args[:repository_map])) do |line|
paths[$1.strip] = $2.strip if line =~ /([^=]*)=(.*)/
end
else
paths = {
'osgi-test-stubs' => 'osgi-test-stubs',
'osgi-extensions' => 'osgi-extensions',
'util' => 'util',
'test' => 'test',
'medic' => 'medic',
'artifact-repository' => 'artifact-repository',
'kernel' => 'kernel',
'kernel-tools' => 'kernel-tools',
'web' => 'web',
'snaps' => 'snaps',
'apps' => 'apps',
'documentation' => 'documentation',
'web-server' => 'web-server',
'jetty-server' => 'jetty-server'
}
end
eclipse_repo_root = 'ssh://' + args[:remote_user] + '@git.eclipse.org/gitroot/virgo/org.eclipse.virgo.'
ripple_branch = args[:branch_name]
ALL_REPOS = [
Repository.new(eclipse_repo_root, 'osgi-test-stubs', paths['osgi-test-stubs'], 'org.eclipse.virgo.teststubs', nil, ripple_branch),
Repository.new(eclipse_repo_root, 'osgi-extensions', paths['osgi-extensions'], 'org.eclipse.virgo.osgi', nil, ripple_branch),
Repository.new(eclipse_repo_root, 'util', paths['util'], 'org.eclipse.virgo.util', nil, ripple_branch),
Repository.new(eclipse_repo_root, 'test', paths['test'], 'org.eclipse.virgo.test', nil, ripple_branch),
Repository.new(eclipse_repo_root, 'medic', paths['medic'], 'org.eclipse.virgo.medic', nil, ripple_branch),
Repository.new(eclipse_repo_root, 'artifact-repository', paths['artifact-repository'], 'org.eclipse.virgo.repository', nil, ripple_branch),
Repository.new(eclipse_repo_root, 'kernel', paths['kernel'], 'org.eclipse.virgo.kernel', nil, ripple_branch, 'clean clean-integration test package smoke-test publish publish-package-build'),
Repository.new(eclipse_repo_root, 'kernel-tools', paths['kernel-tools'], 'org.eclipse.virgo.kernel-tools', nil, ripple_branch),
Repository.new(eclipse_repo_root, 'web', paths['web'], 'org.eclipse.virgo.web', nil, ripple_branch),
Repository.new(eclipse_repo_root, 'snaps', paths['snaps'], 'org.eclipse.virgo.snaps', nil, ripple_branch, 'clean clean-integration test package publish publish-package-build'),
Repository.new(eclipse_repo_root, 'apps', paths['apps'], 'org.eclipse.virgo.apps', nil, ripple_branch),
Repository.new(eclipse_repo_root, 'documentation', paths['documentation'], 'org.eclipse.virgo.documentation', nil, ripple_branch, 'clean clean-integration doc-html publish'),
Repository.new(eclipse_repo_root, 'web-server', paths['web-server'], 'org.eclipse.virgo.web-server', nil, ripple_branch, 'clean clean-integration test package smoke-test publish publish-package-build'),
Repository.new(eclipse_repo_root, 'jetty-server', paths['jetty-server'], 'org.eclipse.virgo.jetty-server', nil, ripple_branch, 'clean clean-integration test package smoke-test publish publish-package-build')
]
repos = Array.new
repo_found = false
ALL_REPOS.each do |repo|
if repo_found || repo.name == args[:start_repo]
repos << repo
repo_found = true
end
end
log_file=File.expand_path('./ripple.log')
start_time = Time.new
versions = Hash.new
if !args[:version].nil?
args[:version].split(",").each do |v|
versions[$1.strip] = $2.strip if v =~ /(.*):(.*)/
end
end
console = Console.new
begin
repos.each do |repo|
puts 'Rippling ' + repo.name
puts ' checkout with "' + repo.clone_command + '"' if DRY_RUN
console.set_title(SCRIPT_NAME, "#{repo.name} Checkout")
repo.checkout if !DRY_RUN
puts ' update_versions ...' if DRY_RUN
console.set_title(SCRIPT_NAME, "#{repo.name} Update")
repo.update_versions(versions) if !DRY_RUN
if !args[:build_version].nil?
repo.update_virgo_build(args[:build_version]) if !DRY_RUN
end
puts ' build with user: ' + args[:remote_user] + ' and TARGETS: ' + repo.targets if DRY_RUN
console.set_title(SCRIPT_NAME, "#{repo.name} Build")
repo.build(args[:remote_user], log_file) if !DRY_RUN
versions.merge!(repo.versions) if !DRY_RUN
end
console.set_title(SCRIPT_NAME, "Push?")
if !DRY_RUN
puts 'Execution Time: ' + Time.at(Time.new - start_time).utc.strftime('%R:%S')
print 'Do you want to push? (y/n) '
commit_ok = STDIN.gets.chomp
if commit_ok =~ /y.*/
repos.each do |repo|
console.set_title(SCRIPT_NAME, "#{repo.name} Push")
repo.push
end
end
end
console.clear_title
rescue
console.set_title(SCRIPT_NAME, "Error")
end