[Title] Added "--save" option to save result packages to local
authordonghee yang <donghee.yang@samsung.com>
Thu, 4 Apr 2013 01:20:01 +0000 (10:20 +0900)
committerdonghee yang <donghee.yang@samsung.com>
Thu, 4 Apr 2013 01:20:01 +0000 (10:20 +0900)
12 files changed:
build-cli
src/build_server/BuildClientOptionParser.rb
src/build_server/BuildJob.rb
src/build_server/BuildServer.rb
src/build_server/MultiBuildJob.rb
src/build_server/RemoteBuilder.rb
src/build_server/SocketJobRequestListener.rb
src/common/BuildComm.rb
test/build-server.basic1/build-cli-01.testcase
test/build-server.basic1/build-cli-33.testcase [new file with mode: 0644]
test/build-server.basic1/build-cli-34.testcase [new file with mode: 0644]
test/build-server.basic1/testsuite

index afd11ac04323921b22c5962ba473ebd7e7ee5193..b166552d30bd997f412dab12dcfc20f80629b677 100755 (executable)
--- 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
index a2b9a714015ac2632534662e85d03dea2a0e9d93..01c4d5d9d006ea25a1a6bd6ccbc8a019b4f6debd 100644 (file)
@@ -31,7 +31,7 @@ require 'optparse'
 require 'utils'
 
 class BuildClientUsage
-       BUILD="build-cli build -N <project name> -d <server address> [-o <os>] [-w <password>] [--async] [-D <distribution name>] [-U user-email]"
+       BUILD="build-cli build -N <project name> -d <server address> [-o <os>] [-w <password>] [--async] [-D <distribution name>] [-U user-email] [--save]"
        QUERY="build-cli query -d <server address>"
        QUERY_SYSTEM="build-cli query-system -d <server address>"
        QUERY_PROJECT="build-cli query-project -d <server address>"
@@ -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>', '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
index 18c96545153c44e48fe49b513f8ae0e0690605ff..f20c231735a2063d7768d379afac3d0c117fcac4 100644 (file)
@@ -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
index ef1e1e3f603847c361aaa03418906c04f67fe916..c3c56eb1a8ad80c9fddb091d6bcc3e49966988f0 100644 (file)
@@ -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
index 7aff6ec191e4c4044171ffc93851a4e8b0050ef3..1669fce2e95d39abce9f3c62b09aea03df4d19b3 100644 (file)
@@ -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
index bb960cb2508056a17b51c31b6d05f6b6c62d13d2..9dfaf358eea5f306aa2047276cbdd0c706a4f42b 100644 (file)
@@ -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
index 80ce94010f1e75a1190ed17debd959627907d567..f1fe5fec0940cd60223d3492a4fa36155abd44dc 100644 (file)
@@ -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
index 8e4fe0e1faa10bb8357e59eb5411ba6f24cf59d7..13940d4ab47bb16bc1155da0c8f7a05028eaf749 100644 (file)
@@ -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'
index 4cb527e5bf8d08433fff23cee37467d5bf6cda0a..da10500521435c298d4557f855321b80776f608c 100644 (file)
@@ -8,17 +8,17 @@ Requiest service to build-server command-line tool.
 Usage: build-cli <SUBCOMMAND> [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 <project name> -d <server address> [-o <os>] [-w <password>] [--async] [-D <distribution name>] [-U user-email]
+build-cli build -N <project name> -d <server address> [-o <os>] [-w <password>] [--async] [-D <distribution name>] [-U user-email] [--save]
 build-cli query -d <server address>
 build-cli query-system -d <server address>
 build-cli query-project -d <server address>
@@ -32,6 +32,7 @@ Options:
 -d, --address <server address>   build server address: 127.0.0.1:2224
 -o, --os <operating system>      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>           job number
 -w, --passwd <password>          password for managing project
 -P, --pkg <package file>         package file path
@@ -39,6 +40,5 @@ Options:
 -t, --ftp <ftp server url>       ftp server url: ftp://dibsftp:dibsftp@127.0.0.1
 -U, --user <user email>          user email infomation
 --output <output_path>       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 (file)
index 0000000..5c56221
--- /dev/null
@@ -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 (file)
index 0000000..a105594
--- /dev/null
@@ -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 :
index 52ceaa4d9dfd9b204d90815fbd0f9f772b34077c..a996301d5331dae210c285d85a8a7674e7799a7f 100644 (file)
@@ -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