From: donghee yang Date: Thu, 4 Apr 2013 01:20:01 +0000 (+0900) Subject: [Title] Added "--save" option to save result packages to local X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=bcb51b13f7f086476cbf3b50643350627dfcf7f0;p=sdk%2Ftools%2Fsdk-build.git [Title] Added "--save" option to save result packages to local --- diff --git a/build-cli b/build-cli index afd11ac..b166552 100755 --- a/build-cli +++ b/build-cli @@ -199,6 +199,11 @@ begin options[:rebuild] = (option[:rebuild] == "YES") ? true : false options[:async] = (option[:async] == "YES") ? true : false options[:monitor_level] = Log::LV_USER + options[:save] = option[:save] + if options[:save] then + options[:dock] = Utils.create_uniq_name() + options[:src_path] = Utils::WORKING_DIR + end result = builder.build(options) if not result then exit(-1) end diff --git a/src/build_server/BuildClientOptionParser.rb b/src/build_server/BuildClientOptionParser.rb index a2b9a71..01c4d5d 100644 --- a/src/build_server/BuildClientOptionParser.rb +++ b/src/build_server/BuildClientOptionParser.rb @@ -31,7 +31,7 @@ require 'optparse' require 'utils' class BuildClientUsage - BUILD="build-cli build -N -d [-o ] [-w ] [--async] [-D ] [-U user-email]" + BUILD="build-cli build -N -d [-o ] [-w ] [--async] [-D ] [-U user-email] [--save]" QUERY="build-cli query -d " QUERY_SYSTEM="build-cli query-system -d " QUERY_PROJECT="build-cli query-project -d " @@ -165,6 +165,11 @@ def option_parse options[:rebuild] = "YES" end + options[:save] = false + opts.on( '--save', 'save the files built from remote server' ) do + options[:save] = true + end + opts.on( '-j', '--job ', 'job number' ) do|job| options[:job] = job end @@ -196,11 +201,6 @@ def option_parse options[:output] = path end - options[:verbose] = "NO" - opts.on( '-V', '--verbose', 'verbose mode' ) do - options[:verbose] = "YES" - end - opts.on( '-h', '--help', 'display help' ) do opts.help.split("\n").each {|op| puts op if not op.include? "--noreverse" and not op.include? "--rebuild"} exit diff --git a/src/build_server/BuildJob.rb b/src/build_server/BuildJob.rb index 18c9654..f20c231 100644 --- a/src/build_server/BuildJob.rb +++ b/src/build_server/BuildJob.rb @@ -97,6 +97,7 @@ class BuildJob < CommonJob # "send_result_back" mean that server will send package file by network @send_result_back = false @dock_num = "0" + @result_files = [] @external_pkgs = [] @force_rebuild = false @@ -155,11 +156,25 @@ class BuildJob < CommonJob def set_transfered_job( dock_num ) @is_verified = true + set_send_result_back( dock_num ) + end + + + def set_send_result_back( dock_num ) @send_result_back = true @dock_num = dock_num end + def is_send_result_back? + return @send_result_back + end + + + def get_result_files() + return @result_files + end + # set force rebuild # This make project to build # even though there is a package of same version on pkg-server @@ -506,8 +521,8 @@ class BuildJob < CommonJob # upload if not @is_rev_build_check_job and not @send_result_back and - @parent.nil? and - not upload() then + @parent.nil? and not upload() then + @status = "ERROR" return false end @@ -812,6 +827,7 @@ class BuildJob < CommonJob binpkg_path_list = Dir.glob("#{@source_path}/*_*_#{@os}.zip") binpkg_path_list.each do |file| + @result_files.push File.basename(file) @log.info( " * #{file}", Log::LV_USER) FileUtils.ln(file,"#{dst_path}/", :force => true) end diff --git a/src/build_server/BuildServer.rb b/src/build_server/BuildServer.rb index ef1e1e3..c3c56eb 100644 --- a/src/build_server/BuildServer.rb +++ b/src/build_server/BuildServer.rb @@ -831,6 +831,11 @@ class BuildServer end end end + if not job.nil? and job.status == "FINISHED" and job.is_send_result_back? then + job.get_result_files().each do |file| + BuildCommServer.send(conn, "=JOB_FILE,#{file}") + end + end rescue => e @log.error e.message @log.error e.backtrace.inspect diff --git a/src/build_server/MultiBuildJob.rb b/src/build_server/MultiBuildJob.rb index 7aff6ec..1669fce 100644 --- a/src/build_server/MultiBuildJob.rb +++ b/src/build_server/MultiBuildJob.rb @@ -56,6 +56,11 @@ class MultiBuildJob < CommonJob @pkgsvr_ip = nil @pkgsvr_port = nil @pkgsvr_password = nil + + # "send_result_back" mean that server will send package file by network + @send_result_back = false + @dock_num = "0" + @result_files = [] end @@ -88,6 +93,23 @@ class MultiBuildJob < CommonJob end end + + def set_send_result_back( dock_num ) + @send_result_back = true + @dock_num = dock_num + end + + + def is_send_result_back? + return @send_result_back + end + + + def get_result_files() + return @result_files + end + + # def init @job_root = "#{@server.path}/jobs/#{@id}" @@ -408,11 +430,18 @@ class MultiBuildJob < CommonJob lock_event # upload - if not upload() then + if not @send_result_back and not upload() then @status = "ERROR" return end + # copy result files to transport path + if @send_result_back then + puts "=========> 1" + copy_result_files_to_master() + puts "=========> 2" + end + # INFO. don't change this string @log.info( "Job is completed!", Log::LV_USER) @status = "FINISHED" @@ -457,4 +486,38 @@ class MultiBuildJob < CommonJob end end + + # copy binary package files and log file to transport dir + private + def copy_result_files_to_master() + outgoing_dir = "#{@server.transport_path}/#{@dock_num}" + if not File.exist? outgoing_dir then + FileUtils.mkdir_p outgoing_dir + end + + @log.info( "Copying log to #{outgoing_dir}", Log::LV_USER) + file = "#{@source_path}/../log" + FileUtils.ln(file, "#{outgoing_dir}/remote_log",:force => true) + + # copy result files, if not reverse build + return copy_result_files( outgoing_dir ) + end + + + private + def copy_result_files(dst_path) + @log.info( "Copying result files to #{dst_path}", Log::LV_USER) + + # get package path list + binpkg_path_list = Dir.glob("#{@source_path}/*_*_*.zip") + + binpkg_path_list.each do |file| + @result_files.push File.basename(file) + @log.info( " * #{file}", Log::LV_USER) + FileUtils.ln(file,"#{dst_path}/", :force => true) + end + + return true + end + end diff --git a/src/build_server/RemoteBuilder.rb b/src/build_server/RemoteBuilder.rb index bb960cb..9dfaf35 100644 --- a/src/build_server/RemoteBuilder.rb +++ b/src/build_server/RemoteBuilder.rb @@ -79,7 +79,7 @@ class RemoteBuilder options[:user] = "admin@user" options[:is_rev_build] = @job.is_rev_build_check_job() options[:dock] = Utils.create_uniq_name() - options[:save_local] = @job.is_rev_build_check_job() ? false : true + options[:save] = @job.is_rev_build_check_job() ? false : true ret = build( options ) # reset job @@ -147,7 +147,7 @@ class RemoteBuilder end # receive binary package if not reverse build - if options[:save_local] then + if options[:save] then result_files.each do |file_name| @log.info( "Receiving file from remote server : #{file_name}", Log::LV_USER ) result = receive_file_from_remote( "#{options[:src_path]}/#{file_name}", options[:dock] ) @@ -177,7 +177,7 @@ class RemoteBuilder options[:user] = "admin@user" options[:is_rev_build] = false options[:rebuild] = false - options[:save_local] = false + options[:save] = false options[:async] = false options[:monitor_level] = Log::LV_NORMAL @@ -249,14 +249,14 @@ class RemoteBuilder # format: BUILD|GIT|project_list|passwd| # os|async| # no_reverse|dist_name| - # user_email| - # rebuild + # user_email|rebuild + # internal|rev-build|commit|pkgs|dock_num msg = "BUILD|GIT|#{options[:projects]}|#{options[:passwd]}|"+ "#{options[:os]}|"+ "#{options[:async] ? "YES" : "NO"}|"+ "#{options[:no_reverse] ? "YES" : "NO"}|#{options[:dist]}|"+ - "#{options[:user]}|"+ - "#{options[:rebuild] ? "YES" : "NO"}" + "#{options[:user]}|#{options[:rebuild] ? "YES" : "NO"}|"+ + "NO||||#{options[:dock].nil? ? "" : options[:dock]}" end if not client.send( msg ) then @@ -314,16 +314,14 @@ class RemoteBuilder if line.nil? then next end - + if line.strip.start_with?("=JOB_FILE") then + result_files.push( line.strip.split(",")[1] ) + end + category, level, contents = JobLog.parse_log(line) if level < min_level then next end if category == "INFO" then @log.info( contents, level ) - # gather result files if not reverse build - if line =~ /Creating package file \.\.\. (.*)/ then - file_name = $1 - result_files.push file_name - end elsif category == "WARN" then @log.warn( contents, level ) elsif category == "ERROR" then diff --git a/src/build_server/SocketJobRequestListener.rb b/src/build_server/SocketJobRequestListener.rb index 80ce940..f1fe5fe 100644 --- a/src/build_server/SocketJobRequestListener.rb +++ b/src/build_server/SocketJobRequestListener.rb @@ -311,6 +311,11 @@ class SocketJobRequestListener # set force rebuild if needed if rebuild then new_job.set_force_rebuild(true) end + # set send result back + if dock_num != "0" and not is_internal then + new_job.set_send_result_back( dock_num ) + end + @parent_server.jobmgr.commit_job(new_job) # create logger and disconnect client @@ -1075,7 +1080,6 @@ class SocketJobRequestListener new_job = prj.create_new_job(os) new_job.set_transfered_job( dock_num ) new_job.git_commit = git_commit - incoming_dir = "#{@parent_server.transport_path}/#{dock_num}" pkg_files.each do |file| new_job.add_external_package( file ) end diff --git a/src/common/BuildComm.rb b/src/common/BuildComm.rb index 8e4fe0e..13940d4 100644 --- a/src/common/BuildComm.rb +++ b/src/common/BuildComm.rb @@ -1,6 +1,3 @@ -require "socket" -require "timeout" - =begin BuildComm.rb @@ -31,6 +28,7 @@ Contributors: $LOAD_PATH.unshift File.dirname(__FILE__) require "log" +require "socket" require 'timeout' require "net/ftp" require 'thread' diff --git a/test/build-server.basic1/build-cli-01.testcase b/test/build-server.basic1/build-cli-01.testcase index 4cb527e..da10500 100644 --- a/test/build-server.basic1/build-cli-01.testcase +++ b/test/build-server.basic1/build-cli-01.testcase @@ -8,17 +8,17 @@ Requiest service to build-server command-line tool. Usage: build-cli [OPTS] or build-cli (-h|-v) Subcommands: - build Build and create package. - query Query information about build-server. - query-system Query system information about build-server. - query-project Query project information about build-server. - query-job Query job information about build-server. - query-log Query log contents about job in build-server. - cancel Cancel a building project. - register Register the package to the build-server. +build Build and create package. +query Query information about build-server. +query-system Query system information about build-server. +query-project Query project information about build-server. +query-job Query job information about build-server. +query-log Query log contents about job in build-server. +cancel Cancel a building project. +register Register the package to the build-server. Subcommand usage: -build-cli build -N -d [-o ] [-w ] [--async] [-D ] [-U user-email] +build-cli build -N -d [-o ] [-w ] [--async] [-D ] [-U user-email] [--save] build-cli query -d build-cli query-system -d build-cli query-project -d @@ -32,6 +32,7 @@ Options: -d, --address build server address: 127.0.0.1:2224 -o, --os target operating system: ubuntu-32/ubuntu-64/windows-32/windows-64/macos-64 --async asynchronous job +--save save the files built from remote server -j, --job job number -w, --passwd password for managing project -P, --pkg package file path @@ -39,6 +40,5 @@ Options: -t, --ftp ftp server url: ftp://dibsftp:dibsftp@127.0.0.1 -U, --user user email infomation --output output file path --V, --verbose verbose mode -h, --help display help -v, --version display version diff --git a/test/build-server.basic1/build-cli-33.testcase b/test/build-server.basic1/build-cli-33.testcase new file mode 100644 index 0000000..5c56221 --- /dev/null +++ b/test/build-server.basic1/build-cli-33.testcase @@ -0,0 +1,37 @@ +#PRE-EXEC +echo "This case will test --save option" +#EXEC +../../build-cli build -N testa -d 127.0.0.1:2223 -o ubuntu-32 --save --rebuild +#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 ... +Info: Checking reverse build dependency ... +Info: * Will check reverse-build for projects: testb(ubuntu-32), testc(ubuntu-32) +Info: * Added new job for reverse-build ... testb(ubuntu-32) +Info: * Added new job for reverse-build ... testc(ubuntu-32) +Info: * Reverse-build OK ... +Info: * Reverse-build OK ... +Info: Copying log to +Info: Copying result files to +Info: * +Info: Job is completed! +Info: Job is FINISHED successfully! +Info: Updating the source info for project "testa" +Info: Receiving file from remote server : diff --git a/test/build-server.basic1/build-cli-34.testcase b/test/build-server.basic1/build-cli-34.testcase new file mode 100644 index 0000000..a105594 --- /dev/null +++ b/test/build-server.basic1/build-cli-34.testcase @@ -0,0 +1,23 @@ +#PRE-EXEC +echo "This case will test --save option for MULTI build job" +#EXEC +../../build-cli build -N testa,testb -d 127.0.0.1:2223 -o ubuntu-32 --save --rebuild +#POST-EXEC +#EXPECT +Info: Added new job +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 +Info: * Sub-Job +Info: * Sub-Job +Info: * Sub-Job +Info: Copying log to +Info: Copying result files to +Info: * +Info: * +Info: Job is completed! +Info: Receiving file from remote server : +Info: Receiving file from remote server : diff --git a/test/build-server.basic1/testsuite b/test/build-server.basic1/testsuite index 52ceaa4..a996301 100644 --- a/test/build-server.basic1/testsuite +++ b/test/build-server.basic1/testsuite @@ -30,3 +30,5 @@ build-cli-29.testcase build-cli-30.testcase build-cli-31.testcase build-cli-32.testcase +build-cli-33.testcase +build-cli-34.testcase