| # !/bin/sh |
| |
| THIS=$0 |
| PROGNAME=`basename ${THIS}` |
| CUR_DIR=`dirname ${THIS}` |
| umask 0002 |
| TARGET=oracle |
| TARG_NM="oracle" |
| BRANCH=$1 |
| |
| |
| ##-- Convert "BRANCH" to BRANCH_NM (version or trunk) and BRANCH (svn branch path) |
| # BRANCH_NM is used for reporting and naming purposes |
| # BRANCH is used to quailify the actual Branch path |
| if [ ! "${BRANCH}" = "" ] |
| then |
| BRANCH_NM=${BRANCH} |
| BRANCH=branches/${BRANCH}/ |
| else |
| BRANCH_NM="trunk" |
| fi |
| |
| echo "Target ='${TARGET}'" |
| echo "Target name='${TARG_NM}'" |
| echo "Branch ='${BRANCH}'" |
| echo "Branch name='${BRANCH_NM}'" |
| |
| SVN_EXEC=`which svn` |
| if [ $? -ne 0 ] |
| then |
| echo "Cannot autofind svn executable. Using default value." |
| SVN_EXEC=/usr/local/bin/svn |
| if [ ! -f ${SVN_EXEC} ] |
| then |
| echo "Error finding svn install!" |
| exit 1 |
| fi |
| fi |
| |
| # safe temp directory |
| tmp=${TMPDIR-/tmp} |
| tmp=$tmp/somedir.$RANDOM.$RANDOM.$RANDOM.$$ |
| (umask 077 && mkdir $tmp) || { |
| echo "Could not create temporary directory! Exiting." 1>&2 |
| exit 1 |
| } |
| echo "results stored in: '${tmp}'" |
| |
| #Define common variables |
| PUTTY_SESSION=eclipse-dev |
| START_DATE=`date '+%y%m%d-%H%M'` |
| DEFAULT_PREVREV=5400 |
| DEFAULT_PREVCOMMIT=5401 |
| #Directories |
| HOME_DIR=/shared/rt/eclipselink |
| JAVA_HOME=/usr/lib/jvm/java-6-sun |
| ANT_HOME=/usr/share/ant |
| LOG_DIR=${HOME_DIR}/logs |
| ORACLE_ROOT=foundation/org.eclipse.persistence.oracle |
| ORACLE_CI_DIR=foundation/plugins |
| BRANCH_PATH=${HOME_DIR}/${BRANCH}trunk |
| BLD_DEPS_DIR=${HOME_DIR}/bld_deps/${BRANCH_NM} |
| #URLs |
| HOME_URL=svnroot/rt/org.eclipse.persistence |
| BRANCH_URL=${HOME_URL}/${BRANCH}trunk |
| #Files |
| BOOTSTRAP_BLDFILE=bootstrap.xml |
| LOGFILE_NAME=bsb-${BRANCH_NM}_${TARG_NM}_${START_DATE}.log |
| PREV_BUILD_REV_NAME=lastbuild-${BRANCH_NM}.dat |
| DATED_LOG=${LOG_DIR}/${LOGFILE_NAME} |
| PREVREV_FILE=${LOG_DIR}/${PREV_BUILD_REV_NAME} |
| JDBC_LOGIN_INFO_FILE=${HOME_DIR}/db-${BRANCH_NM}.dat |
| TEMP_FILE=${tmp}/SVNLOG-${BRANCH_NM}_${TARG_NM}_${START_DATE}.txt |
| |
| #Post-processing |
| MAIL_EXEC=/usr/bin/mail |
| MAILFROM=eric.gwin@oracle.com |
| MAILLIST="ejgwin@gmail.com" |
| SUCC_MAILLIST="eric.gwin@oracle.com" |
| #FAIL_MAILLIST="eclipselink-dev@eclipse.org ejgwin@gmail.com" |
| FAIL_MAILLIST="eric.gwin@oracle.com ejgwin@gmail.com" |
| TESTDATA_FILE=${tmp}/testsummary-${BRANCH_NM}_${TARG_NM}.txt |
| SVN_LOG_FILE=${tmp}/svnlog-${BRANCH_NM}_${TARG_NM}.txt |
| PROJ_LOG_FILE=${tmp}/projlog-${BRANCH_NM}_${TARG_NM}.txt |
| MAILBODY=${tmp}/mailbody-${BRANCH_NM}_${TARG_NM}.txt |
| FailedNFSDir="/home/data/httpd/download.eclipse.org/rt/eclipselink/recent-failure-logs" |
| BUILD_FAILED="false" |
| TESTS_FAILED="false" |
| |
| #set -x |
| #Define build dependency dirs (build needs em, NOT compile dependencies) |
| JUNIT_HOME=${BLD_DEPS_DIR}/junit |
| MAVENANT_DIR=${BLD_DEPS_DIR}/mavenant |
| MAILLIB_DIR=${BRANCH_PATH}/foundation/eclipselink.core.lib |
| |
| PATH=${JAVA_HOME}/bin:${ANT_HOME}/bin:/usr/bin:/usr/local/bin:${PATH} |
| OLD_CLASSPATH=${CLASSPATH} |
| CLASSPATH=${JUNIT_HOME}/junit.jar:${ANT_HOME}/lib/ant-junit.jar:${MAILLIB_DIR}/mail.jar:${MAILLIB_DIR}/activation.jar:${MAVENANT_DIR}/maven-ant-tasks-2.0.8.jar |
| |
| #------- Subroutines -------# |
| unset Usage |
| Usage() { |
| echo "ERROR: Invalid usage detected!" |
| echo "USAGE: ./${PROGNAME} [branch]" |
| } |
| |
| unset CreatePath |
| CreatePath() { |
| #echo "Running CreateHome!" |
| newdir= |
| for directory in `echo $1 | tr '/' ' '` |
| do |
| newdir=${newdir}/${directory} |
| if [ ! -d "/${newdir}" ] |
| then |
| #echo "creating ${newdir}" |
| mkdir ${newdir} |
| if [ $? -ne 0 ] |
| then |
| echo " Create failed!" |
| exit |
| fi |
| fi |
| done |
| } |
| |
| #--------- MAIN --------# |
| |
| #Test for existence of dependencies, send email and fail if any of the above not found. |
| if [ ! -d ${JAVA_HOME} ] |
| then |
| echo "Java not found!" |
| echo "Expecting Java at: ${JAVA_HOME}" |
| JAVA_HOME=/shared/common/jdk1.6.0_05 |
| if [ ! -d ${JAVA_HOME} ] |
| then |
| echo "Java not found!" |
| echo "Expecting Java at: ${JAVA_HOME}" |
| exit |
| else |
| echo "Java found at: ${JAVA_HOME}" |
| fi |
| fi |
| if [ ! -d ${ANT_HOME} ] |
| then |
| echo "Ant not found!" |
| echo "Expecting Ant at: ${ANT_HOME}" |
| exit |
| fi |
| if [ ! -d ${HOME_DIR} ] |
| then |
| echo "Need to create HOME_DIR (${HOME_DIR})" |
| CreatePath ${HOME_DIR} |
| fi |
| if [ ! -d ${LOG_DIR} ] |
| then |
| echo "Need to create LOG_DIR (${LOG_DIR})" |
| CreatePath ${LOG_DIR} |
| fi |
| if [ ! -d ${BLD_DEPS_DIR} ] |
| then |
| echo "Need to create BLD_DEPS_DIR (${BLD_DEPS_DIR})" |
| CreatePath ${BLD_DEPS_DIR} |
| fi |
| if [ ! -f $JDBC_LOGIN_INFO_FILE ] |
| then |
| echo "No db Login info available!" |
| exit |
| else |
| DB_USER=`cat $JDBC_LOGIN_INFO_FILE | cut -d'*' -f1` |
| DB_PWD=`cat $JDBC_LOGIN_INFO_FILE | cut -d'*' -f2` |
| DB_URL=`cat $JDBC_LOGIN_INFO_FILE | cut -d'*' -f3` |
| DB_NAME=`cat $JDBC_LOGIN_INFO_FILE | cut -d'*' -f4` |
| fi |
| |
| #Set appropriate max Heap for VM and let Ant inherit JavaVM (OS's) proxy settings |
| ANT_ARGS=" " |
| ANT_OPTS="-Xmx512m" |
| ANT_BASEARG="-f \"${BOOTSTRAP_BLDFILE}\" -Dbranch.name=\"${BRANCH}\" -Dsvn.server.name=eclipse-dev" |
| |
| export ANT_ARGS ANT_OPTS ANT_HOME BRANCH_PATH HOME_DIR LOG_DIR JAVA_HOME JUNIT_HOME MAVENANT_DIR PATH CLASSPATH |
| export SVN_EXEC BLD_DEPS_DIR JUNIT_HOME TARGET BRANCH_NM |
| |
| cd ${HOME_DIR} |
| echo "Results logged to: ${DATED_LOG}" |
| touch ${DATED_LOG} |
| |
| echo "Testing if build is needed..." >> ${DATED_LOG} |
| echo "Testing if build is needed..." |
| if [ -f ${PREVREV_FILE} ]; then |
| PREV_REV=`cat ${PREVREV_FILE} | cut -d: -f1` |
| PREV_COMMIT=`cat ${PREVREV_FILE} | cut -d: -f2` |
| fi |
| if [ "${PREV_REV}" = "" ]; then PREV_REV=${DEFAULT_PREVREV}; fi |
| if [ "${PREV_COMMIT}" = "" ]; then PREV_COMMIT=${DEFAULT_PREVCOMMIT}; fi |
| # Test to make sure noone else checked in a new version of the oracle jars independant of this process |
| svn log -q -r HEAD:${PREV_REV} svn+ssh://${PUTTY_SESSION}/${BRANCH_URL}/${ORACLE_CI_DIR} > ${TEMP_FILE} |
| PREV_COMMIT=`cat ${TEMP_FILE} | grep -m1 -v "\-\-\-" | cut -d' ' -f1 | cut -c 2-` |
| echo " previous Revs (Proj:Commit): '${PREV_REV}:${PREV_COMMIT}'" >> ${DATED_LOG} |
| echo " previous Revs (Proj:Commit): '${PREV_REV}:${PREV_COMMIT}'" |
| svn log -q -r HEAD:${PREV_REV} svn+ssh://${PUTTY_SESSION}/${BRANCH_URL}/${ORACLE_ROOT} > ${TEMP_FILE} |
| CURRENT_REV=`cat ${TEMP_FILE} | grep -m1 -v "\-\-\-" | cut -d' ' -f1 | cut -c 2-` |
| echo " curProjRev: '${CURRENT_REV}'" >> ${DATED_LOG} |
| echo " curProjRev: '${CURRENT_REV}'" |
| if [ "${CURRENT_REV}" -gt "${PREV_REV}" ] |
| then |
| # Get Current view revision for later use |
| svn info ${BRANCH_PATH} > ${TEMP_FILE} |
| VIEW_REV=`cat ${TEMP_FILE} | grep -m1 Revision | cut -d: -f2 | tr -d ' '` |
| echo " curViewRev: '${VIEW_REV}'" |
| # remove potential "conflicts" |
| echo "Cleanup previous build for new checkout..." >> ${DATED_LOG} |
| echo "Cleanup previous build for new checkout..." |
| rm -f ${BRANCH_PATH}/eclipselink* |
| rm -f ${BRANCH_PATH}/${ORACLE_CI_DIR}/org.eclipse.persistence.oracle* |
| echo "Retrieving latest source from subversion..." >> ${DATED_LOG} |
| echo "Retrieving latest source from subversion..." |
| svn co --non-interactive svn+ssh://${PUTTY_SESSION}/${BRANCH_URL} ${BRANCH_PATH} |
| # Get Current view revision for later use |
| svn info ${BRANCH_PATH} > ${TEMP_FILE} |
| NEW_VIEW_REV=`cat ${TEMP_FILE} | grep -m1 Revision | cut -d: -f2 | tr -d ' '` |
| echo " newViewRev: '${NEW_VIEW_REV}' (If matches SVN_REV can remove some postprocessing code)." |
| echo "Copying latest ${BOOTSTRAP_BLDFILE} for build..." >> ${DATED_LOG} |
| echo "Copying latest ${BOOTSTRAP_BLDFILE} for build..." |
| cp ${BRANCH_PATH}/buildsystem/${BOOTSTRAP_BLDFILE} ./${BOOTSTRAP_BLDFILE} |
| echo "Oracle Extension Build started at: `date`" >> ${DATED_LOG} |
| echo "Oracle Extension Build started." |
| echo "ant ${ANT_BASEARG} ${TARGET}" >> ${DATED_LOG} |
| ant ${ANT_BASEARG} -Ddb.user="${DB_USER}" -Ddb.pwd="${DB_PWD}" -Ddb.url="${DB_URL}" ${TARGET} >> ${DATED_LOG} 2>&1 |
| echo "Build completed at: `date`" >> ${DATED_LOG} |
| echo "Build completed." |
| echo "Updating Revision info..." >> ${DATED_LOG} |
| echo "Updating Revision info..." |
| svn log -q -r HEAD:${PREV_REV} svn+ssh://${PUTTY_SESSION}/${BRANCH_URL}/${ORACLE_CI_DIR} > ${TEMP_FILE} |
| COMMIT_REV=`cat ${TEMP_FILE} | grep -m1 -v "\-\-\-" | cut -d' ' -f1 | cut -c 2-` |
| echo " Commit revisions (New:Prev): '${COMMIT_REV}:${PREV_COMMIT}'" >> ${DATED_LOG} |
| echo " Commit revisions (New:Prev): '${COMMIT_REV}:${PREV_COMMIT}'" |
| if [ "${COMMIT_REV}" -gt "${PREV_COMMIT}" ] |
| then |
| COMMIT=true |
| echo "${CURRENT_REV}:${COMMIT_REV}" > ${PREVREV_FILE} |
| echo " New revision info stored, commit appears to have completed successfully." >> ${DATED_LOG} |
| echo " New revision info stored, commit appears to have completed successfully." |
| else |
| echo " It appears there was no commit. Aborting Revision update..." >> ${DATED_LOG} |
| echo " It appears there was no commit. Aborting Revision update..." |
| fi |
| |
| #----------- Post-processing ------------# |
| #----------------------------------------# |
| echo "Beginning Post-Build processing..." |
| ## find the current version (cannot use $BRANCH, because need current version stored in ANT buildfiles) |
| ## |
| VERSION=`cat ${DATED_LOG} | grep -m1 "EL version" | cut -d= -f2 | tr -d '\047'` |
| SVN_REV=`cat ${DATED_LOG} | grep -m1 "svn.revision" | cut -d= -f2 | tr -d '\047'` |
| echo "Generating summary email for ${VERSION} build..." |
| echo " Revision info (project code:built using:artifact ci): '${CURRENT_REV}:${SVN_REV}:${COMMIT_REV}'" |
| echo " DEBUG: SVN_REV: '${SVN_REV}'" |
| |
| echo "Getting View transaction log..." |
| ## fixup the revision of the previous view to not include itself |
| ## |
| if [ ! "$VIEW_REV" = "" ] |
| then |
| ## Include everything but the revision of the last build (jump 1 up from it) |
| PREV_VIEW=`expr "${VIEW_REV}" + "1"` |
| ## Prepend the ":" for the "to" syntax of the "svn log" command |
| PREV_VIEW=:${PREV_VIEW} |
| else |
| echo " ERROR: What the heck's going on here? There's no VIEW_REV?" |
| fi |
| echo " change log will be from the current retrieved codebase to earliest" |
| echo " not previously checked-out (${SVN_REV}${PREV_VIEW}) inclusive." |
| ## Generate transaction log for latest build |
| ## |
| svn log -q -r ${SVN_REV}${PREV_VIEW} -v svn+ssh://${PUTTY_SESSION}/${BRANCH_URL} >> ${SVN_LOG_FILE} |
| |
| echo "Getting Project transaction log..." |
| ## fixup the revision of the last project build to not include itself |
| ## |
| if [ ! "$PREV_REV" = "" ] |
| then |
| ## Include everything but the revision of the last build (jump 1 up from it) |
| OLDEST_TRAN=`expr "${PREV_REV}" + "1"` |
| ## Prepend the ":" for the "to" syntax of the "svn log" command |
| OLDEST_TRAN=:${OLDEST_TRAN} |
| else |
| echo " ERROR: What the heck's going on here? There's no PREV_REV?" |
| fi |
| echo " change log will be from latest project transaction to earliest" |
| echo " not previously built (${CURRENT_REV}${OLDEST_TRAN}) inclusive." |
| ## Generate transaction log for oracle project changes |
| ## |
| svn log -q -r ${CURRENT_REV}${OLDEST_TRAN} -v svn+ssh://${PUTTY_SESSION}/${BRANCH_URL}/${ORACLE_ROOT} >> ${PROJ_LOG_FILE} |
| |
| ## Verify Compile complete |
| ## if [ not build failed ] |
| ## |
| echo "Verifying build status..." |
| if [ ! "`tail ${DATED_LOG} | grep 'BUILD SUCCESSFUL'`" = "" ] |
| then |
| echo " Build was successful." |
| MAIL_SUBJECT="${BRANCH_NM} Oracle Extension Nightly build complete." |
| MAILLIST=${SUCC_MAILLIST} |
| else |
| echo " Build had issues to be resolved." |
| MAIL_SUBJECT="${BRANCH_NM} Oracle Extension Nightly build failed!" |
| MAILLIST=${FAIL_MAILLIST} |
| fi |
| |
| ## Build Body text of email |
| ## |
| if [ -f ${MAILBODY} ]; then rm ${MAILBODY}; fi |
| echo "Build summary for o.e.p.oracle project revision ${CURRENT_REV} (Full codebase rev '${SVN_REV}')." > ${MAILBODY} |
| echo "-----------------------------------" >> ${MAILBODY} |
| echo "Full Build log can be found on the Oracle Build machine at:" >> ${MAILBODY} |
| echo " ${DATED_LOG}" >> ${MAILBODY} |
| echo "-----------------------------------" >> ${MAILBODY} |
| if [ "${COMMIT}" = "true" ]; then |
| echo "This build of Oracle Extension committed as Revision ${COMMIT_REV}" >> ${MAILBODY} |
| echo "-----------------------------------" >> ${MAILBODY} |
| fi |
| echo "" >> ${MAILBODY} |
| echo "Project Changes since Last Build:" >> ${MAILBODY} |
| cat ${PROJ_LOG_FILE} >> ${MAILBODY} |
| echo "View Changes since Last Build:" >> ${MAILBODY} |
| cat ${SVN_LOG_FILE} >> ${MAILBODY} |
| |
| ## Send result email |
| ## |
| echo "Sending email..." |
| cat ${MAILBODY} | ${MAIL_EXEC} -user=${MAILFROM} --subject="BUILD STATUS:: ${MAIL_SUBJECT}" ${MAILLIST} |
| if [ $? -eq 0 ] |
| then |
| echo " complete." |
| else |
| echo " failed." |
| fi |
| |
| echo "Printing Project Transaction log..." |
| echo " " |
| cat ${PROJ_LOG_FILE} |
| echo "#####################################################################" |
| echo "Printing Transaction log for Build View..." |
| cat ${SVN_LOG_FILE} |
| else |
| echo "Oracle Extension Nightly build aborted... no code changes" >> ${DATED_LOG} |
| echo "Oracle Extension Nightly build aborted... no code changes" |
| if [ -f ${MAILBODY} ]; then rm ${MAILBODY}; fi |
| echo "Because no changes to the repository were detected." > ${MAILBODY} |
| echo " " >> ${MAILBODY} |
| echo "The build log can be found at: ${DATED_LOG}" >> ${MAILBODY} |
| MAIL_SUBJECT="${BRANCH_NM} Oracle Extension Nightly build aborted." |
| MAILLIST=${SUCC_MAILLIST} |
| |
| echo "Sending 'Oracle Nightly Aborted' email..." |
| cat ${MAILBODY} | ${MAIL_EXEC} --user=${MAILFROM} --subject="BUILD STATUS:: ${MAIL_SUBJECT}" ${MAILLIST} |
| if [ $? -eq 0 ] |
| then |
| echo " complete." |
| else |
| echo " failed." |
| fi |
| fi |
| |
| rm -rf $tmp |
| #----------------------------------------# |
| CLASSPATH=${OLD_CLASSPATH} |