end
client = BuildCommClient.create( result[0], result[1], nil, 0 )
if not client.nil? then
- client.send "BUILD|GIT|#{option[:project]}|#{option[:passwd]}|#{option[:os]}|#{option[:async]}|#{option[:noreverse]}"
+ client.send "BUILD|GIT|#{option[:project]}|#{option[:passwd]}|#{option[:os]}|#{option[:async]}|#{option[:noreverse]}|#{option[:dist]}"
client.print_stream
client.terminate
else
end
client = BuildCommClient.create( result[0], result[1], nil, 0 )
if not client.nil? then
- client.send "RESOLVE|GIT|#{option[:project]}|#{option[:passwd]}|#{option[:os]}|#{option[:async]}"
+ client.send "RESOLVE|GIT|#{option[:project]}|#{option[:passwd]}|#{option[:os]}|#{option[:async]}|#{option[:dist]}"
client.print_stream
client.terminate
end
puts "Can't access server #{bs_ip}:#{bs_port}"
exit(-1)
end
- client.send("REGISTER|BINARY|#{File.basename(option[:package])}|#{option[:passwd]}|#{dock}")
+ client.send("REGISTER|BINARY|#{File.basename(option[:package])}|#{option[:passwd]}|#{dock}|#{option[:dist]}")
client.print_stream
client.terminate
exit 1
end
-# if "--os" is not specified, set it as default
-if option[:os].nil? then
- option[:os] = "default"
-end
-
begin
case option[:cmd]
when "create"
- svr_result = Utils.parse_server_addr(option[:domain])
- if svr_result.nil? or svr_result.length != 2 then
- puts "Server address is incorrect. (#{option[:domain]})"
- puts "Tune as following format."
- puts " <ip>:<port>"
- exit 1
- end
ftp_result = Utils.parse_ftpserver_url(option[:fdomain])
if ftp_result.nil? or ftp_result.length != 4 then
puts "FTP server url is incorrect. (#{option[:fdomain]})"
puts " ftp://<usrename>:<passwd>@<address>:<port>"
exit 1
end
- pkgsvr_addr = svr_result[0]
- pkgsvr_port = svr_result[1]
ftpsvr_addr = ftp_result[0]
ftpsvr_port = ftp_result[1]
ftpsvr_username = ftp_result[2]
ftpsvr_passwd = ftp_result[3]
- BuildServerController.create_server( option[:name], Utils::WORKING_DIR, ftpsvr_addr, ftpsvr_port, ftpsvr_username, ftpsvr_passwd, option[:url], pkgsvr_addr, pkgsvr_port )
+ pkgsvr_url = pkgsvr_addr = pkgsvr_port = nil
+ if not option[:domain].nil? and not option[:url].nil? then
+ svr_result = Utils.parse_server_addr(option[:domain])
+ if svr_result.nil? or svr_result.length != 2 then
+ puts "Server address is incorrect. (#{option[:domain]})"
+ puts "Tune as following format."
+ puts " <ip>:<port>"
+ exit 1
+ end
+ pkgsvr_url = option[:url]
+ pkgsvr_addr = svr_result[0]
+ pkgsvr_port = svr_result[1]
+ end
+ BuildServerController.create_server( option[:name], Utils::WORKING_DIR, ftpsvr_addr, ftpsvr_port, ftpsvr_username, ftpsvr_passwd, pkgsvr_url, pkgsvr_addr, pkgsvr_port )
when "remove"
BuildServerController.remove_server( option[:name] )
when "start"
if( option[:child] ) then # Child Process
BuildServerController.start_server( option[:name], option[:port] )
else # Parent Process
+ # check server config
+ if not File.exist? "#{BuildServer::CONFIG_ROOT}/#{option[:name]}/server.cfg"
+ raise RuntimeError, "The server \"#{option[:name]}\" does not exist!"
+ end
+
log = Log.new( "#{BuildServer::CONFIG_ROOT}/#{option[:name]}/main.log" )
begin
while(true)
end
when "stop"
BuildServerController.stop_server( option[:name] )
+
when "upgrade"
BuildServerController.upgrade_server( option[:name] )
+
when "add-svr"
- if not option[:domain].nil? then
- svr_result = Utils.parse_server_addr(option[:domain])
- if svr_result.nil? or svr_result.length != 2 then
- puts "Server address is incorrect. Tune as following format."
- puts " <ip>:<port>"
- exit 1
- end
- pkgsvr_addr = svr_result[0]
- pkgsvr_port = svr_result[1]
- BuildServerController.add_friend_server( option[:name], pkgsvr_addr, pkgsvr_port )
- elsif not option[:url].nil? then
- BuildServerController.add_remote_package_server( option[:name], option[:url], option[:proxy] )
- end
+ svr_result = Utils.parse_server_addr(option[:domain])
+ if svr_result.nil? or svr_result.length != 2 then
+ puts "Server address is incorrect. Tune as following format."
+ puts " <ip>:<port>"
+ exit 1
+ end
+ pkgsvr_addr = svr_result[0]
+ pkgsvr_port = svr_result[1]
+ BuildServerController.add_remote_server( option[:name], pkgsvr_addr, pkgsvr_port )
+
+ when "remove-svr"
+ BuildServerController.remove_remote_server( option[:name], pkgsvr_addr, pkgsvr_port )
+
+ when "add-os"
+ BuildServerController.add_target_os( option[:name], option[:os] )
+
+ when "remove-os"
+ BuildServerController.remove_target_os( option[:name], option[:os] )
+
+ when "add-dist"
+ svr_result = Utils.parse_server_addr(option[:domain])
+ if svr_result.nil? or svr_result.length != 2 then
+ puts "Server address is incorrect. (#{option[:domain]})"
+ puts "Tune as following format."
+ puts " <ip>:<port>"
+ exit 1
+ end
+ pkgsvr_url = option[:url]
+ pkgsvr_addr = svr_result[0]
+ pkgsvr_port = svr_result[1]
+ BuildServerController.add_distribution( option[:name], option[:dist], pkgsvr_url, pkgsvr_addr, pkgsvr_port )
+
+ when "remove-dist"
+ BuildServerController.remove_distribution( option[:name], option[:dist] )
+
+ when "add-sync"
+ BuildServerController.add_sync_package_server( option[:name], option[:url], option[:dist] )
+
+ when "remove-sync"
+ BuildServerController.remove_sync_package_server( option[:name], option[:url], option[:dist] )
+
when "add-prj"
if not option[:git].nil? then
BuildServerController.add_project( option[:name], option[:pid],
- option[:git], option[:branch], option[:remote], option[:passwd], option[:os] )
+ option[:git], option[:branch], option[:remote], option[:passwd],
+ option[:os], option[:dist] )
else
BuildServerController.add_binary_project( option[:name], option[:pid],
- option[:package], option[:passwd], option[:os] )
+ option[:package], option[:passwd], option[:os], option[:dist] )
end
- when "add-os"
- BuildServerController.add_target_os( option[:name], option[:os] )
+
+ when "remove-prj"
+ BuildServerController.remove_project( option[:name], option[:pid], option[:dist] )
+
when "fullbuild"
- BuildServerController.build_all_projects( option[:name] )
+ BuildServerController.build_all_projects( option[:name], option[:dist] )
+
when "register"
- BuildServerController.register_package( option[:name], option[:package] )
+ BuildServerController.register_package( option[:name], option[:package], option[:dist] )
+
+ when "query"
+ BuildServerController.query_server( option[:name] )
+
else
raise RuntimeError, "input option incorrect : #{option[:cmd]}"
end
attr_accessor :pkg_name
# initialize
- def initialize( name, server, os_list, pkg_name = nil )
- super(name, "BINARY", server, os_list)
+ def initialize( name, server, os_list, dist_name, pkg_name = nil )
+ super(name, "BINARY", server, os_list, dist_name)
@pkg_name = pkg_name
end
return nil
end
- pkginfo_dir = "#{@server.path}/projects/#{@name}/pkginfos"
+ pkginfo_dir = "#{@path}/pkginfos"
if not File.exist? pkginfo_dir then FileUtils.mkdir_p pkginfo_dir end
if not Utils.extract_a_file(file_path, "pkginfo.manifest", pkginfo_dir) then
@server.log.error( "pkginfo.manifest file is not exist", Log::LV_USER)
return nil
end
- new_job = RegisterPackageJob.new( file_path, self, @server )
+ new_job = RegisterPackageJob.new( file_path, self, @server, nil, @dist_name )
return new_job
end
def save_db()
- config_file = "#{@server.path}/projects/#{@name}/build"
+ config_file = "#{@path}/build"
File.open( config_file, "w" ) do |f|
f.puts "TYPE=BINARY"
f.puts "PACKAGE_NAME=#{@pkg_name}"
def load_db()
# git
- config_file = "#{@server.path}/projects/#{@name}/build"
+ config_file = "#{@path}/build"
pkg_name=nil
File.open( config_file, "r" ) do |f|
f.each_line do |l|
require 'optparse'
require 'utils'
+class BuildClientUsage
+ BUILD="build-cli build -N <project name> -d <server address> [-o <os>] [-w <password>] [--async] [-D <distribution name>]"
+ RESOLVE="build-cli resolve -N <project name> -d <server address> [-o <os>] [-w <password>] [--async] [-D <distribution name>]"
+ QUERY="build-cli query -d <server address>"
+ QUERY_SYSTEM="build-cli query-system -d <server address>"
+ QUERY_PROJECT="build-cli query-project -d <server address>"
+ QUERY_JOB="build-cli query-job -d <server address>"
+ CANCEL="build-cli cancel -j <job number> -d <server address> [-w <password>]"
+ REGISTER="build-cli register -P <package file> -d <server address> -t <ftp server url> [-w <password>] [-D <distribution name>]"
+end
+
+
def option_error_check( options )
case options[:cmd]
when "build" then
if options[:project].nil? or options[:project].empty? or
options[:domain].nil? or options[:domain].empty? then
- raise ArgumentError, "Usage: build-cli build -N <project name> -d <server address> [-o <os>] [-w <password>] [--async]"
+ raise ArgumentError, "Usage: " + BuildClientUsage::BUILD
end
when "resolve" then
if options[:project].nil? or options[:project].empty? or
options[:domain].nil? or options[:domain].empty? then
- raise ArgumentError, "Usage: build-cli resolve -N <project name> -d <server address> [-o <os>] [-w <password>] [--async]"
+ raise ArgumentError, "Usage: " + BuildClientUsage::RESOLVE
end
when "query" then
if options[:domain].nil? or options[:domain].empty? then
- raise ArgumentError, "Usage: build-cli query -d <server address>"
+ raise ArgumentError, "Usage: " + BuildClientUsage::QUERY
end
when "query-system" then
if options[:domain].nil? or options[:domain].empty? then
- raise ArgumentError, "Usage: build-cli query-system -d <server address>"
+ raise ArgumentError, "Usage: " + BuildClientUsage::QUERY_SYSTEM
end
when "query-project" then
if options[:domain].nil? or options[:domain].empty? then
- raise ArgumentError, "Usage: build-cli query-project -d <server address>"
+ raise ArgumentError, "Usage: " + BuildClientUsage::QUERY_PROJECT
end
when "query-job" then
if options[:domain].nil? or options[:domain].empty? then
- raise ArgumentError, "Usage: build-cli query-job -d <server address>"
+ raise ArgumentError, "Usage: " + BuildClientUsage::QUERY_JOB
end
when "cancel" then
if options[:job].nil? or options[:job].empty? or
options[:domain].nil? or options[:domain].empty? then
- raise ArgumentError, "Usage: build-cli cancel -j <job number> -d <server address> [-w <password>]"
+ raise ArgumentError, "Usage: " + BuildClientUsage::CANCEL
end
when "register" then
if options[:package].nil? or options[:package].empty? or
options[:domain].nil? or options[:domain].empty? or
options[:fdomain].nil? or options[:fdomain].empty? then
- raise ArgumentError, "Usage: build-cli register -P <package file> -d <server address> -t <ftp server url> [-w <password>]"
+ raise ArgumentError, "Usage: " + BuildClientUsage::REGISTER
end
else
+ "\t" + "cancel Cancel a building project." + "\n" \
+ "\t" + "register Register the package to the build-server." + "\n" \
+ "\n" + "Subcommand usage:" + "\n" \
- + "\t" + "build-cli build -N <project name> -d <server address> [-o <os>] [-w <password>] [--async]" + "\n" \
- + "\t" + "build-cli resolve -N <project name> -d <server address> [-o <os>] [-w <password>] [--async]" + "\n" \
- + "\t" + "build-cli query -d <server address>" + "\n" \
- + "\t" + "build-cli query-system -d <server address>" + "\n" \
- + "\t" + "build-cli query-project -d <server address>" + "\n" \
- + "\t" + "build-cli query-job -d <server address>" + "\n" \
- + "\t" + "build-cli cancel -j <job number> -d <server address> [-w <password>] " + "\n" \
- + "\t" + "build-cli register -P <file name> -d <server address> -t <ftp server url> [-w <password>] " + "\n" \
+ + "\t" + BuildClientUsage::BUILD + "\n" \
+ + "\t" + BuildClientUsage::RESOLVE + "\n" \
+ + "\t" + BuildClientUsage::QUERY + "\n" \
+ + "\t" + BuildClientUsage::QUERY_SYSTEM + "\n" \
+ + "\t" + BuildClientUsage::QUERY_PROJECT + "\n" \
+ + "\t" + BuildClientUsage::QUERY_JOB + "\n" \
+ + "\t" + BuildClientUsage::CANCEL + "\n" \
+ + "\t" + BuildClientUsage::REGISTER + "\n" \
+ "\n" + "Options:" + "\n"
optparse = OptionParser.new(nil, 32, ' '*8) do|opts|
options[:package] = package.strip
end
+ opts.on( '-D', '--dist <distribution name>', 'distribution name' ) do|dist|
+ options[:dist] = dist
+ end
+
opts.on( '-t', '--ftp <ftp server url>', 'ftp server url: ftp://dibsftp:dibsftp@127.0.0.1' ) do|domain|
options[:fdomain] = domain
end
end
+ # remove remote friend server
+ def remove_remote_server( ip, port )
+ @friend_servers.each do |svr|
+ if svr.ip.eql? ip and svr.port == port then
+ @friend_servers.delete svr
+ return true
+ end
+ end
+
+ # if not exist, return false
+ return false
+ end
+
+
# add new remote pkg server
- def add_remote_package_server( url, proxy )
+ def add_sync_package_server( url, dist )
# if already exit, return false
- @remote_pkg_servers.each do |entry|
- u = entry[0]
-
- if u == url then
+ @remote_pkg_servers.each do |e|
+ if e[0] == url and e[1] == dist then
return false
end
end
- @remote_pkg_servers.push [url, proxy]
+ @remote_pkg_servers.push [url, dist]
return true
end
+ # remove remote pkg server
+ def remove_sync_package_server( url, dist )
+
+ # if already exit, return false
+ @remote_pkg_servers.each do |e|
+ if e[0] == url and e[1] == dist then
+ @remote_pkg_servers.delete e
+ return true
+ end
+ end
+
+ return false
+ end
+
+
# add new target OS.
# If already exist, return false , otherwise true
def add_target_os( os_name )
end
+ # remove target OS.
+ def remove_target_os( os_name )
+ @supported_os_list.each do |os|
+ if os.eql? os_name then
+ @supported_os_list.delete os
+ return true
+ end
+ end
+
+ return false
+ end
# get remote server
def get_available_server ( job )
candidates = []
db.execute "DELETE FROM sync_pkg_servers"
idx = 0
@remote_pkg_servers.each { |svr|
- db.execute "INSERT INTO sync_pkg_servers VALUES('#{idx}','#{svr[0]}','#{@pkg_sync_period}','BASE')"
+ db.execute "INSERT INTO sync_pkg_servers VALUES('#{idx}','#{svr[0]}','#{@pkg_sync_period}','#{svr[1]}')"
idx += 1
}
stm = db.prepare "SELECT * FROM sync_pkg_servers"
rs = stm.execute
rs.each { |row|
- add_remote_package_server( row['pkgsvr_url'], nil )
+ add_sync_package_server( row['pkgsvr_url'], row['dist_name'] )
@pkg_sync_period = row['period'].to_i
}
stm.close if stm
# add friend server
- def self.add_friend_server( id, ip, port )
+ def self.add_remote_server( id, ip, port )
server = get_server(id)
# add
end
- # add remote package server
- def self.add_remote_package_server(id, url, proxy )
+ # remove friend server
+ def self.remove_remote_server( id, ip, port )
server = get_server(id)
# add
- if server.add_remote_package_server( url, proxy ) then
+ if server.remove_remote_server( ip, port ) then
server.save_db()
- puts "Remote package server is added!"
+ puts "Friend server is removed successfully!"
+
return true
else
- puts "The server already exists in list!"
+ puts "Friend server does not exist in list!"
return false
end
end
end
+ # remove supported target os
+ def self.remove_target_os( id, os_name )
+ # get server
+ server = get_server(id)
+
+ # add
+ if server.remove_target_os( os_name ) then
+ server.save_db()
+ puts "Target OS is removed successfully!"
+ return true
+ else
+ puts "Target OS does not exist in list!"
+ return false
+ end
+ end
+
+
+ # add distribution
+ def self.add_distribution( id, dist_name, pkgsvr_url, pkgsvr_ip, pkgsvr_port )
+ # get server
+ server = get_server(id)
+
+ # add
+ if server.distmgr.add_distribution( dist_name, pkgsvr_url, pkgsvr_ip, pkgsvr_port ) then
+ server.save_db()
+ puts "Distribution is added successfully!"
+ return true
+ else
+ puts "Distribution already exists in list!"
+ return false
+ end
+ end
+
+
+ # remove distribution
+ def self.remove_distribution( id, dist_name )
+ # get server
+ server = get_server(id)
+
+ # remove
+ if server.distmgr.remove_distribution( dist_name ) then
+ server.save_db()
+ puts "Distribution is removed successfully!"
+ return true
+ else
+ puts "Distribution does not exist in list!"
+ return false
+ end
+ end
+
+
+ # add remote package server
+ def self.add_sync_package_server(id, url, dist_name)
+ server = get_server(id)
+
+ # check distribution
+ dist_name = check_distribution_name(dist_name, server)
+ if dist_name.nil? then return false end
+
+ # add
+ if server.add_sync_package_server( url, dist_name ) then
+ server.save_db()
+ puts "Remote package server is added!"
+ return true
+ else
+ puts "The server already exists in list!"
+ return false
+ end
+ end
+
+
+ def self.check_distribution_name(dist_name, server)
+ if (dist_name.nil? or dist_name.empty?) then
+ dist_name = server.distmgr.get_default_distribution_name()
+ end
+ if dist_name.nil? or dist_name.empty? then
+ puts "No distribution is defined!"
+ return nil
+ end
+
+ return dist_name
+ end
+
+ # remove remote package server
+ def self.remove_sync_package_server(id, url, dist_name)
+ server = get_server(id)
+
+ # check distribution
+ dist_name = check_distribution_name(dist_name, server)
+ if dist_name.nil? then return false end
+
+ # remove
+ if server.remove_sync_package_server( url, dist_name ) then
+ server.save_db()
+ puts "Remote package server is removed!"
+ return true
+ else
+ puts "The server does not exist in list!"
+ return false
+ end
+ end
+
+
# add project
- def self.add_project( id, project_name, git_repos, git_branch, remote_server_id, passwd, os_string )
+ def self.add_project( id, project_name, git_repos, git_branch, remote_server_id,
+ passwd, os_string, dist_name )
# get server
server = get_server(id)
# get supported os for project.
# if not specified, all supported os of the server will be used
- if os_string.nil? or os_string == "default" then
+ if os_string.nil? or os_string.empty? then
os_list = server.supported_os_list
else
os_list = os_string.strip.split(",")
- end
- # check OS name
- os_list.each do |os|
- if not server.supported_os_list.include? os then
- puts "Unsupported OS name \"#{os}\" is used!"
- puts "Check the following supported OS list:"
- server.supported_os_list.each do |s_os|
- puts " * #{s_os}"
- end
+ # check OS name
+ os_list.each do |os|
+ if not server.supported_os_list.include? os then
+ puts "Unsupported OS name \"#{os}\" is used!"
+ puts "Check the following supported OS list:"
+ server.supported_os_list.each do |s_os|
+ puts " * #{s_os}"
+ end
- return false
+ return false
+ end
end
end
# add
- if not git_repos.nil? and not git_branch.nil? then
- result = server.prjmgr.add_git_project( project_name, git_repos, git_branch, passwd, os_list )
- elsif not remote_server_id.nil? then
- result = server.prjmgr.add_remote_project( project_name, remote_server_id, passwd, os_list)
- else
- result = false
+ if git_repos.nil? or git_branch.nil? then
+ puts "Git repository or branch must be specified!"
+ return false
end
-
+
+ # check distribution
+ dist_name = check_distribution_name(dist_name, server)
+ if dist_name.nil? then return false end
+
+ result = server.prjmgr.add_git_project( project_name, git_repos, git_branch, passwd, os_list, dist_name )
if result then
puts "Adding project succeeded!"
return true
# add binary project
- def self.add_binary_project( id, project_name, pkg_name, passwd, os_string )
+ def self.add_binary_project( id, project_name, pkg_name, passwd, os_string, dist_name )
# get server
server = get_server(id)
os_list = server.supported_os_list
else
os_list = os_string.strip.split(",")
+ # check OS name
+ os_list.each do |os|
+ if not server.supported_os_list.include? os then
+ puts "Unsupported OS name \"#{os}\" is used!"
+ puts "Check the following supported OS list:"
+ server.supported_os_list.each do |s_os|
+ puts " * #{s_os}"
+ end
+
+ return false
+ end
+ end
end
+ # check distribution
+ dist_name = check_distribution_name(dist_name, server)
+ if dist_name.nil? then return false end
+
# add
- result = server.prjmgr.add_binary_project( project_name, pkg_name, passwd, os_list )
-
+ result = server.prjmgr.add_binary_project( project_name, pkg_name, passwd,
+ os_list, dist_name )
if result then
puts "Adding project succeeded!"
return true
end
+ # remove project
+ def self.remove_project( id, project_name, dist_name )
+ # get server
+ server = get_server(id)
+
+ # check distribution
+ dist_name = check_distribution_name(dist_name, server)
+ if dist_name.nil? then return false end
+
+ result = server.prjmgr.remove_project( project_name, dist_name )
+ if result then
+ puts "Removing project succeeded!"
+ return true
+ else
+ puts "Removing project failed!"
+ return false
+ end
+ end
+
+
# full build
- def self.build_all_projects( id )
+ def self.build_all_projects( id, dist_name )
# server
server = get_server(id)
+
+ # check distribution
+ dist_name = check_distribution_name(dist_name, server)
+ if dist_name.nil? then return false end
+
client = BuildCommClient.create( "127.0.0.1", server.port )
if client.nil? then
puts "Server is not running!"
# send request
fullbuild_ok = false
- if client.send "FULLBUILD|#{server.password}" then
+ if client.send "FULLBUILD|#{server.password}|#{dist_name}" then
# recevie & print
mismatched = false
+ dist_not_found = false
result = client.read_lines do |l|
puts l
if l.include? "Password mismatched!" then
mismatched = true
end
+ if l.include? "Distribution not found!" then
+ dist_not_found = true
+ end
end
- if result and not mismatched then
+ if result and not mismatched and not dist_not_found then
fullbuild_ok = true
end
end
end
- def self.register_package(id, file_path)
+ def self.register_package(id, file_path, dist_name)
# server
server = get_server(id)
- client = BuildCommClient.create( "127.0.0.1", server.port )
- if client.nil? then
- puts "Server is not running!"
- return false
- end
+ # check distribution
+ dist_name = check_distribution_name(dist_name, server)
+ if dist_name.nil? then return false end
+
+ # check file exist?
if not File.exist? file_path then
puts "File not found!"
return false
end
-
file_path = File.expand_path(file_path)
+
# send request
success = false
- if client.send "REGISTER|BINARY-LOCAL|#{file_path}|#{server.password}" then
+ client = BuildCommClient.create( "127.0.0.1", server.port )
+ if client.nil? then
+ puts "Server is not running!"
+ return false
+ end
+ if client.send "REGISTER|BINARY-LOCAL|#{file_path}|#{server.password}|#{dist_name}" then
# recevie & print
mismatched = false
result = client.read_lines do |l|
return true
end
+ # server
+ def self.query_server( id )
+ server = get_server(id)
+ server.prjmgr.load()
+
+ puts "* REMOTE SERVER(S) *"
+ server.friend_servers.each { |s|
+ puts " * #{s.ip}:#{s.port}"
+ }
+ puts ""
+
+ puts "* SUPPORTED OS *"
+ server.supported_os_list.each { |os|
+ puts " * #{os}"
+ }
+ puts ""
+
+ puts "* DISTRIBUTION(S) *"
+ server.distmgr.get_all_distributions().each { |d|
+ puts " * #{d.name}"
+ }
+ puts ""
+
+ puts "* SYNC PACKAGE SERVER(S) *"
+ server.remote_pkg_servers.each { |s|
+ puts " * [#{s[1]}] #{s[0]}"
+ }
+ puts ""
+
+ puts "* PROJECT(S) *"
+ server.prjmgr.projects.each { |p|
+ puts " * [#{p.dist_name}] #{p.name}"
+ }
+ end
+
+
+ #####################
private
+ #####################
# check build server config path
def self.check_build_server_root
require 'optparse'
require 'utils'
+class BuildServerUsage
+ CREATE="build-svr create -n <server name> -t <ftp server url> [-u <package server url> -d <package server address>]"
+ REMOVE="build-svr remove -n <server name>"
+ START="build-svr start -n <server name> -p <port>"
+ STOP="build-svr stop -n <server name>"
+ UPGRADE="build-svr upgrade -n <server name>"
+ ADD_SVR="build-svr add-svr -n <server name> -d <friend server address>"
+ REMOVE_SVR= "build-svr remove-svr -n <server name> -d <friend server address>"
+ ADD_OS= "build-svr add-os -n <server name> -o <os>"
+ REMOVE_OS="build-svr remove-os -n <server name> -o <os>"
+ ADD_DIST= "build-svr add-dist -n <server name> -D <distribution name> -u <package server url> -d <package server address>"
+ REMOVE_DIST="build-svr remove-dist -n <server name> -D <distribution name>"
+ ADD_SYNC="build-svr add-sync -n <server name> -u <remote pkg server url> [--dist <distribution>]"
+ REMOVE_SYNC="build-svr remove-sync -n <server name> -u <remote pkg server url> [--dist <distribution>]"
+ ADD_PRJ="build-svr add-prj -n <server name> -N <project name> (-g <git repository> -b <git branch>|-P <package name>) [-w <password>] [-o <os list>] [--dist <distribution>]"
+ REMOVE_PRJ="build-svr remove-prj -n <server name> -N <project name> [--dist <distribution>]"
+ FULLBUILD="build-svr fullbuild -n <server name> [--dist <distribution>]"
+ REGISTER="build-svr register -n <server name> -P <package file> [--dist <distribution>]"
+ QUERY="build-svr query -n <server name>"
+end
+
def option_error_check( options )
case options[:cmd]
when "create"
if options[:name].nil? or options[:name].empty? or
- options[:url].nil? or options[:url].empty? or
- options[:domain].nil? or options[:domain].empty? or
options[:fdomain].nil? or options[:fdomain].empty? then
- raise ArgumentError, "Usage: build-svr create -n <server name> -u <package server url> -d <package server address> -t <ftp server url>"
+ raise ArgumentError, "Usage: " + BuildServerUsage::CREATE
end
when "remove"
if options[:name].nil? or options[:name].empty? then
- raise ArgumentError, "Usage: build-svr remove -n <server name>"
+ raise ArgumentError, "Usage: " + BuildServerUsage::REMOVE
end
when "start"
if options[:name].nil? or options[:name].empty? or
options[:port].nil? then
- raise ArgumentError, "Usage: build-svr start -n <server name> -p <port>"
+ raise ArgumentError, "Usage: " + BuildServerUsage::START
end
when "stop"
if options[:name].nil? or options[:name].empty? then
- raise ArgumentError, "Usage: build-svr stop -n <server name>"
+ raise ArgumentError, "Usage: " + BuildServerUsage::STOP
end
when "upgrade"
if options[:name].nil? or options[:name].empty? then
- raise ArgumentError, "Usage: build-svr upgrade -n <server name>"
+ raise ArgumentError, "Usage: " + BuildServerUsage::UPGRADE
end
when "add-svr"
if options[:name].nil? or options[:name].empty? or
- ((options[:domain].nil? or options[:domain].empty?) and
- (options[:url].nil? or options[:url].empty?)) then
- raise ArgumentError, "Usage: build-svr add-svr -n <server name> (-d <friend server address>|-u <remote pkg server url>) [--proxy <proxy url>]"
+ (options[:domain].nil? or options[:domain].empty?) then
+ raise ArgumentError, "Usage: " + BuildServerUsage::ADD_SVR
+ end
+
+ when "remove-svr"
+ if options[:name].nil? or options[:name].empty? or
+ (options[:domain].nil? or options[:domain].empty?) then
+ raise ArgumentError, "Usage: " + BuildServerUsage::REMOVE_SVR
+ end
+
+ when "add-os"
+ if options[:name].nil? or options[:name].empty? or
+ options[:os].nil? or options[:os].empty? then
+ raise ArgumentError, "Usage: " + BuildServerUsage::ADD_OS
+ end
+
+ when "remove-os"
+ if options[:name].nil? or options[:name].empty? or
+ options[:os].nil? or options[:os].empty? then
+ raise ArgumentError, "Usage: " + BuildServerUsage::REMOVE_OS
+ end
+
+ when "add-dist"
+ if options[:name].nil? or options[:name].empty? or
+ options[:dist].nil? or options[:dist].empty? or
+ options[:url].nil? or options[:url].empty? or
+ options[:domain].nil? or options[:domain].empty? then
+ raise ArgumentError, "Usage: " + BuildServerUsage::ADD_DIST
+ end
+
+ when "remove-dist"
+ if options[:name].nil? or options[:name].empty? or
+ options[:dist].nil? or options[:dist].empty? then
+ raise ArgumentError, "Usage: " + BuildServerUsage::REMOVE_DIST
+ end
+
+ when "add-sync"
+ if options[:name].nil? or options[:name].empty? or
+ (options[:url].nil? or options[:url].empty?) then
+ raise ArgumentError, "Usage: " + BuildServerUsage::ADD_SYNC
+ end
+
+ when "remove-sync"
+ if options[:name].nil? or options[:name].empty? or
+ (options[:url].nil? or options[:url].empty?) then
+ raise ArgumentError, "Usage: " + BuildServerUsage::REMOVE_SYNC
end
when "add-prj"
if options[:name].nil? or options[:name].empty? or
options[:pid].nil? or options[:pid].empty? then
- raise ArgumentError, "Usage: build-svr add-prj -n <server name> -N <project name> (-g <git repository> -b <git branch>|-P <package name>) [-w <password>] [-o <os list>]"
+ raise ArgumentError, "Usage: " + BuildServerUsage::ADD_PRJ
end
- when "add-os"
+ when "remove-prj"
if options[:name].nil? or options[:name].empty? or
- options[:os].nil? or options[:os].empty? then
- raise ArgumentError, "Usage: build-svr add-os -n <server name> -o <os>"
+ options[:pid].nil? or options[:pid].empty? then
+ raise ArgumentError, "Usage: " + BuildServerUsage::REMOVE_PRJ
end
when "fullbuild"
if options[:name].nil? or options[:name].empty? then
- raise ArgumentError, "Usage: build-svr fullbuild -n <server name>"
+ raise ArgumentError, "Usage: " + BuildServerUsage::FULLBUILD
end
when "register"
if options[:name].nil? or options[:name].empty? or
options[:package].nil? or options[:package].empty? then
- raise ArgumentError, "Usage: build-svr register -n <server name> -P <package file>"
+ raise ArgumentError, "Usage: " + BuildServerUsage::REGISTER
+ end
+
+ when "query"
+ if options[:name].nil? or options[:name].empty? then
+ raise ArgumentError, "Usage: " + BuildServerUsage::QUERY
end
else
raise ArgumentError, "Input is incorrect : #{options[:cmd]}"
+ "\t" + "stop Stop the build-server." + "\n" \
+ "\t" + "upgrade Upgrade the build-server include friends." + "\n" \
+ "\t" + "add-svr Add remote build/package server for support multi-OS or distribute build job." + "\n" \
- + "\t" + "add-prj Register information for project what you want build berfore building a project." + "\n" \
+ + "\t" + "remove-svr Remove remote build/package server for support multi-OS or distribute build job." + "\n" \
+ + "\t" + "add-os Add supported OS." + "\n" \
+ + "\t" + "remove-os Remove supported OS." + "\n" \
+ + "\t" + "add-dist Add distribution." + "\n" \
+ + "\t" + "remove-dist Remove distribution." + "\n" \
+ + "\t" + "add-sync Add package repository URL to synchronize with." + "\n" \
+ + "\t" + "remove-sync Remove package repository URL." + "\n" \
+ + "\t" + "add-prj Add project to build." + "\n" \
+ + "\t" + "remove-prj Remove project." + "\n" \
+ "\t" + "register Register the package to the build-server." + "\n" \
+ "\t" + "fullbuild Build all your projects and upload them to package server." + "\n" \
+ + "\t" + "query Show build server configuration." + "\n" \
+ "\n" + "Subcommand usage:" + "\n" \
- + "\t" + "build-svr create -n <server name> -u <package server url> -d <package server address> -t <ftp server url>" + "\n" \
- + "\t" + "build-svr remove -n <server name>" + "\n" \
- + "\t" + "build-svr start -n <server name> -p <port>" + "\n" \
- + "\t" + "build-svr stop -n <server name>" + "\n" \
- + "\t" + "build-svr upgrade -n <server name>" + "\n" \
- + "\t" + "build-svr add-svr -n <server name> (-d <friend server address>|-u <remote pkg server url>) [--proxy <proxy url>]" + "\n" \
- + "\t" + "build-svr add-prj -n <server name> -N <project name> (-g <git repository> -b <git branch>|-P <package name>) [-w <password>] [-o <os list>]" + "\n" \
- + "\t" + "build-svr add-os -n <server name> -o <os>" + "\n" \
- + "\t" + "build-svr register -n <server name> -P <package file>" + "\n" \
- + "\t" + "build-svr fullbuild -n <server name>" + "\n" \
+ + "\t" + BuildServerUsage::CREATE + "\n" \
+ + "\t" + BuildServerUsage::REMOVE + "\n" \
+ + "\t" + BuildServerUsage::START + "\n" \
+ + "\t" + BuildServerUsage::STOP + "\n" \
+ + "\t" + BuildServerUsage::UPGRADE + "\n" \
+ + "\t" + BuildServerUsage::ADD_SVR + "\n" \
+ + "\t" + BuildServerUsage::REMOVE_SVR + "\n" \
+ + "\t" + BuildServerUsage::ADD_OS + "\n" \
+ + "\t" + BuildServerUsage::REMOVE_OS + "\n" \
+ + "\t" + BuildServerUsage::ADD_DIST + "\n" \
+ + "\t" + BuildServerUsage::REMOVE_DIST + "\n" \
+ + "\t" + BuildServerUsage::ADD_SYNC + "\n" \
+ + "\t" + BuildServerUsage::REMOVE_SYNC + "\n" \
+ + "\t" + BuildServerUsage::ADD_PRJ + "\n" \
+ + "\t" + BuildServerUsage::REMOVE_PRJ + "\n" \
+ + "\t" + BuildServerUsage::FULLBUILD + "\n" \
+ + "\t" + BuildServerUsage::REGISTER + "\n" \
+ + "\t" + BuildServerUsage::QUERY + "\n" \
+ "\n" + "Options:" + "\n"
optparse = OptionParser.new(nil, 32, ' '*8) do|opts|
#opts.on( '-r', '--remote <remote server id>', 'remote server id' ) do|remote|
# options[:remote] = remote
#end
+ options[:dist] = ""
+ opts.on( '-D', '--dist <distribution name>', 'distribution name' ) do |dist|
+ options[:dist] = dist
+ end
+
options[:passwd] = ""
opts.on( '-w', '--passwd <password>', 'password for managing project' ) do|passwd|
cmd = ARGV[0]
if cmd.eql? "create" or cmd.eql? "remove" or
cmd.eql? "start" or cmd.eql? "upgrade" or
- cmd.eql? "stop" or cmd.eql? "add-svr" or
- cmd.eql? "add-prj" or cmd.eql? "add-os" or
+ cmd.eql? "stop" or
+ cmd.eql? "add-svr" or cmd.eql? "remove-svr" or
+ cmd.eql? "add-os" or cmd.eql? "remove-os" or
+ cmd.eql? "add-dist" or cmd.eql? "remove-dist" or
+ cmd.eql? "add-sync" or cmd.eql? "remove-sync" or
+ cmd.eql? "add-prj" or cmd.eql? "remove-prj" or
cmd.eql? "fullbuild" or cmd.eql? "register" or
+ cmd.eql? "query" or
cmd =~ /(-v)|(--version)/ or
cmd =~ /(help)|(-h)|(--help)/ then
$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/common"
class CommonProject
- attr_accessor :name, :type, :passwd, :os_list, :dist_name
+ attr_accessor :name, :type, :passwd, :os_list, :dist_name, :path
# initialize
- def initialize( name, type, server, os_list )
+ def initialize( name, type, server, os_list, dist_name="BASE" )
@project_id = -1
@name = name
@type = type
@passwd = ""
@os_list = os_list
@server = server
- @dist_name = "BASE"
+ @dist_name = dist_name
+ if @dist_name == "BASE" then
+ @path = "#{@server.path}/projects/#{@name}"
+ else
+ @path = "#{@server.path}/projects/#{@dist_name}/#{@name}"
+ end
@extra_infos = {}
read_ext_info
end
+
+ def init()
+ # create project directory if not exist
+ if not File.exist? @path then FileUtils.mkdir_p @path end
+ end
+
#return passwd
def is_passwd_set?()
def write_ext_info
# write to file
- info_file = "#{@server.path}/projects/#{@name}/extra"
+ info_file = "#{@path}/extra"
File.open( info_file, "w" ) do |f|
@extra_infos.each { |key,value|
f.puts "#{key} : #{value}"
# set extra info
def read_ext_info
- info_file = "#{@server.path}/projects/#{@name}/extra"
+ info_file = "#{@path}/extra"
if not File.exists? info_file then return end
File.open( info_file, "r" ) do |f|
while (not f.gets and line = f.gets.split(":"))
class DistributionManager
- attr_accessor :max_working_jobs, :jobs, :internal_jobs, :reverse_build_jobs
- attr_accessor :internal_job_schedule
+ attr_accessor :distributions
# initialize
def initialize( server )
end
+ # get default distribution
+ def get_default_distribution_name()
+ if @distributions.count > 0 then
+ return @distributions[0].name
+ end
+
+ return nil
+ end
+
+
# get distribution
def get_distribution(name)
@distributions.each { |d|
if distribution_exist?(name) then
@server.log.info "The distribution \"#{name}\" already exists on server"
@server.log.error "Adding distribution failed!"
- return
+ return false
end
add_distribution_internal(name, pkgsvr_url, pkgsvr_ip, pkgsvr_port)
save_db()
@server.log.info "Added a new distribution \"#{name}\""
+ return true
end
# remove
def remove_distribution(name)
- if not distribution.exist?(name) then
+ if not distribution_exist?(name) then
@server.log.error "The distribution \"#{name}\" does not exists on server"
@server.log.error "Removing distribution failed!"
- return
+ return false
end
remove_distribution_internal(name)
@server.log.info "Removed the distribution \"#{name}\""
+ return true
end
@distributions.delete get_distribution(name)
end
+
+ def get_all_distributions()
+ return @distributions
+ end
+
#END
end
protected
def get_source_code_internal()
# check git directory
- git_path = "#{@server.path}/projects/#{@project.name}/cache/git"
- cache_path = "#{@server.path}/projects/#{@project.name}/cache"
+ git_path = "#{@project.path}/cache/git"
+ cache_path = "#{@project.path}/cache"
if not File.exist? cache_path then
FileUtils.mkdir_p cache_path
end
attr_accessor :repository, :branch
# initialize
- def initialize( name, server, os_list, repos = nil, branch = nil )
- super(name, "GIT", server, os_list)
+ def initialize( name, server, os_list, dist_name, repos = nil, branch = nil )
+ super(name, "GIT", server, os_list, dist_name)
@repository = repos
@branch = branch
@source_infos = {}
@source_infos[version] = info
# write to file
- sources_file = "#{@server.path}/projects/#{@name}/sources"
+ sources_file = "#{@path}/sources"
File.open( sources_file, "w" ) do |f|
@source_infos.each { |key,value|
f.puts "#{key},#{value}"
# copy package info
def copy_package_info(version, file_path)
# check pkginfo directory
- pkginfo_dir = "#{@server.path}/projects/#{@name}/pkginfos"
+ pkginfo_dir = "#{@path}/pkginfos"
if not File.exist? pkginfo_dir then
FileUtils.mkdir_p pkginfo_dir
end
end
def save_db()
- config_file = "#{@server.path}/projects/#{@name}/build"
+ config_file = "#{@path}/build"
File.open( config_file, "w" ) do |f|
f.puts "TYPE=GIT"
f.puts "GIT_REPOSITORY=#{@repository}"
def load_db()
# git
- config_file = "#{@server.path}/projects/#{@name}/build"
+ config_file = "#{@path}/build"
repos="none"
branch="master"
File.open( config_file, "r" ) do |f|
@branch = branch
# read source info
- sources_file = "#{@server.path}/projects/#{@name}/sources"
+ sources_file = "#{@path}/sources"
if File.exist? sources_file then
File.open(sources_file, "r") do |f|
f.each_line do |l|
end
# read pkginfo
- pkginfo_dir = "#{@server.path}/projects/#{@name}/pkginfos"
+ pkginfo_dir = "#{@path}/pkginfos"
if not File.exist? pkginfo_dir then FileUtils.mkdir_p pkginfo_dir end
Dir.new(pkginfo_dir).entries.each do |file|
if file.eql? "." or file.eql? ".." then next end
end
- def create_new_register_job( file_path )
- return RegisterPackageJob.new( file_path, nil, @parent )
+ def create_new_register_job( file_path, dist_name )
+ return RegisterPackageJob.new( file_path, nil, @parent, nil, dist_name )
end
# add a normal job
# get_project of the name
- def get_project ( name )
+ def get_project ( name, dist_name )
@projects.each do |prj|
- if prj.name.eql? name then return prj end
+ if prj.name == name and prj.dist_name == dist_name then return prj end
end
return nil
end
- def add_git_project(name , repos, branch, passwd, os_list)
+ def add_git_project(name , repos, branch, passwd, os_list, dist_name)
load_db()
- prj = get_project( name)
+ prj = get_project(name, dist_name)
if not prj.nil? then return false end
- new_prj = GitBuildProject.new(name, @server, os_list, repos, branch)
+ new_prj = GitBuildProject.new(name, @server, os_list, dist_name, repos, branch)
if not passwd.nil? and not passwd.empty? then
new_prj.passwd = passwd
end
+ new_prj.dist_name = dist_name
new_prj.repository = repos
new_prj.branch = branch
- @projects.push new_prj
- # check project directory
- if not File.exist? "#{@project_root}/#{name}" then
- FileUtils.mkdir_p "#{@project_root}/#{name}"
- end
+ new_prj.init()
+
+ @projects.push new_prj
# write configuration
save_db()
end
- def add_binary_project(name, pkg_name, passwd, os_list)
+ def add_binary_project(name, pkg_name, passwd, os_list, dist_name)
load_db()
- prj = get_project( name)
+ prj = get_project(name, dist_name)
if not prj.nil? then return false end
- new_prj = BinaryUploadProject.new(name, @server, os_list, pkg_name)
+ new_prj = BinaryUploadProject.new(name, @server, os_list, dist_name, pkg_name)
if not passwd.nil? and not passwd.empty? then
new_prj.passwd = passwd
end
+ new_prj.dist_name = dist_name
new_prj.pkg_name = pkg_name
- @projects.push new_prj
- # check project directory
- if not File.exist? "#{@project_root}/#{name}" then
- FileUtils.mkdir_p "#{@project_root}/#{name}"
- end
+ new_prj.init()
+
+ @projects.push new_prj
save_db()
end
- def add_remote_project( name, server_id)
+ def remove_project( name, dist_name )
+ load_db()
+
+ # check project exist?
+ prj = get_project(name, dist_name)
+ if prj.nil? then return false end
+
+ # remove project directory
+ FileUtils.rm_rf prj.path
+
+ # remove it from list
+ @projects.delete prj
+
+ save_db()
+
+ return true
end
# create new job for project
# if cannot create, return nil
- def create_new_job( name, os )
- prj = get_project( name )
+ def create_new_job( name, os, dist_name )
+ prj = get_project( name, dist_name )
if prj.nil? then return nil end
return prj.create_new_job( os )
# create new full job
- def create_new_full_build_job( )
+ def create_new_full_build_job(dist_name="BASE")
# create multi job
result = MultiBuildJob.new( @server )
# create sub jobs
@projects.each do |prj|
if prj.type != "GIT" then next end
-
+ if prj.dist_name != dist_name then next end
+
prj.os_list.each do |os|
if not @server.supported_os_list.include? os then next end
- new_job = create_new_job( prj.name, os )
+ new_job = create_new_job( prj.name, os, dist_name )
if new_job.nil? then next end
# This make project to build
end
- def get_project_from_package_name(pkg_name)
+ def get_project_from_package_name(pkg_name, dist_name="BASE")
@projects.each do |prj|
+ # check project's distribution
+ if prj.dist_name != dist_name then next end
# check project provide target package
if prj.include_package?(pkg_name) then
return prj
# get project from git repository
- def get_git_project( repos )
+ def get_git_project( repos, dist_name )
@projects.each { |prj|
+ # check project's distribution
+ if prj.dist_name != dist_name then next end
if prj.type == "GIT" and prj.repository == repos then
return prj
end
end
- def create_unnamed_git_project(repos)
+ def create_unnamed_git_project(repos, dist_name)
name = "UNNAMED_PRJ_#{@projects.count}"
branch = "master"
passwd = nil
os_list = Utils.get_all_OSs()
# add
- add_git_project(name , repos, branch, passwd, os_list)
+ add_git_project(name , repos, branch, passwd, os_list, dist_name)
# get
- return get_project(name)
+ return get_project(name, dist_name)
end
@projects.each { |prj|
prj_id = prj.get_project_id()
# COMMON
- db.execute "INSERT INTO projects VALUES(#{prj_id}, '#{prj.name}', '#{prj.type}', '#{prj.passwd}', 'BASE')"
+ db.execute "INSERT INTO projects VALUES(#{prj_id}, '#{prj.name}', '#{prj.type}', '#{prj.passwd}', '#{prj.dist_name}')"
# OS
prj.os_list.each { |os|
stm2 = nil
if prj_type == "GIT" then
- new_project = GitBuildProject.new(prj_name, @server, prj_os_list)
+ new_project = GitBuildProject.new(prj_name, @server, prj_os_list, prj_dist)
else
- new_project = BinaryUploadProject.new(prj_name, @server, prj_os_list)
+ new_project = BinaryUploadProject.new(prj_name, @server, prj_os_list, prj_dist)
end
new_project.set_project_id(prj_id)
end
end
- protected
-
- # load and create project
- def load_project(name)
-
- # check config file
- config_file = "#{@project_root}/#{name}/build"
- if not File.exist? config_file then return nil end
-
- # read configuration
- type="GIT"
- passwd=""
- repos="none"
- branch="master"
- os_list = @server.supported_os_list
- rserver_id=nil
- pkg_name=nil
- File.open( config_file, "r" ) do |f|
- f.each_line do |l|
- idx = l.index("=") + 1
- length = l.length - idx
-
- if l.start_with?("TYPE=")
- type = l[idx,length].strip
- elsif l.start_with?("PASSWD=")
- passwd = l[idx,length].strip
- elsif l.start_with?("GIT_REPOSITORY=")
- repos = l[idx,length].strip
- elsif l.start_with?("GIT_BRANCH=")
- branch = l[idx,length].strip
- elsif l.start_with?("OS_LIST=")
- os_list = l[idx,length].strip.split(",")
- elsif l.start_with?("REMOTE_SERVER_ID=")
- rserver_id = l[idx,length].strip
- elsif l.start_with?("PACKAGE_NAME=")
- pkg_name = l[idx,length].strip
- else
- next
- end
- end
- end
-
- # write back & create project
- if type == "GIT" then
- write_configuration(name, repos, branch, passwd, os_list)
- new_project = GitBuildProject.new(name, @server, os_list, repos, branch)
-
- # read source info
- sources_file = "#{@project_root}/#{name}/sources"
- if File.exist? sources_file then
- File.open(sources_file, "r") do |f|
- f.each_line do |l|
- version = l.split(",")[0].strip
- info = l.split(",")[1].strip
-
- new_project.add_source_info( version, info )
- end
- end
- end
-
- # read pkginfo
- pkginfo_dir = "#{@project_root}/#{name}/pkginfos"
- if not File.exist? pkginfo_dir then FileUtils.mkdir_p pkginfo_dir end
- Dir.new(pkginfo_dir).entries.each do |file|
- if file.eql? "." or file.eql? ".." then next end
-
- vlen = file.length - ".manifest".length
- version = file[0,vlen]
- new_project.add_package_info( version, "#{pkginfo_dir}/#{file}" )
- end
-
- elsif type == "BINARY" then
- write_configuration_for_binary_project(name, pkg_name, passwd, os_list)
- new_project = BinaryUploadProject.new(name, @server, os_list, pkg_name)
- end
-
-
- # set passwd if exist
- if not passwd.empty? then
- new_project.passwd = passwd
- end
-
-
- return new_project
- end
-
# write configuration
def write_configuration(name, repos, branch, passwd, os_list )
# initialize
- def initialize( local_path, project, server, ftpurl=nil )
+ def initialize( local_path, project, server, ftpurl=nil, dist_name=nil )
super(server)
@log = nil
@type = "REGISTER"
@host_os = Utils::HOST_OS
- @pkgsvr_url = @server.distmgr.get_distribution(project.dist_name).pkgsvr_url
- @pkgsvr_ip = @server.distmgr.get_distribution(project.dist_name).pkgsvr_ip
- @pkgsvr_port = @server.distmgr.get_distribution(project.dist_name).pkgsvr_port
+ if not project.nil? then
+ @pkgsvr_url = @server.distmgr.get_distribution(project.dist_name).pkgsvr_url
+ @pkgsvr_ip = @server.distmgr.get_distribution(project.dist_name).pkgsvr_ip
+ @pkgsvr_port = @server.distmgr.get_distribution(project.dist_name).pkgsvr_port
+ else
+ @pkgsvr_url = @server.distmgr.get_distribution(dist_name).pkgsvr_url
+ @pkgsvr_ip = @server.distmgr.get_distribution(dist_name).pkgsvr_ip
+ @pkgsvr_port = @server.distmgr.get_distribution(dist_name).pkgsvr_port
+ end
@job_root = "#{@server.path}/jobs/#{@id}"
@source_path = @job_root+"/temp"
@job_working_dir=@job_root+"/works"
# build
ret = build(@job.project.repository, @job.source_path, @job.os,
@job.is_rev_build_check_job(), @job.git_commit, @job.no_reverse,
- local_pkgs )
+ local_pkgs, @job.project.dist_name )
# reset job
@job = nil
# build
- def build( git_repos, source_path, os, is_rev_build, srcinfo, no_reverse, local_pkgs )
+ def build( git_repos, source_path, os, is_rev_build, srcinfo, no_reverse, local_pkgs, dist_name )
@log.info( "Start to build on remote server...", Log::LV_USER )
# create unique dock number
# send build request
@log.info( "Sending build request to remote server...", Log::LV_USER )
result, result_files = send_build_request(git_repos, os,
- is_rev_build, srcinfo, no_reverse, local_pkgs, dock)
+ is_rev_build, srcinfo, no_reverse, local_pkgs, dock, dist_name)
@log.info( "Receiving log file from remote server...", Log::LV_USER )
if not receive_file_from_remote( "#{source_path}/../remote_log", dock ) then
# send build request
protected
- def send_build_request(git_repos, os, is_rev_build, commit, no_reverse, local_pkgs, dock = "0")
+ def send_build_request(git_repos, os, is_rev_build, commit, no_reverse, local_pkgs, dock = "0", dist_name="BASE")
result_files = []
client = BuildCommClient.create( @addr, @port, @log )
local_pkg_names = local_pkgs.map { |path| File.basename(path) }
# send
- # format: BUILD|GIT|repository|passwd|os|async|no_reverse|internal|rev-build|commit|pkgs|dock_num
- # value : BUILD|GIT|repository| |os|NO |no_reverse|YES |rev-build|commit|pkgs|dock_num
+ # format: BUILD|GIT|repository|passwd|os|async|no_reverse|internal|rev-build|commit|pkgs|dock_num|dist_name
+ # value : BUILD|GIT|repository| |os|NO |no_reverse|YES |rev-build|commit|pkgs|dock_num|dist_name
result = true
commit = commit.nil? ? "":commit
pkg_list = local_pkg_names.join(",")
rev = is_rev_build ? "YES":"NO"
- msg = "BUILD|GIT|#{git_repos}||#{os}|NO|#{no_reverse}|YES|#{rev}|#{commit}|#{pkg_list}|#{dock}"
+ msg = "BUILD|GIT|#{git_repos}||#{os}|NO|#{no_reverse}|YES|#{rev}|#{commit}|#{pkg_list}|#{dock}|#{dist_name}"
if client.send( msg ) then
result = client.read_lines do |l|
# write log first
raise "Invalid request format is used: #{line}"
end
- # Case1. BUILD|GIT|project_name|passwd|os_list|async|no_reverse
- # Case2. BUILD|GIT|git_repos||os|async|no_reverse|internal|rev_build|commit|pkgs|dock_num
+ # Case1. BUILD|GIT|project_name|passwd|os_list|async|no_reverse|dist_name
+ # Case2. BUILD|GIT|git_repos||os|async|no_reverse|internal|rev_build|commit|pkgs|dock_num|dist_name
# parse
project_name_list = tok[2].split(",")
git_commit = (not tok[9].nil? and not tok[9].empty?) ? tok[9] : nil
pkg_files = (not tok[10].nil? and not tok[10].empty?) ? tok[10].split(",") : []
dock_num = (not tok[11].nil? and not tok[11].empty?) ? tok[11].strip : "0"
+ if not is_internal then
+ dist_name = tok[7].strip
+ else
+ dist_name = tok[12].strip
+ end
+ if (dist_name.nil? or dist_name.empty?) then
+ dist_name = @parent_server.distmgr.get_default_distribution_name()
+ end
# check supported os if not internal job
if not is_internal then
project_name_list.each { |pname|
if not passwd_list[i].nil? then passwd = passwd_list[i]
else passwd = passwd_list[0] end
- check_build_project(pname,passwd,req)
+ check_build_project(pname,passwd,dist_name,req)
os_list.each { |os|
- new_job = create_new_job( pname, os )
+ new_job = create_new_job( pname, os, dist_name )
if new_job.nil? then
@log.warn "\"#{pname}\" does not support #{os}"
next
git_repos = project_name_list[0]
os = os_list[0]
- new_job = create_new_internal_job(git_repos, os, git_commit, pkg_files, dock_num )
+ new_job = create_new_internal_job(git_repos, os, git_commit, pkg_files, dock_num, dist_name )
if rev_job then new_job.set_rev_build_check_job(nil) end
# single job
pname = project_name_list[0]
os = os_list[0]
- check_build_project(pname,passwd,req)
- new_job = create_new_job( pname, os )
+ check_build_project(pname,passwd,dist_name,req)
+ new_job = create_new_job( pname, os, dist_name )
else
BuildCommServer.send_begin(req)
req.puts "Error: There is no valid job to build!"
end
- def check_build_project(prj_name, passwd, req)
+ def check_build_project(prj_name, passwd, dist_name, req)
# check project
- prj = check_project_exist(prj_name, req)
+ prj = check_project_exist(prj_name, dist_name, req)
if prj.nil? then
raise "Requested project \"#{prj_name}\" does not exist!"
end
passwd=tok[3]
os=tok[4]
async = tok[5].eql? "YES"
+ dist_name = tok[6]
+ if (dist_name.nil? or dist_name.empty?) then
+ dist_name = @parent_server.distmgr.get_default_distribution_name()
+ end
# check project
- prj = check_project_exist(project_name, req)
+ prj = check_project_exist(project_name, dist_name, req)
if prj.nil? then
raise "Requested project does not exist!"
end
os = os_list[0]
# create new job
- new_job = create_new_job( project_name, os )
+ new_job = create_new_job( project_name, os, dist_name )
if new_job.nil? then
raise "Creating build job failed : #{project_name}, #{os}"
end
end
server_passwd = tok[1]
+ dist_name = tok[2]
+ if (dist_name.nil? or dist_name.empty?) then
+ dist_name = @parent_server.distmgr.get_default_distribution_name()
+ end
# check server password
if server_passwd != @parent_server.password then
BuildCommServer.send(req,"Password mismatched!")
BuildCommServer.send_end(req)
BuildCommServer.disconnect(req)
- else
- # create full build job
- new_job = @parent_server.prjmgr.create_new_full_build_job()
+ return
+ elsif not @parent_server.distmgr.distribution_exist?(dist_name) then
+ BuildCommServer.send_begin(req)
+ BuildCommServer.send(req,"Distribution not found!")
+ BuildCommServer.send_end(req)
+ BuildCommServer.disconnect(req)
+ return
+ end
- # set logger
- logger = JobLog.new( new_job, req )
- new_job.set_logger(logger)
- logger.init
+ # create full build job
+ new_job = @parent_server.prjmgr.create_new_full_build_job(dist_name)
- # add to job
- @parent_server.jobmgr.add_job( new_job )
- end
+ # set logger
+ logger = JobLog.new( new_job, req )
+ new_job.set_logger(logger)
+ logger.init
+
+ # add to job
+ @parent_server.jobmgr.add_job( new_job )
end
type = tok[1]
case type
- # REGISTER|BINARY-LOCAL|local_path
- # REGISTER|SOURCE-LOCAL|local_path
+ # REGISTER|BINARY-LOCAL|local_path|passwd|dist_name
+ # REGISTER|SOURCE-LOCAL|local_path|passwd|dist_name
when "BINARY-LOCAL", "SOURCE-LOCAL"
file_path = tok[2]
- new_job = @parent_server.jobmgr.create_new_register_job( file_path )
+ dist_name = tok[4]
+ if (dist_name.nil? or dist_name.empty?) then
+ dist_name = @parent_server.distmgr.get_default_distribution_name()
+ end
+ new_job = @parent_server.jobmgr.create_new_register_job( file_path, dist_name )
logger = JobLog.new( new_job, req )
new_job.set_logger(logger)
logger.init
# add
@parent_server.jobmgr.add_job( new_job )
- # REGISTER|BINARY|filename|passwd
+ # REGISTER|BINARY|filename|passwd|dock|dist_name
when "BINARY"
# parse
filename = tok[2]
passwd = tok[3]
dock = (tok[4].nil? or tok[4].empty?) ? "0" : tok[4].strip
+ dist_name = tok[5]
+ if (dist_name.nil? or dist_name.empty?) then
+ dist_name = @parent_server.distmgr.get_default_distribution_name()
+ end
# check project
- prj = check_project_for_package_file_name(filename, req)
+ prj = check_project_for_package_file_name(filename, dist_name, req)
if prj.nil? then
raise "No project is defined for this binary : #{filename}!"
end
# create new job
@log.info "Received a request for uploading binaries : #{filename}"
- new_job = create_new_upload_job( prj.name, filename, dock, req )
+ new_job = create_new_upload_job( prj.name, filename, dock, dist_name, req )
if new_job.nil? then
raise "Creating build job failed : #{prj.name}, #{filename}"
end
private
- def check_project_exist(project_name, req)
- prj = @parent_server.prjmgr.get_project(project_name)
+ def check_project_exist(project_name, dist_name, req)
+ prj = @parent_server.prjmgr.get_project(project_name, dist_name)
if prj.nil? then
BuildCommServer.send_begin(req)
req.puts "Error: Requested project \"#{project_name}\" does not exist!"
end
private
- def check_project_for_package_file_name(filename, req)
+ def check_project_for_package_file_name(filename, dist_name, req)
# get package name
new_name = filename.sub(/(.*)_(.*)_(.*)\.zip/,'\1,\2,\3')
pkg_name = new_name.split(",")[0]
- prj = @parent_server.prjmgr.get_project_from_package_name(pkg_name)
+ prj = @parent_server.prjmgr.get_project_from_package_name(pkg_name, dist_name)
if prj.nil? then
BuildCommServer.send_begin(req)
req.puts "Error: Requested project does not exist!"
private
- def create_new_job( project_name, os )
- return @parent_server.prjmgr.create_new_job(project_name, os)
+ def create_new_job( project_name, os, dist_name )
+ return @parent_server.prjmgr.create_new_job(project_name, os, dist_name)
end
private
- def create_new_upload_job( project_name, filename, dock, req)
+ def create_new_upload_job( project_name, filename, dock, dist_name, req)
- new_job = @parent_server.prjmgr.get_project(project_name).create_new_job(filename, dock)
+ new_job = @parent_server.prjmgr.get_project(project_name, dist_name).create_new_job(filename, dock)
if new_job.nil? then
BuildCommServer.send_begin(req)
- req.puts "Error: Creating job failed: #{project_name} #{filename}"
+ req.puts "Error: Creating job failed: #{project_name} #{filename} #{dist_name}"
BuildCommServer.send_end(req)
return nil
end
private
- def create_new_internal_job( git_repos, os, git_commit, pkg_files, dock_num )
- prj = @parent_server.prjmgr.get_git_project( git_repos )
+ def create_new_internal_job( git_repos, os, git_commit, pkg_files, dock_num, dist_name )
+ prj = @parent_server.prjmgr.get_git_project( git_repos, dist_name )
if prj.nil? then
- prj = @parent_server.prjmgr.create_unnamed_git_project( git_repos )
+ prj = @parent_server.prjmgr.create_unnamed_git_project( git_repos, dist_name )
end
new_job = prj.create_new_job(os)
new_job.set_internal_job( dock_num )
register Register the package to the build-server.
Subcommand usage:
-build-cli build -N <project name> -d <server address> [-o <os>] [-w <password>] [--async]
-build-cli resolve -N <project name> -d <server address> [-o <os>] [-w <password>] [--async]
+build-cli build -N <project name> -d <server address> [-o <os>] [-w <password>] [--async] [-D <distribution name>]
+build-cli resolve -N <project name> -d <server address> [-o <os>] [-w <password>] [--async] [-D <distribution name>]
build-cli query -d <server address>
build-cli query-system -d <server address>
build-cli query-project -d <server address>
build-cli query-job -d <server address>
build-cli cancel -j <job number> -d <server address> [-w <password>]
-build-cli register -P <file name> -d <server address> -t <ftp server url> [-w <password>]
+build-cli register -P <package file> -d <server address> -t <ftp server url> [-w <password>] [-D <distribution name>]
Options:
-N, --project <project name> project name
-j, --job <job number> job number
-w, --passwd <password> password for managing project
-P, --pkg <package file> package file path
+-D, --dist <distribution name> distribution name
-t, --ftp <ftp server url> ftp server url: ftp://dibsftp:dibsftp@127.0.0.1
-h, --help display help
-v, --version display version
rm -rf buildsvr01
mkdir buildsvr01
#EXEC
-cd buildsvr01; ../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132
+cd buildsvr01; ../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://ftpuser:ftpuser@172.21.111.124
#POST-EXEC
../build-svr remove -n testserver3
rm -rf buildsvr01
#EXPECT
Build-server administer service command-line tool.
-Usage: build-svr <SUBCOMMAND> [OPTS] or build-svr -h
+Usage: build-svr <SUBCOMMAND> [OPTS] or build-svr (-h|-v)
Subcommands:
- create Create the build-server.
- remove Remove the build-server.
- start Start the build-server.
- stop Stop the build-server.
- add-svr Add build-server for support multi-OS or distribute build job.
- add-prj Register information for project what you want build berfore building a project.
- register Register the package to the build-server.
- fullbuild Build all your projects and upload them to package server.
+create Create the build-server.
+remove Remove the build-server.
+start Start the build-server.
+stop Stop the build-server.
+upgrade Upgrade the build-server include friends.
+add-svr Add remote build/package server for support multi-OS or distribute build job.
+remove-svr Remove remote build/package server for support multi-OS or distribute build job.
+add-os Add supported OS.
+remove-os Remove supported OS.
+add-dist Add distribution.
+remove-dist Remove distribution.
+add-sync Add package repository URL to synchronize with.
+remove-sync Remove package repository URL.
+add-prj Add project to build.
+remove-prj Remove project.
+register Register the package to the build-server.
+fullbuild Build all your projects and upload them to package server.
+query Show build server configuration.
Subcommand usage:
- build-svr create -n <server name> -u <package server url> -d <package server address> -t <ftp server url>
- build-svr remove -n <server name>
- build-svr start -n <server name> -p <port>
- build-svr stop -n <server name>
- build-svr add-svr -n <server name> -d <friend server address>
- build-svr add-prj -n <server name> -N <project name> [-g <git repository>] [-b <git branch>] [-P <package name>] [-w <password>] [-o <os list>]
- build-svr add-os -n <server name> -o <os>
- build-svr register -n <server name> -P <package file>
- build-svr fullbuild -n <server name>
-
-Options:
- -n, --name <server name> build server name
- -u, --url <package server url> package server url: http://127.0.0.1/dibs/unstable
- -d, --address <server address> server address: 127.0.0.1:2224
- -p, --port <port> server port number: 2224
- -P, --pkg <package name/file> package file path or name
- -o, --os <target os list> ex) linux,windows
- -N, --pname <project name> project name
- -g, --git <git repository> git repository
- -b, --branch <git branch> git branch
- -w, --passwd <password> password for managing project
- -t, --ftp <ftp server url> ftp server url: ftp://dibsftp:dibsftp@127.0.0.1:1024
- -h, --help display this information
- -v, --version display version
-
+build-svr create -n <server name> -t <ftp server url> [-u <package server url> -d <package server address>]
+build-svr remove -n <server name>
+build-svr start -n <server name> -p <port>
+build-svr stop -n <server name>
+build-svr upgrade -n <server name>
+build-svr add-svr -n <server name> -d <friend server address>
+build-svr remove-svr -n <server name> -d <friend server address>
+build-svr add-os -n <server name> -o <os>
+build-svr remove-os -n <server name> -o <os>
+build-svr add-dist -n <server name> -D <distribution name> -u <package server url> -d <package server address>
+build-svr remove-dist -n <server name> -D <distribution name>
+build-svr add-sync -n <server name> -u <remote pkg server url> [--dist <distribution>]
+build-svr remove-sync -n <server name> -u <remote pkg server url> [--dist <distribution>]
+build-svr add-prj -n <server name> -N <project name> (-g <git repository> -b <git branch>|-P <package name>) [-w <password>] [-o <os list>] [--dist <distribution>]
+build-svr remove-prj -n <server name> -N <project name> [--dist <distribution>]
+build-svr fullbuild -n <server name> [--dist <distribution>]
+build-svr register -n <server name> -P <package file> [--dist <distribution>]
+build-svr query -n <server name>
cd buildsvr01; ../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132
#EXEC
../build-svr add-svr -n testserver3 -d 127.0.0.1:2223
-cat ~/.build_tools/build_server/testserver3/friends
+../build-svr query -n testserver3
#POST-EXEC
../build-svr remove -n testserver3
rm -rf buildsvr01
#EXPECT
Friend server is added successfully!
-127.0.0.1,2223
+* REMOTE SERVER(S) *
+* 127.0.0.1:2223
+
+* SUPPORTED OS *
+
+* DISTRIBUTION(S) *
+* BASE
+
+* SYNC PACKAGE SERVER(S) *
+
+* PROJECT(S) *
../build-svr remove -n testserver3
rm -rf buildsvr01
#EXPECT
-Test time is elapsed!
cd buildsvr01; ../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132
#EXEC
../build-svr add-prj -n testserver3 -N testa -g test_git -b test_branch -w 1111
-cat buildsvr01/projects/testa/build | grep PASSWD
#POST-EXEC
#EXPECT
Adding project succeeded!
-PASSWD=1111
cd buildsvr01; ../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132
../build-svr add-os -n testserver3 -o linux
#EXEC
-../build-svr add-prj -n testserver3 -N testx -g test_git -b test_branch -o linux
+ruby -d ../build-svr add-prj -n testserver3 -N testx -g test_git -b test_branch -o linux
#POST-EXEC
../build-svr remove -n testserver3
rm -rf buildsvr01
cd buildsvr01; ../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132
#EXEC
../build-svr add-os -n testserver3 -o linux
-cat ~/.build_tools/build_server/testserver3/supported_os_list
+../build-svr query -n testserver3
#POST-EXEC
../build-svr remove -n testserver3
rm -rf buildsvr01
#EXPECT
Target OS is added successfully!
-linux
+* REMOTE SERVER(S) *
+
+* SUPPORTED OS *
+* linux
+
+* DISTRIBUTION(S) *
+* BASE
+
+* SYNC PACKAGE SERVER(S) *
+
+* PROJECT(S) *
#PRE-EXEC
rm -rf buildsvr01
mkdir buildsvr01
-cd buildsvr01; ../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132
+cd buildsvr01; ../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://ftpuser:ftpuser@172.21.111.124
../build-svr add-os -n testserver3 -o linux
cp bin/bin_0.0.0_linux.zip bin/bin_0.0.0_wrongosname.zip
../build-svr start -n testserver3 -p 2223 &
--- /dev/null
+#PRE-EXEC
+../build-svr add-os -n testserver3 -o ubuntu-64
+#EXEC
+../build-svr remove-os -n testserver3 -o ubuntu-64
+../build-svr query -n testserver3
+#POST-EXEC
+#EXPECT
+Target OS is removed successfully!
+* REMOTE SERVER(S) *
+
+* SUPPORTED OS *
+* ubuntu-32
+
+* DISTRIBUTION(S) *
+
+* SYNC PACKAGE SERVER(S) *
+
+* PROJECT(S) *
--- /dev/null
+#PRE-EXEC
+echo "no os"
+#EXEC
+../build-svr remove-os -n testserver3 -o ubuntu-644
+#POST-EXEC
+#EXPECT
+Target OS does not exist in list!
--- /dev/null
+#PRE-EXEC
+#EXEC
+../build-svr add-dist -n testserver3 -D unstable -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333
+../build-svr query -n testserver3
+#POST-EXEC
+#EXPECT
+Distribution is added successfully!
+* REMOTE SERVER(S) *
+
+* SUPPORTED OS *
+* ubuntu-32
+
+* DISTRIBUTION(S) *
+* unstable
+
+* SYNC PACKAGE SERVER(S) *
+
+* PROJECT(S) *
--- /dev/null
+#PRE-EXEC
+../build-svr add-dist -n testserver3 -D unstable2 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333
+#EXEC
+../build-svr remove-dist -n testserver3 -D unstable2
+../build-svr query -n testserver3
+#POST-EXEC
+#EXPECT
+Distribution is removed successfully!
+* REMOTE SERVER(S) *
+
+* SUPPORTED OS *
+* ubuntu-32
+
+* DISTRIBUTION(S) *
+* unstable
+
+* SYNC PACKAGE SERVER(S) *
+
+* PROJECT(S) *
--- /dev/null
+#PRE-EXEC
+#EXEC
+../build-svr remove-dist -n testserver3 -D unstable22
+#POST-EXEC
+#EXPECT
+Distribution does not exist in list!
--- /dev/null
+#PRE-EXEC
+#EXEC
+../build-svr add-sync -n testserver3 -u http://xxx
+../build-svr query -n testserver3
+../build-svr add-sync -n testserver3 -D unstable -u http://yyy
+../build-svr query -n testserver3
+../build-svr remove-sync -n testserver3 -u http://yyy
+../build-svr query -n testserver3
+../build-svr remove-sync -n testserver3 -D unstable testserver3 -u http://xxx
+../build-svr query -n testserver3
+../build-svr remove-sync -n testserver3 -D unstable testserver3 -u http://xxxyyyy
+#POST-EXEC
+#EXPECT
+Remote package server is added!
+* REMOTE SERVER(S) *
+
+* SUPPORTED OS *
+* ubuntu-32
+
+* DISTRIBUTION(S) *
+* unstable
+
+* SYNC PACKAGE SERVER(S) *
+* [unstable] http://xxx
+
+* PROJECT(S) *
+Remote package server is added!
+* REMOTE SERVER(S) *
+
+* SUPPORTED OS *
+* ubuntu-32
+
+* DISTRIBUTION(S) *
+* unstable
+
+* SYNC PACKAGE SERVER(S) *
+* [unstable] http://xxx
+* [unstable] http://yyy
+
+* PROJECT(S) *
+Remote package server is removed!
+* REMOTE SERVER(S) *
+
+* SUPPORTED OS *
+* ubuntu-32
+
+* DISTRIBUTION(S) *
+* unstable
+
+* SYNC PACKAGE SERVER(S) *
+* [unstable] http://xxx
+
+* PROJECT(S) *
+Remote package server is removed!
+* REMOTE SERVER(S) *
+
+* SUPPORTED OS *
+* ubuntu-32
+
+* DISTRIBUTION(S) *
+* unstable
+
+* SYNC PACKAGE SERVER(S) *
+
+* PROJECT(S) *
+The server does not exist in list!
--- /dev/null
+#PRE-EXEC
+../build-svr add-dist -n testserver3 -D unstable2 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333
+#EXEC
+../build-svr add-prj -n testserver3 -N test1 -g test1_git -b test1_branch
+../build-svr query -n testserver3
+../build-svr add-prj -n testserver3 -D unstable -N test2 -g test1_git -b test1_branch
+../build-svr add-prj -n testserver3 -D unstable2 -N test1 -g test1_git -b test1_branch
+../build-svr query -n testserver3
+../build-svr remove-prj -n testserver3 -N test1
+../build-svr query -n testserver3
+../build-svr remove-prj -n testserver3 -D unstable -N test2
+../build-svr remove-prj -n testserver3 -D unstable2 -N test1
+../build-svr query -n testserver3
+../build-svr remove-prj -n testserver3 -D unstable -N testxxx
+#POST-EXEC
+../build-svr remove-dist -n testserver3 -D unstable2
+#EXPECT
+Adding project succeeded!
+* REMOTE SERVER(S) *
+
+* SUPPORTED OS *
+* ubuntu-32
+
+* DISTRIBUTION(S) *
+* unstable
+* unstable2
+
+* SYNC PACKAGE SERVER(S) *
+
+* PROJECT(S) *
+* [unstable] test1
+Adding project succeeded!
+Adding project succeeded!
+* REMOTE SERVER(S) *
+
+* SUPPORTED OS *
+* ubuntu-32
+
+* DISTRIBUTION(S) *
+* unstable
+* unstable2
+
+* SYNC PACKAGE SERVER(S) *
+
+* PROJECT(S) *
+* [unstable] test1
+* [unstable] test2
+* [unstable2] test1
+Removing project succeeded!
+* REMOTE SERVER(S) *
+
+* SUPPORTED OS *
+* ubuntu-32
+
+* DISTRIBUTION(S) *
+* unstable
+* unstable2
+
+* SYNC PACKAGE SERVER(S) *
+
+* PROJECT(S) *
+* [unstable] test2
+* [unstable2] test1
+Removing project succeeded!
+Removing project succeeded!
+* REMOTE SERVER(S) *
+
+* SUPPORTED OS *
+* ubuntu-32
+
+* DISTRIBUTION(S) *
+* unstable
+* unstable2
+
+* SYNC PACKAGE SERVER(S) *
+
+* PROJECT(S) *
+Removing project failed!
--- /dev/null
+#PRE-EXEC
+#EXEC
+../build-svr add-prj -n testserver3 -D unstable -N testbin -P bin
+../build-svr query -n testserver3
+../build-svr remove-prj -n testserver3 -N testbin -D unstable
+#POST-EXEC
+#EXPECT
+Adding project succeeded!
+* REMOTE SERVER(S) *
+
+* SUPPORTED OS *
+* ubuntu-32
+
+* DISTRIBUTION(S) *
+* unstable
+
+* SYNC PACKAGE SERVER(S) *
+
+* PROJECT(S) *
+* [unstable] testbin
+Removing project succeeded!
--- /dev/null
+#PRE-EXEC
+#EXEC
+../build-svr register -n testserver3 -D unstable -P bin/bin_0.0.0_ubuntu-32.zip
+#POST-EXEC
+#EXPECT
+Info: Initializing job...
+Info: Checking package version ...
+Info: Invoking a thread for REGISTER Job
+Info: New Job
+Info: Checking reverse build dependency ...
+Info: Uploading ...
+Info: Upload succeeded. Sync local pkg-server again...
+Info: Snapshot:
+Info: Job is completed!
--- /dev/null
+#PRE-EXEC
+#EXEC
+../build-cli build -N testa -d 127.0.0.1:2223 -D unstable
+../build-cli build -N testa -d 127.0.0.1:2223 -D unstable2
+#POST-EXEC
+#EXPECT
+Info: Added new job
+Info: Initializing job...
+Info: Checking package version ...
+Info: Invoking a thread for building Job
+Info: New Job
+Info: Checking build dependency ...
+Info: Checking install dependency ...
+Info: Started to build this job...
+Info: JobBuilder
+Info: Downloding client is initializing...
+Info: Installing dependent packages...
+Info: Downloading dependent source packages...
+Info: Make clean...
+Info: Make build...
+Info: Make install...
+Info: Generatiing pkginfo.manifest...
+Info: Zipping...
+Info: Creating package file ... a_0.0.1_ubuntu-32.zip
+Info: Checking reverse build dependency ...
+Info: Uploading ...
+Info: Upload succeeded. Sync local pkg-server again...
+Info: Snapshot:
+Info: Job is completed!
+Info: Job is FINISHED successfully!
+Info: Updating the source info for project "testa"
+Info: Added new job
+Info: Initializing job...
+Info: Checking package version ...
+Info: Invoking a thread for building Job
+Info: New Job
+Info: Checking build dependency ...
+Info: Checking install dependency ...
+Info: Started to build this job...
+Info: JobBuilder
+Info: Downloding client is initializing...
+Info: Installing dependent packages...
+Info: Downloading dependent source packages...
+Info: Make clean...
+Info: Make build...
+Info: Make install...
+Info: Generatiing pkginfo.manifest...
+Info: Zipping...
+Info: Creating package file ... a_0.0.1_ubuntu-32.zip
+Info: Checking reverse build dependency ...
+Info: Uploading ...
+Info: Upload succeeded. Sync local pkg-server again...
+Info: Snapshot:
+Info: Job is completed!
+Info: Job is FINISHED successfully!
+Info: Updating the source info for project "testa"
--- /dev/null
+#PRE-EXEC
+#EXEC
+../build-cli register -d 127.0.0.1:2223 -P bin/bin_0.0.0_ubuntu-32.zip -D unstable2 -t ftp://ftpuser:ftpuser@127.0.0.1
+#POST-EXEC
+#EXPECT
+Info: Added new job
+Info: Initializing job...
+Info: Checking package version ...
+Info: Invoking a thread for REGISTER Job
+Info: New Job
+Info: Checking reverse build dependency ...
+Info: Uploading ...
+Info: Upload succeeded. Sync local pkg-server again...
+Info: Snapshot:
+Info: Job is completed!
--- /dev/null
+#PRE-EXEC
+#EXEC
+../build-svr fullbuild -n testserver3 -D unstable2
+#POST-EXEC
+#EXPECT
+Info: Initializing job...
+Info: Invoking a thread for MULTI-BUILD Job
+Info: New Job
+Info: Added new job "testa" for ubuntu-32!
+Info: Added new job "testb" for ubuntu-32!
+Info: * Sub-Job "testa(ubuntu-32)" has entered "WORKING" state.
+Info: * Sub-Job "testa(ubuntu-32)" has entered "FINISHED" state.
+Info: * Sub-Job "testb(ubuntu-32)" has entered "WORKING" state.
+Info: * Sub-Job "testb(ubuntu-32)" has entered "FINISHED" state.
+Info: Uploading ...
+Info: Upload succeeded. Sync local pkg-server again...
+Info: Snapshot:
+Info: Job is completed
../build-svr add-prj -n testserver3 -N teste -P bin
../build-svr add-prj -n testserver3 -N testa1 -g `pwd`/git01/a1 -b master
../pkg-svr register -n pkgsvr01 -d unstable -P bin/bin_0.0.0_ubuntu-32.zip
-../build-svr start -n testserver3 -p 2223 --CHILD
+ruby -d ../build-svr start -n testserver3 -p 2223 --CHILD
--- /dev/null
+#!/bin/sh
+rm -rf buildsvr02
+mkdir buildsvr02
+cd buildsvr02
+../../build-svr remove -n testserver4
+../../build-svr create -n testserver4 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://ftpuser:ftpuser@127.0.0.1
+cd ..
+../build-svr start -n testserver4 -p 2224
--- /dev/null
+#!/bin/sh
+rm -rf buildsvr01
+rm -rf ~/.build_tools/build_server/testserver3
+mkdir buildsvr01
+cd buildsvr01
+../../build-svr create -n testserver3 -t ftp://ftpuser:ftpuser@127.0.0.1
+../../build-svr add-os -n testserver3 -o ubuntu-32
--- /dev/null
+#!/bin/sh
+rm -rf buildsvr01
+rm -rf ~/.build_tools/build_server/testserver3
+mkdir buildsvr01
+../build-svr remove -n testserver3
+cd buildsvr01
+../../build-svr create -n testserver3 -t ftp://ftpuser:ftpuser@127.0.0.1
+cd ..
+cd git01
+rm -rf a
+rm -rf b
+tar xf a_v1.tar.gz
+tar xf b_v1.tar.gz
+cd ..
+../build-svr add-dist -n testserver3 -D unstable -u `pwd`/pkgsvr01/unstable -d 127.0.0.1:3333
+../build-svr add-dist -n testserver3 -D unstable2 -u `pwd`/pkgsvr01/unstable2 -d 127.0.0.1:3333
+../build-svr add-os -n testserver3 -o ubuntu-32
+../build-svr add-prj -n testserver3 -N testa -g `pwd`/git01/a -b master
+../build-svr add-prj -n testserver3 -N testb -g `pwd`/git01/b -b master
+../build-svr add-prj -n testserver3 -N testa -D unstable2 -g `pwd`/git01/a -b master
+../build-svr add-prj -n testserver3 -N testb -D unstable2 -g `pwd`/git01/b -b master
+../build-svr add-prj -n testserver3 -N testbin -D unstable -P bin
+../build-svr add-prj -n testserver3 -N testbin -D unstable2 -P bin
+ruby -d ../build-svr start -n testserver3 -p 2223 --CHILD
--- /dev/null
+#!/bin/sh
+rm -rf ~/.build_tools/pkg_server/pkgsvr01
+rm -rf `pwd`/pkgsvr01
+ruby -d ../pkg-svr create -n pkgsvr01 -d unstable
+ruby -d ../pkg-svr add-dist -n pkgsvr01 -d unstable2
+ruby -d ../pkg-svr add-os -n pkgsvr01 -d unstable -o ubuntu-32
+ruby -d ../pkg-svr add-os -n pkgsvr01 -d unstable -o windows-32
+ruby -d ../pkg-svr add-os -n pkgsvr01 -d unstable2 -o ubuntu-32
+ruby -d ../pkg-svr add-os -n pkgsvr01 -d unstable2 -o windows-32
+ruby -d ../pkg-svr start -n pkgsvr01 -p 3333
i = 0
@expected_results.each do |e|
found = false
+ if results[i].nil? then
+ return false
+ end
if not results[i].include? e then
return false
end