20 |
20 |
21 my $sBOOTSTRAP_DIR="C:\\Apps\\FBF\\bootstrap"; |
21 my $sBOOTSTRAP_DIR="C:\\Apps\\FBF\\bootstrap"; |
22 my $sJOB_BASE_DIR="fbf_project"; |
22 my $sJOB_BASE_DIR="fbf_project"; |
23 my $nMAX_JOBDIR_AGE_SECONDS = 86400; # max number of seconds after which the letter is forcibly released |
23 my $nMAX_JOBDIR_AGE_SECONDS = 86400; # max number of seconds after which the letter is forcibly released |
24 my $nLOCK_FILE_MAX_ATTEMPTS = 5; |
24 my $nLOCK_FILE_MAX_ATTEMPTS = 5; |
25 my $sREMOTE_LOG_ARCHIVE="\\\\bishare\\SF_builds"; |
|
26 my $sNUMBERS_FILE="\\\\bishare\\SF_builds\\numbers2.txt"; |
25 my $sNUMBERS_FILE="\\\\bishare\\SF_builds\\numbers2.txt"; |
27 my $sLETTERS_FILE="letters.txt"; |
26 my $sLETTERS_FILE="letters.txt"; |
28 my $nMAX_LETTER_AGE_SECONDS = 86400; # max number of seconds after which the letter is forcibly released |
27 my $nMAX_LETTER_AGE_SECONDS = 86400; # max number of seconds after which the letter is forcibly released |
29 |
28 |
30 my $sFbfProjectRepo = "\\\\bishare\\mercurial_development\\oss\\FCL\\interim\\fbf\\projects\\packages"; |
29 my $sFbfProjectRepo = "\\\\bishare\\mercurial_development\\oss\\FCL\\interim\\fbf\\projects\\packages"; |
177 my $sProjectArg = "-Dsf.project.repo=$sFbfProjectRepo"; |
176 my $sProjectArg = "-Dsf.project.repo=$sFbfProjectRepo"; |
178 $sProjectArg .= " -Dsf.project.rev=$sFbfProjectRev" if ($sFbfProjectRev); |
177 $sProjectArg .= " -Dsf.project.rev=$sFbfProjectRev" if ($sFbfProjectRev); |
179 $sProjectArg = "-Dsf.project.dir=$sFbfProjectDir" if ($sFbfProjectDir); |
178 $sProjectArg = "-Dsf.project.dir=$sFbfProjectDir" if ($sFbfProjectDir); |
180 my $sBootstrapCmd = "hlm -f bootstrap.xml $sConfigArg $sProjectArg -Dsf.target.dir=$sJobDir"; |
179 my $sBootstrapCmd = "hlm -f bootstrap.xml $sConfigArg $sProjectArg -Dsf.target.dir=$sJobDir"; |
181 print("$sBootstrapCmd\n"); |
180 print("$sBootstrapCmd\n"); |
182 open(LOG, ">console_bootstrap_$$.txt"); |
181 system($sBootstrapCmd); |
183 open(PIPE, "$sBootstrapCmd 2>&1 |"); |
|
184 while(<PIPE>) |
|
185 { |
|
186 print LOG $_; |
|
187 print $_; |
|
188 } |
|
189 close(PIPE); |
|
190 close(LOG); |
|
191 |
182 |
192 # check that $sNUMBERS_FILE exists, otherwise create it |
183 # check that $sNUMBERS_FILE exists, otherwise create it |
193 if (!-f $sNUMBERS_FILE) |
184 if (!-f $sNUMBERS_FILE) |
194 { |
185 { |
195 open FILE, ">$sNUMBERS_FILE"; |
186 open FILE, ">$sNUMBERS_FILE"; |
248 print("cd $sJobDir\\sf-config\n"); |
239 print("cd $sJobDir\\sf-config\n"); |
249 chdir("$sJobDir\\sf-config"); |
240 chdir("$sJobDir\\sf-config"); |
250 print "###### BUILD PREPARATION ######\n"; |
241 print "###### BUILD PREPARATION ######\n"; |
251 my $sPreparationCmd = "hlm sf-prep -Dsf.project.type=package $sSubProjArg -Dsf.spec.job.number=$nJobNumber -Dsf.spec.job.drive=$sDriveLetter: $sTestBuildOpt $sNoPublishOpt $sJobRootDirArg $sHlmDefineOpt"; |
242 my $sPreparationCmd = "hlm sf-prep -Dsf.project.type=package $sSubProjArg -Dsf.spec.job.number=$nJobNumber -Dsf.spec.job.drive=$sDriveLetter: $sTestBuildOpt $sNoPublishOpt $sJobRootDirArg $sHlmDefineOpt"; |
252 print("$sPreparationCmd\n"); |
243 print("$sPreparationCmd\n"); |
253 open(LOG, ">console_sfprep_$$.txt"); |
244 system($sPreparationCmd); |
254 open(PIPE, "$sPreparationCmd 2>&1 |"); |
|
255 while(<PIPE>) |
|
256 { |
|
257 print LOG $_; |
|
258 print $_; |
|
259 } |
|
260 close(PIPE); |
|
261 close(LOG); |
|
262 |
245 |
263 print "###### EXECUTE BUILD ######\n"; |
246 print "###### EXECUTE BUILD ######\n"; |
264 my $sBuildallCmd = "hlm sf-build-all -Dsf.project.type=package $sSubProjArg -Dsf.spec.job.number=$nJobNumber -Dsf.spec.job.drive=$sDriveLetter: $sTestBuildOpt $sNoPublishOpt $sJobRootDirArg $sHlmDefineOpt"; |
247 my $sBuildallCmd = "hlm sf-build-all -Dsf.project.type=package $sSubProjArg -Dsf.spec.job.number=$nJobNumber -Dsf.spec.job.drive=$sDriveLetter: $sTestBuildOpt $sNoPublishOpt $sJobRootDirArg $sHlmDefineOpt"; |
265 print("$sBuildallCmd\n"); |
248 print("$sBuildallCmd\n"); |
266 open(LOG, ">console_sfbuildall_$$.txt"); |
249 system($sBuildallCmd); |
267 open(PIPE, "$sBuildallCmd 2>&1 |"); |
|
268 while(<PIPE>) |
|
269 { |
|
270 print LOG $_; |
|
271 print $_; |
|
272 } |
|
273 close(PIPE); |
|
274 close(LOG); |
|
275 |
|
276 print "###### GENERATE BUILD SUMMARY ######\n"; |
|
277 my $sSummaryCmd = "hlm sf-summary -Dsf.project.type=package $sSubProjArg -Dsf.spec.job.number=$nJobNumber -Dsf.spec.job.drive=$sDriveLetter: $sTestBuildOpt $sNoPublishOpt $sJobRootDirArg $sHlmDefineOpt"; |
|
278 print("$sSummaryCmd\n"); |
|
279 open(LOG, ">console_sfsummary_$$.txt"); |
|
280 open(PIPE, "$sSummaryCmd 2>&1 |"); |
|
281 while(<PIPE>) |
|
282 { |
|
283 print LOG $_; |
|
284 print $_; |
|
285 } |
|
286 close(PIPE); |
|
287 close(LOG); |
|
288 |
|
289 if ($bPublish) |
|
290 { |
|
291 # copy console outputs to remote log archive |
|
292 if (-d "$sREMOTE_LOG_ARCHIVE\\$sPackage\\builds\\$sPlatform\\$sPackage\_$sPlatform.$nJobNumber\\logs") |
|
293 { |
|
294 my $sTgtDir = "$sREMOTE_LOG_ARCHIVE\\$sPackage\\builds\\$sPlatform\\$sPackage\_$sPlatform.$nJobNumber\\logs\\console"; |
|
295 print "copying console output files to $sTgtDir\n"; |
|
296 system("mkdir $sTgtDir"); |
|
297 system("copy /Y $sBOOTSTRAP_DIR\\console_bootstrap_$$.txt $sTgtDir"); |
|
298 system("del $sBOOTSTRAP_DIR\\console_bootstrap_$$.txt"); |
|
299 system("copy $sJobDir\\sf-config\\console_sfprep_$$.txt $sTgtDir"); |
|
300 system("copy $sJobDir\\sf-config\\console_sfbuildall_$$.txt $sTgtDir"); |
|
301 system("copy $sJobDir\\sf-config\\console_sfsummary_$$.txt $sTgtDir"); |
|
302 } |
|
303 else |
|
304 { |
|
305 print "directory $sREMOTE_LOG_ARCHIVE\\$sPackage\\builds\\$sPlatform\\$sPackage\_$sPlatform.$nJobNumber\\logs doesn't exist.\n"; |
|
306 } |
|
307 } |
|
308 |
250 |
309 print("cd $sBOOTSTRAP_DIR\n"); |
251 print("cd $sBOOTSTRAP_DIR\n"); |
310 chdir("$sBOOTSTRAP_DIR"); |
252 chdir("$sBOOTSTRAP_DIR"); |
311 |
253 |
312 # release the drive letter |
254 # release the drive letter |