Windows-Server-2003/tools/postbuildscripts/octopus.cmd

154 lines
4.6 KiB
Batchfile

@REM standard cmd script intro lines ...
@echo off
setlocal EnableDelayedExpansion
REM octopus.cmd
REM
REM intended to run on the machine which is
REM creating the build.inc file. this script
REM is called via remote when the x86fre build
REM finished postbuild.cmd
REM set up env vars needed
for %%a in (%0) do set SCRIPT_NAME=%%~na
set LOGFILE=%SDXROOT%\!SCRIPT_NAME!.log
set /a ExitCode=0
set SemaphoreName=octopus
set SemaphoreRaised=
REM startup
call logmsg.cmd /t "Beginning ..."
REM validate we're on an enlisted machine
if not defined SDXROOT (
call errmsg.cmd "SDXROOT is not defined! Exiting ..."
set /a ExitCode=!ExitCode! + 1
goto :ErrEnd
)
REM check the semaphore
pushd %RazzleToolPath%\PostBuildScripts
if "!ErrorLevel!" NEQ "0" (
call errmsg.cmd "Can't find %%RazzleToolPath%%\PostBuildScripts!"
set /a ExitCode=!ExitCode! + 1
goto :ErrEnd
)
perl cmdevt.pl -q %SemaphoreName% >nul 2>nul
if "!ErrorLevel!" == "0" (
REM there is already an octopus event, so octopus is running.
call errmsg.cmd "Octopus already running, won't start new process"
set /a ExitCode=!ExitCode! + 1
goto :ErrEnd
)
REM otherwise, start up octopus
REM first, raise the semaphore
start "Octopus running ..." /min perl cmdevt.pl -w %SemaphoreName%
set SemaphoreRaised=TRUE
popd &REM matches pushd %RazzleToolPath%\PostBuildScripts
set MailFileName=%TMP%\octomail.txt
if exist !MailFileName! del !MailFileName!
if exist !MailFileName! call logmsg.cmd "Mail not deleted, will append ..."
echo This is an automated message from octopus. >> !MailFileName!
echo. >> !MailFileName!
echo For build: >> !MailFileName!
REM all we need to do is build a build.inc file,
REM so no need to use timebuild, just build.exe
pushd %SDXROOT%
REM run scorch just so we don't get certain clobber errors
REM hide our log file from this temporarily
if exist %TMP%\templog.tmp del /f /q %TMP%\templog.tmp >nul 2>nul
copy %LOGFILE% %TMP%\templog.tmp >nul 2>nul
nmake -f makefil0 scorch_source
if not exist %LOGFILE% copy %TMP%\templog.tmp %LOGFILE% >nul 2>nul
call %RazzleToolPath%\PostBuildScripts\fullsync.cmd
if "!ErrorLevel!" NEQ "0" (
call errmsg.cmd "Failed to sync tree, exiting."
set /a ExitCode=!ExitCode! + 1
REM for now, just keep going like nothing happened.
REM goto :ErrEnd
REM instead of exiting, let's log the files that weren't syncable
echo Sync errors occured, here's the output of sdx sync: >> %LOGFILE%
sdx sync -n >>%LOGFILE% 2>>%LOGFILE%
)
REM now move old build.inc file in case we're overwritting something
if exist build.inc (
call logmsg.cmd "Moving build.inc to build.inc.old ..."
if exist build.inc.old del build.inc.old
ren build.inc build.inc.old
if "!ErrorLevel!" NEQ "0" (
call errmsg.cmd "Failed to rename build.inc to build.inc.old"
call errmsg.cmd "Will continue ..."
set /a ExitCode=!ExitCode! + 1
)
)
set BuildErrors=
build.exe -cDP#
if "!ErrorLevel!" NEQ "0" (
call errmsg.cmd "build finished with errors!"
set BuildErrors=TRUE
set /a ExitCode=!ExitCode! + 1
REM comment out the next line as we want to go on with postbuild
REM regardless of the outcome of the build
REM goto :ErrEnd
) else (
call logmsg.cmd "Build finished with no errors."
)
type %SDXROOT%\__blddate__ >> !MailFileName!
echo. >> !MailFileName!
if defined BuildErrors (
echo There were build errors: >> !MailFileName!
type %SDXROOT%\build.err >> !MailFileName!
echo. >> !MailFileName!
)
REM uniqify the build.inc file
perl %RazzleToolPath%\PostBuildScripts\unique.pl -i:%SDXROOT%\build.inc -o:%SDXROOT%\unique.inc
REM now postbuild
postbuild.cmd
REM let's just run release.pl for run since primecdixf will never
REM be an official_build_machine. use -nd so we don't propagate builds
perl %RazzleToolPath%\PostBuildScripts\release.pl -nd
if exist \\%COMPUTERNAME%\latest\build_logs\postbuild.err (
echo There were postbuild errors: >> !MailFileName!
type \\%COMPUTERNAME%\latest\build_logs\postbuild.err >> !MailFileName!
echo. >> !MailFileName!
)
echo Have a nice day! >> !MailFileName!
REM now send the mail
perl %RazzleToolPath%\PostBuildScripts\octomail.pl
popd &REM matches pushd %SDXROOT%
goto :End
:End
call logmsg.cmd /t "Finished."
REM drop the semaphore if we raised it
if defined SemaphoreRaised (
pushd %RazzleToolPath%\PostBuildScripts
perl cmdevt.pl -s %SemaphoreName%
popd &REM matches %RazzleToolPath%\PostBuildScripts
)
endlocal & seterror.exe "!ExitCode!"
goto :EOF
:ErrEnd
call logmsg.cmd /t "Encountered !ExitCode! logged error(s)."
call errmsg.cmd "See %LOGFILE% for errors."
call :End
if "!ExitCode!" == "0" set /a ExitCode=1
endlocal & seterror.exe "!ExitCode!"