blob: 3bed9619d0b107981372786e144566bc2421207d [file] [log] [blame]
# !/bin/sh
#------------------------------------------------------------------------------------------------------
# This script is designed to run from cron on the Eclipse foundation's build server
# It tests for the existence of a completed build or test run
# then initiates the publication of the results to the appropriate locations and
# sends out notifiacation when complete.
#
# Author: Eric Gwin (Oracle)
#
#==========================
# Basic Env Setup
#
#Define common variables
THIS=$0
PROGNAME=`basename ${THIS}`
CUR_DIR=`dirname ${THIS}`
umask 0002
ANT_ARGS=" "
ANT_OPTS="-Xmx512m"
START_DATE=`date '+%y%m%d-%H%M'`
#Directories
JAVA_HOME=/shared/common/jdk-1.6.x86_64
ANT_HOME=/shared/common/apache-ant-1.7.0
HOME_DIR=/shared/rt/eclipselink
LOG_DIR=${HOME_DIR}/logs
#Files
BOOTSTRAP_BLDFILE=bootstrap.xml
UD2M_BLDFILE=uploadDepsToMaven.xml
PATH=${JAVA_HOME}/bin:${ANT_HOME}/bin:/usr/bin:/usr/local/bin:${PATH}
# Export necessary global environment variables
export ANT_ARGS ANT_OPTS ANT_HOME HOME_DIR JAVA_HOME JUNIT_HOME LOG_DIR PATH BLD_DEPS_DIR JUNIT_HOME SVN_EXEC
#==========================
# Functions Definitions
#
unset Usage
Usage() {
echo "ERROR: Invalid usage detected!"
echo "USAGE: ./${PROGNAME} [\> LOGFILE 2\>\&1]"
}
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
}
unset genSafeTmpDir
genSafeTmpDir() {
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}'"
}
unset getHandoff
getHandoff() {
curdir=`pwd`
cd $HOME_DIR
handoff=`ls handoff-file*.dat | grep -m1 *`
}
unset parseHandoff
parseHandoff() {
handoff_file=$1
handoff_error_string="Error: Invalid handoff_filename: '${handoff_file}'! Should be 'handoff-file-<PROC>-<BRANCH>-<QUALIFIER>.dat'"
## Parse handoff_file for BRANCH, QUALIFIER, TARGET, and HOST
BRANCH=`echo ${handoff_file} | cut -s -d'-' -f4`
if [ "${BRANCH}" = "" ] ; then
echo "BRANCH ${handoff_error_string}"
exit 2
fi
QUALIFIER=`echo ${handoff_file} | cut -s -d'-' -f5,6 | cut -d'.' -f1`
if [ "${QUALIFIER}" = "" ] ; then
echo "QUALIFIER ${handoff_error_string}"
exit 2
fi
PROC=`echo ${handoff_file} | cut -s -d'-' -f3`
if [ ! \( \( "${PROC}" = "test" \) -o \( "${PROC}" = "build" \) \) ] ; then
echo "PROC ${handoff_error_string}"
exit 2
fi
# echo "BRANCH='${BRANCH}' QUALIFIER='${QUALIFIER}' PROC='${PROC}'"
}
unset runAnt
runAnt() {
#Define run specific variables
BRANCH=$1
QUALIFIER=$2
PROC=$3
if [ ! "${BRANCH}" = "trunk" ] ; then
BRANCH_NM=${BRANCH}
BRANCH=branches/${BRANCH}/
else
BRANCH_NM="trunk"
BRANCH=
fi
#Directories
BRANCH_PATH=${HOME_DIR}/${BRANCH}trunk
BLD_DEPS_DIR=${HOME_DIR}/bld_deps/${BRANCH_NM}
JUNIT_HOME=${BLD_DEPS_DIR}/junit
#Files
JDBC_LOGIN_INFO_FILE=${HOME_DIR}/db-${BRANCH_NM}.dat
LOGFILE_NAME=bsb-${BRANCH_NM}_pub${PROC}_${START_DATE}.log
DATED_LOG=${LOG_DIR}/${LOGFILE_NAME}
# Define build dependency paths (build needs em, NOT compile dependencies)
OLD_CLASSPATH=${CLASSPATH}
CLASSPATH=${JUNIT_HOME}/junit.jar:${ANT_HOME}/lib/ant-junit.jar
# Export run specific variables
export BLD_DEPS_DIR BRANCH_NM BRANCH_PATH CLASSPATH JUNIT_HOME TARGET
## Parse $QUALIFIER for build date value
BLDDATE=`echo ${QUALIFIER} | cut -s -d'-' -f1 | cut -s -dv -f2`
if [ "${BLDDATE}" = "" ] ; then
echo "BLDDATE Error: There is something wrong with QUALIFIER. ('$QUALIFIER' should be vDATE-rREV)!"
exit 2
fi
## Parse $QUALIFIER for SVN revision value
SVNREV=`echo ${QUALIFIER} | cut -s -d'-' -f2 | cut -s -dr -f2`
if [ "${SVNREV}" = "" ] ; then
echo "SVNREV Error: There is something wrong with QUALIFIER. ('$QUALIFIER' should be vDATE-rREV)!"
exit 2
fi
# Setup parameters for Ant build
ANT_BASEARG="-f \"${BOOTSTRAP_BLDFILE}\" -Dbranch.name=\"${BRANCH}\" ${ANT_BASEARG} -Dsvn.revision=${SVNREV}"
ANT_BASEARG="${ANT_BASEARG} -Dbuild.date=${BLDDATE} -Dhandoff.file=${handoff}"
cd ${HOME_DIR}
echo "Results logged to: ${DATED_LOG}"
touch ${DATED_LOG}
echo ""
echo "${PROC} publish starting for ${BRANCH} build:${QUALIFIER}..."
echo "${PROC} publish started at: '`date`' for ${BRANCH} build:${QUALIFIER}" >> ${DATED_LOG}
echo " ant ${ANT_BASEARG} publish-${PROC}"
echo "ant ${ANT_BASEARG} publish-${PROC}" >> ${DATED_LOG}
ant ${ANT_BASEARG} publish-${PROC} >> ${DATED_LOG} 2>&1
echo "Publish completed at: `date`" >> ${DATED_LOG}
echo "Publish complete."
}
unset postProcess
postProcess() {
#genSafeTmpDir
echo "PostProcessing..."
echo " Generating notification for ${PROC} publishing for ${BRANCH} build ${QUALIFIER}..."
echo " Not sent..."
# cleanup
#rm -r ${tmp}
echo "Done."
}
#==========================
# Main Begins
#
#==========================
# Test for handoff
# if not exit with minimal work done.
curdir=`pwd`
cd $HOME_DIR
for handoff in `ls handoff-file*.dat` ; do
echo "Detected handoff file:'${handoff}'. Process starting..."
# Do stuff
parseHandoff ${handoff}
runAnt ${BRANCH} ${QUALIFIER} ${PROC}
postProcess
done