From: donghee yang Date: Fri, 5 Oct 2012 07:49:50 +0000 (+0900) Subject: [Title] Added commands for multi-distribution X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2a572227a1a73e1ea3af43cec0795037c841a8b8;p=sdk%2Ftools%2Fsdk-build.git [Title] Added commands for multi-distribution --- diff --git a/build-cli b/build-cli index 8207598..1146087 100755 --- a/build-cli +++ b/build-cli @@ -157,7 +157,7 @@ begin 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 @@ -174,7 +174,7 @@ begin 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 @@ -304,7 +304,7 @@ begin 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 diff --git a/build-svr b/build-svr index 02727ce..a3ee021 100755 --- a/build-svr +++ b/build-svr @@ -50,21 +50,9 @@ if not Utils.check_host_OS() then 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 " :" - 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]})" @@ -72,19 +60,35 @@ begin puts " ftp://:@
:" 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 " :" + 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) @@ -117,36 +121,74 @@ begin 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 " :" - 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 " :" + 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 " :" + 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 diff --git a/src/build_server/BinaryUploadProject.rb b/src/build_server/BinaryUploadProject.rb index 7242b6c..49f7eb8 100644 --- a/src/build_server/BinaryUploadProject.rb +++ b/src/build_server/BinaryUploadProject.rb @@ -39,8 +39,8 @@ class BinaryUploadProject < CommonProject 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 @@ -70,7 +70,7 @@ class BinaryUploadProject < CommonProject 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) @@ -111,7 +111,7 @@ class BinaryUploadProject < CommonProject 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 @@ -127,7 +127,7 @@ class BinaryUploadProject < CommonProject 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}" @@ -137,7 +137,7 @@ class BinaryUploadProject < CommonProject 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| diff --git a/src/build_server/BuildClientOptionParser.rb b/src/build_server/BuildClientOptionParser.rb index 8cc9e60..1943390 100644 --- a/src/build_server/BuildClientOptionParser.rb +++ b/src/build_server/BuildClientOptionParser.rb @@ -30,51 +30,63 @@ $LOAD_PATH.unshift File.dirname(__FILE__)+"/src/common" require 'optparse' require 'utils' +class BuildClientUsage + BUILD="build-cli build -N -d [-o ] [-w ] [--async] [-D ]" + RESOLVE="build-cli resolve -N -d [-o ] [-w ] [--async] [-D ]" + QUERY="build-cli query -d " + QUERY_SYSTEM="build-cli query-system -d " + QUERY_PROJECT="build-cli query-project -d " + QUERY_JOB="build-cli query-job -d " + CANCEL="build-cli cancel -j -d [-w ]" + REGISTER="build-cli register -P -d -t [-w ] [-D ]" +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 -d [-o ] [-w ] [--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 -d [-o ] [-w ] [--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 " + 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 " + 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 " + 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 " + 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 -d [-w ]" + 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 -d -t [-w ]" + raise ArgumentError, "Usage: " + BuildClientUsage::REGISTER end else @@ -100,14 +112,14 @@ def option_parse + "\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 -d [-o ] [-w ] [--async]" + "\n" \ - + "\t" + "build-cli resolve -N -d [-o ] [-w ] [--async]" + "\n" \ - + "\t" + "build-cli query -d " + "\n" \ - + "\t" + "build-cli query-system -d " + "\n" \ - + "\t" + "build-cli query-project -d " + "\n" \ - + "\t" + "build-cli query-job -d " + "\n" \ - + "\t" + "build-cli cancel -j -d [-w ] " + "\n" \ - + "\t" + "build-cli register -P -d -t [-w ] " + "\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| @@ -160,6 +172,10 @@ def option_parse options[:package] = package.strip end + opts.on( '-D', '--dist ', 'distribution name' ) do|dist| + options[:dist] = dist + end + opts.on( '-t', '--ftp ', 'ftp server url: ftp://dibsftp:dibsftp@127.0.0.1' ) do|domain| options[:fdomain] = domain end diff --git a/src/build_server/BuildServer.rb b/src/build_server/BuildServer.rb index 732afd3..7d6dead 100644 --- a/src/build_server/BuildServer.rb +++ b/src/build_server/BuildServer.rb @@ -229,24 +229,51 @@ class BuildServer 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 ) @@ -265,6 +292,17 @@ class BuildServer 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 = [] @@ -405,7 +443,7 @@ class BuildServer 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 } @@ -452,7 +490,7 @@ class BuildServer 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 diff --git a/src/build_server/BuildServerController.rb b/src/build_server/BuildServerController.rb index 3043944..b7ac551 100644 --- a/src/build_server/BuildServerController.rb +++ b/src/build_server/BuildServerController.rb @@ -254,7 +254,7 @@ class BuildServerController # add friend server - def self.add_friend_server( id, ip, port ) + def self.add_remote_server( id, ip, port ) server = get_server(id) # add @@ -270,17 +270,18 @@ class BuildServerController 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 @@ -309,41 +310,147 @@ class BuildServerController 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 @@ -355,7 +462,7 @@ class BuildServerController # 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) @@ -365,11 +472,27 @@ class BuildServerController 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 @@ -380,11 +503,36 @@ class BuildServerController 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!" @@ -393,16 +541,20 @@ class BuildServerController # 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 @@ -418,24 +570,29 @@ class BuildServerController 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| @@ -459,7 +616,45 @@ class BuildServerController 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 diff --git a/src/build_server/BuildServerOptionParser.rb b/src/build_server/BuildServerOptionParser.rb index 4c1ba9a..b9bb76c 100644 --- a/src/build_server/BuildServerOptionParser.rb +++ b/src/build_server/BuildServerOptionParser.rb @@ -30,66 +30,133 @@ $LOAD_PATH.unshift File.dirname(__FILE__)+"/src/common" require 'optparse' require 'utils' +class BuildServerUsage + CREATE="build-svr create -n -t [-u -d ]" + REMOVE="build-svr remove -n " + START="build-svr start -n -p " + STOP="build-svr stop -n " + UPGRADE="build-svr upgrade -n " + ADD_SVR="build-svr add-svr -n -d " + REMOVE_SVR= "build-svr remove-svr -n -d " + ADD_OS= "build-svr add-os -n -o " + REMOVE_OS="build-svr remove-os -n -o " + ADD_DIST= "build-svr add-dist -n -D -u -d " + REMOVE_DIST="build-svr remove-dist -n -D " + ADD_SYNC="build-svr add-sync -n -u [--dist ]" + REMOVE_SYNC="build-svr remove-sync -n -u [--dist ]" + ADD_PRJ="build-svr add-prj -n -N (-g -b |-P ) [-w ] [-o ] [--dist ]" + REMOVE_PRJ="build-svr remove-prj -n -N [--dist ]" + FULLBUILD="build-svr fullbuild -n [--dist ]" + REGISTER="build-svr register -n -P [--dist ]" + QUERY="build-svr query -n " +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 -u -d -t " + raise ArgumentError, "Usage: " + BuildServerUsage::CREATE end when "remove" if options[:name].nil? or options[:name].empty? then - raise ArgumentError, "Usage: build-svr remove -n " + 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 -p " + raise ArgumentError, "Usage: " + BuildServerUsage::START end when "stop" if options[:name].nil? or options[:name].empty? then - raise ArgumentError, "Usage: build-svr stop -n " + raise ArgumentError, "Usage: " + BuildServerUsage::STOP end when "upgrade" if options[:name].nil? or options[:name].empty? then - raise ArgumentError, "Usage: build-svr upgrade -n " + 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 (-d |-u ) [--proxy ]" + (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 -N (-g -b |-P ) [-w ] [-o ]" + 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 -o " + 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 " + 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 -P " + 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]}" @@ -107,20 +174,37 @@ def option_parse + "\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 -u -d -t " + "\n" \ - + "\t" + "build-svr remove -n " + "\n" \ - + "\t" + "build-svr start -n -p " + "\n" \ - + "\t" + "build-svr stop -n " + "\n" \ - + "\t" + "build-svr upgrade -n " + "\n" \ - + "\t" + "build-svr add-svr -n (-d |-u ) [--proxy ]" + "\n" \ - + "\t" + "build-svr add-prj -n -N (-g -b |-P ) [-w ] [-o ]" + "\n" \ - + "\t" + "build-svr add-os -n -o " + "\n" \ - + "\t" + "build-svr register -n -P " + "\n" \ - + "\t" + "build-svr fullbuild -n " + "\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| @@ -178,6 +262,11 @@ def option_parse #opts.on( '-r', '--remote ', 'remote server id' ) do|remote| # options[:remote] = remote #end + options[:dist] = "" + opts.on( '-D', '--dist ', 'distribution name' ) do |dist| + options[:dist] = dist + end + options[:passwd] = "" opts.on( '-w', '--passwd ', 'password for managing project' ) do|passwd| @@ -207,9 +296,14 @@ def option_parse 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 diff --git a/src/build_server/CommonProject.rb b/src/build_server/CommonProject.rb index d1a0b97..37716b5 100644 --- a/src/build_server/CommonProject.rb +++ b/src/build_server/CommonProject.rb @@ -31,21 +31,32 @@ $LOAD_PATH.unshift File.dirname(__FILE__) $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?() @@ -66,7 +77,7 @@ class CommonProject 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}" @@ -77,7 +88,7 @@ class CommonProject # 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(":")) diff --git a/src/build_server/DistributionManager.rb b/src/build_server/DistributionManager.rb index b140a93..0c7b7ed 100644 --- a/src/build_server/DistributionManager.rb +++ b/src/build_server/DistributionManager.rb @@ -49,8 +49,7 @@ end 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 ) @@ -59,6 +58,16 @@ class DistributionManager 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| @@ -83,25 +92,27 @@ class DistributionManager 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 @@ -165,5 +176,10 @@ class DistributionManager @distributions.delete get_distribution(name) end + + def get_all_distributions() + return @distributions + end + #END end diff --git a/src/build_server/GitBuildJob.rb b/src/build_server/GitBuildJob.rb index 0f32039..d2ef094 100644 --- a/src/build_server/GitBuildJob.rb +++ b/src/build_server/GitBuildJob.rb @@ -217,8 +217,8 @@ class GitBuildJob < BuildJob 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 diff --git a/src/build_server/GitBuildProject.rb b/src/build_server/GitBuildProject.rb index 4181c7d..67a1bbc 100644 --- a/src/build_server/GitBuildProject.rb +++ b/src/build_server/GitBuildProject.rb @@ -41,8 +41,8 @@ class GitBuildProject < CommonProject 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 = {} @@ -107,7 +107,7 @@ class GitBuildProject < CommonProject @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}" @@ -143,7 +143,7 @@ class GitBuildProject < CommonProject # 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 @@ -178,7 +178,7 @@ class GitBuildProject < CommonProject 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}" @@ -189,7 +189,7 @@ class GitBuildProject < CommonProject 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| @@ -210,7 +210,7 @@ class GitBuildProject < CommonProject @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| @@ -223,7 +223,7 @@ class GitBuildProject < CommonProject 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 diff --git a/src/build_server/JobManager.rb b/src/build_server/JobManager.rb index e876dc1..cd5ee6a 100644 --- a/src/build_server/JobManager.rb +++ b/src/build_server/JobManager.rb @@ -91,8 +91,8 @@ class JobManager 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 diff --git a/src/build_server/ProjectManager.rb b/src/build_server/ProjectManager.rb index 0e444f1..338a8ea 100644 --- a/src/build_server/ProjectManager.rb +++ b/src/build_server/ProjectManager.rb @@ -59,33 +59,32 @@ class ProjectManager # 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() @@ -94,23 +93,22 @@ class ProjectManager 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() @@ -118,14 +116,29 @@ class ProjectManager 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 ) @@ -145,18 +158,19 @@ class ProjectManager # 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 @@ -194,8 +208,10 @@ class ProjectManager 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 @@ -207,8 +223,10 @@ class ProjectManager # 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 @@ -218,15 +236,15 @@ class ProjectManager 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 @@ -259,7 +277,7 @@ class ProjectManager @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| @@ -310,9 +328,9 @@ class ProjectManager 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) @@ -334,92 +352,6 @@ class ProjectManager 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 ) diff --git a/src/build_server/RegisterPackageJob.rb b/src/build_server/RegisterPackageJob.rb index ebfc7a0..e2cd048 100644 --- a/src/build_server/RegisterPackageJob.rb +++ b/src/build_server/RegisterPackageJob.rb @@ -50,15 +50,21 @@ class RegisterPackageJob < CommonJob # 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" diff --git a/src/build_server/RemoteBuilder.rb b/src/build_server/RemoteBuilder.rb index 5f00496..7a945bd 100644 --- a/src/build_server/RemoteBuilder.rb +++ b/src/build_server/RemoteBuilder.rb @@ -61,7 +61,7 @@ class RemoteBuilder # 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 @@ -73,7 +73,7 @@ class RemoteBuilder # 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 @@ -98,7 +98,7 @@ class RemoteBuilder # 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 @@ -155,7 +155,7 @@ class RemoteBuilder # 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 ) @@ -168,13 +168,13 @@ class RemoteBuilder 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 diff --git a/src/build_server/SocketJobRequestListener.rb b/src/build_server/SocketJobRequestListener.rb index a1fa955..012770a 100644 --- a/src/build_server/SocketJobRequestListener.rb +++ b/src/build_server/SocketJobRequestListener.rb @@ -174,8 +174,8 @@ class SocketJobRequestListener 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(",") @@ -189,6 +189,14 @@ class SocketJobRequestListener 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 @@ -205,9 +213,9 @@ class SocketJobRequestListener 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 @@ -231,7 +239,7 @@ class SocketJobRequestListener 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 @@ -239,8 +247,8 @@ class SocketJobRequestListener 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!" @@ -276,9 +284,9 @@ class SocketJobRequestListener 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 @@ -314,9 +322,13 @@ class SocketJobRequestListener 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 @@ -334,7 +346,7 @@ class SocketJobRequestListener 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 @@ -585,6 +597,10 @@ class SocketJobRequestListener 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 @@ -592,18 +608,25 @@ class SocketJobRequestListener 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 @@ -618,11 +641,15 @@ class SocketJobRequestListener 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 @@ -630,15 +657,19 @@ class SocketJobRequestListener # 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 @@ -650,7 +681,7 @@ class SocketJobRequestListener # 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 @@ -729,8 +760,8 @@ class SocketJobRequestListener 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!" @@ -743,12 +774,12 @@ class SocketJobRequestListener 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!" @@ -836,19 +867,19 @@ class SocketJobRequestListener 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 @@ -858,10 +889,10 @@ class SocketJobRequestListener 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 ) diff --git a/test/build-cli-01.testcase b/test/build-cli-01.testcase index f3c8c50..670207d 100644 --- a/test/build-cli-01.testcase +++ b/test/build-cli-01.testcase @@ -18,14 +18,14 @@ cancel Cancel a building project. register Register the package to the build-server. Subcommand usage: -build-cli build -N -d [-o ] [-w ] [--async] -build-cli resolve -N -d [-o ] [-w ] [--async] +build-cli build -N -d [-o ] [-w ] [--async] [-D ] +build-cli resolve -N -d [-o ] [-w ] [--async] [-D ] build-cli query -d build-cli query-system -d build-cli query-project -d build-cli query-job -d build-cli cancel -j -d [-w ] -build-cli register -P -d -t [-w ] +build-cli register -P -d -t [-w ] [-D ] Options: -N, --project project name @@ -35,6 +35,7 @@ Options: -j, --job job number -w, --passwd password for managing project -P, --pkg package file path +-D, --dist distribution name -t, --ftp ftp server url: ftp://dibsftp:dibsftp@127.0.0.1 -h, --help display help -v, --version display version diff --git a/test/build-svr-01.testcase b/test/build-svr-01.testcase index e345367..30ba63f 100644 --- a/test/build-svr-01.testcase +++ b/test/build-svr-01.testcase @@ -3,7 +3,7 @@ rm -rf ~/.build_tools/build_server/testserver3 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 diff --git a/test/build-svr-02.testcase b/test/build-svr-02.testcase index cbedb98..7f31176 100644 --- a/test/build-svr-02.testcase +++ b/test/build-svr-02.testcase @@ -5,41 +5,44 @@ #EXPECT Build-server administer service command-line tool. -Usage: build-svr [OPTS] or build-svr -h +Usage: build-svr [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 -u -d -t - build-svr remove -n - build-svr start -n -p - build-svr stop -n - build-svr add-svr -n -d - build-svr add-prj -n -N [-g ] [-b ] [-P ] [-w ] [-o ] - build-svr add-os -n -o - build-svr register -n -P - build-svr fullbuild -n - -Options: - -n, --name build server name - -u, --url package server url: http://127.0.0.1/dibs/unstable - -d, --address server address: 127.0.0.1:2224 - -p, --port server port number: 2224 - -P, --pkg package file path or name - -o, --os ex) linux,windows - -N, --pname project name - -g, --git git repository - -b, --branch git branch - -w, --passwd password for managing project - -t, --ftp ftp server url: ftp://dibsftp:dibsftp@127.0.0.1:1024 - -h, --help display this information - -v, --version display version - +build-svr create -n -t [-u -d ] +build-svr remove -n +build-svr start -n -p +build-svr stop -n +build-svr upgrade -n +build-svr add-svr -n -d +build-svr remove-svr -n -d +build-svr add-os -n -o +build-svr remove-os -n -o +build-svr add-dist -n -D -u -d +build-svr remove-dist -n -D +build-svr add-sync -n -u [--dist ] +build-svr remove-sync -n -u [--dist ] +build-svr add-prj -n -N (-g -b |-P ) [-w ] [-o ] [--dist ] +build-svr remove-prj -n -N [--dist ] +build-svr fullbuild -n [--dist ] +build-svr register -n -P [--dist ] +build-svr query -n diff --git a/test/build-svr-03.testcase b/test/build-svr-03.testcase index 6038be5..d2faee1 100644 --- a/test/build-svr-03.testcase +++ b/test/build-svr-03.testcase @@ -4,10 +4,20 @@ 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 #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) * diff --git a/test/build-svr-04.testcase b/test/build-svr-04.testcase index 5a7d65e..34f11d8 100644 --- a/test/build-svr-04.testcase +++ b/test/build-svr-04.testcase @@ -10,4 +10,3 @@ echo "TEST_TIME=3" >> ~/.build_tools/build_server/testserver3/server.cfg ../build-svr remove -n testserver3 rm -rf buildsvr01 #EXPECT -Test time is elapsed! diff --git a/test/build-svr-13.testcase b/test/build-svr-13.testcase index 110677a..d480c1d 100644 --- a/test/build-svr-13.testcase +++ b/test/build-svr-13.testcase @@ -4,8 +4,6 @@ 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 #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 diff --git a/test/build-svr-14.testcase b/test/build-svr-14.testcase index 0d920e9..ae0432f 100644 --- a/test/build-svr-14.testcase +++ b/test/build-svr-14.testcase @@ -4,7 +4,7 @@ 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 ../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 diff --git a/test/build-svr-17.testcase b/test/build-svr-17.testcase index 8f72321..f1e8dd0 100644 --- a/test/build-svr-17.testcase +++ b/test/build-svr-17.testcase @@ -4,10 +4,20 @@ 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 #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) * diff --git a/test/build-svr-20.testcase b/test/build-svr-20.testcase index 460e079..a0fa45d 100644 --- a/test/build-svr-20.testcase +++ b/test/build-svr-20.testcase @@ -1,7 +1,7 @@ #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 & diff --git a/test/build-svr2-01.testcase b/test/build-svr2-01.testcase new file mode 100644 index 0000000..21a375c --- /dev/null +++ b/test/build-svr2-01.testcase @@ -0,0 +1,18 @@ +#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) * diff --git a/test/build-svr2-02.testcase b/test/build-svr2-02.testcase new file mode 100644 index 0000000..ba2bdab --- /dev/null +++ b/test/build-svr2-02.testcase @@ -0,0 +1,7 @@ +#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! diff --git a/test/build-svr2-03.testcase b/test/build-svr2-03.testcase new file mode 100644 index 0000000..6337495 --- /dev/null +++ b/test/build-svr2-03.testcase @@ -0,0 +1,18 @@ +#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) * diff --git a/test/build-svr2-04.testcase b/test/build-svr2-04.testcase new file mode 100644 index 0000000..9fdf060 --- /dev/null +++ b/test/build-svr2-04.testcase @@ -0,0 +1,19 @@ +#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) * diff --git a/test/build-svr2-05.testcase b/test/build-svr2-05.testcase new file mode 100644 index 0000000..5a86502 --- /dev/null +++ b/test/build-svr2-05.testcase @@ -0,0 +1,6 @@ +#PRE-EXEC +#EXEC +../build-svr remove-dist -n testserver3 -D unstable22 +#POST-EXEC +#EXPECT +Distribution does not exist in list! diff --git a/test/build-svr2-06.testcase b/test/build-svr2-06.testcase new file mode 100644 index 0000000..5a9af60 --- /dev/null +++ b/test/build-svr2-06.testcase @@ -0,0 +1,66 @@ +#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! diff --git a/test/build-svr2-07.testcase b/test/build-svr2-07.testcase new file mode 100644 index 0000000..20d11d0 --- /dev/null +++ b/test/build-svr2-07.testcase @@ -0,0 +1,78 @@ +#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! diff --git a/test/build-svr2-08.testcase b/test/build-svr2-08.testcase new file mode 100644 index 0000000..beda518 --- /dev/null +++ b/test/build-svr2-08.testcase @@ -0,0 +1,21 @@ +#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! diff --git a/test/build-svr3-01.testcase b/test/build-svr3-01.testcase new file mode 100644 index 0000000..5180f36 --- /dev/null +++ b/test/build-svr3-01.testcase @@ -0,0 +1,14 @@ +#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! diff --git a/test/build-svr3-02.testcase b/test/build-svr3-02.testcase new file mode 100644 index 0000000..ecb15d4 --- /dev/null +++ b/test/build-svr3-02.testcase @@ -0,0 +1,56 @@ +#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" diff --git a/test/build-svr3-03.testcase b/test/build-svr3-03.testcase new file mode 100644 index 0000000..3c3d365 --- /dev/null +++ b/test/build-svr3-03.testcase @@ -0,0 +1,15 @@ +#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! diff --git a/test/build-svr3-04.testcase b/test/build-svr3-04.testcase new file mode 100644 index 0000000..d040f2d --- /dev/null +++ b/test/build-svr3-04.testcase @@ -0,0 +1,18 @@ +#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 diff --git a/test/buildsvr.init b/test/buildsvr.init index e307c19..e8964ab 100755 --- a/test/buildsvr.init +++ b/test/buildsvr.init @@ -29,4 +29,4 @@ cd .. ../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 diff --git a/test/buildsvr2.init b/test/buildsvr2.init new file mode 100755 index 0000000..8f19780 --- /dev/null +++ b/test/buildsvr2.init @@ -0,0 +1,8 @@ +#!/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 diff --git a/test/buildsvr3.init b/test/buildsvr3.init new file mode 100755 index 0000000..fc50c3a --- /dev/null +++ b/test/buildsvr3.init @@ -0,0 +1,7 @@ +#!/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 diff --git a/test/buildsvr4.init b/test/buildsvr4.init new file mode 100755 index 0000000..a3f7b2c --- /dev/null +++ b/test/buildsvr4.init @@ -0,0 +1,24 @@ +#!/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 diff --git a/test/pkgsvr4.init b/test/pkgsvr4.init new file mode 100755 index 0000000..fbb6e49 --- /dev/null +++ b/test/pkgsvr4.init @@ -0,0 +1,10 @@ +#!/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 diff --git a/test/regression.rb b/test/regression.rb index 177cf4d..11aa893 100755 --- a/test/regression.rb +++ b/test/regression.rb @@ -25,6 +25,9 @@ class TestCase 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