#!/bin/sh
#
# Cron script to automagically do nightly builds of PEGASUS
#
# $Revision: 50 $
# Authors : gmehta@isi.edu, voeckler@cs.uchicago.edu

# setup env

#
# CHANGE These MAGIC Values for your setup
#
export JAVA_HOME=/nfs/asd2/pegasus/software/linux/java/default
export ANT_HOME=/nfs/asd2/pegasus/software/linux/ant/default
export PATH=${JAVA_HOME}/bin:${ANT_HOME}/bin:/opt/condor/bin:${PATH}
export PATH=${PATH}:/bin:/usr/bin
export CONDOR_CONFIG=/opt/condor/etc/condor_config

SVNROOT='https://smarty.isi.edu/svn/repo1/pegasus/trunk'

BUILDDIR=$1
DST=$2
if [ "X$BUILDDIR" = "X" -o "X$DST" = "X" ]; then
    echo "Usage: $0 builddir dstdir"
    exit 1
fi

DATE=`date +'%Y%m%d'`
LOG=$DST/pegasus-logger-$HOST-$DATE.txt

# extra message for uncaught errors, see "man 1 trap"
trap 'echo "ERROR: Detected a failure..." >> $LOG' ERR

# paranoia
if mkdir -p $BUILDDIR >> /dev/null 2>&1; then
    cd $BUILDDIR
else
    echo "ERROR: mkdir -p $BUILDDIR failed" 1>&2
    exit 2
fi

# extra sanity check
here=`/bin/pwd`
if [ "$here" = "/" -o "$here" = "$HOME" ]; then
    echo "ERROR! I am not in a directory I expect to be in" 1>&2
    exit 3
elif [ "$here" != "$BUILDDIR" ]; then
    echo "Warning: Not quite the expected destination directory" 1>&2
fi

# rotate dirs and use svn, unless called with 3 args
if [ "X$3" = "X" ]; then
    # shift previous runs
    if [ -d pegasus.old  ]; then
	if ! rm -rf pegasus.old; then
	    echo "Warning: Unable to remove pegasus.old" 1>&2
	fi
    fi
    if [ -d pegasus ]; then
	if ! mv pegasus pegasus.old; then
	    echo "ERROR: Unable to rename pegasus to pegasus.old" 1>&2
	    exit 4
	fi
    fi

    # grab latest and greatest
    echo "##### SVN CHECKOUT #####" > $LOG
    svn  co  $SVNROOT pegasus >> $LOG 2>&1
    if [ $? -ne 0 ]; then
	echo "ERROR: svn check-out failed, aborting" 1>&2
	exit 5
    fi
else
    echo "##### Using pre-select #####" > $LOG
fi

# enter Pegasus
if ! cd pegasus; then
    echo "ERROR: Unable to chdir into $BUILDDIR/pegasus" 1>&2
    exit 6
fi
PEGASUS_HOME=`pwd`
export PEGASUS_HOME
unset CLASSPATH
source setup-devel.sh
if [ $? -ne 0 ]; then
    echo "ERROR: Unable to source PEGASUS developer setup script" 1>&2
    exit 7
fi

# which versions
echo "#" >> $LOG
java -version 2>&1 | sed -e 's/^/# /' >> $LOG
ant  -version 2>&1 | sed -e 's/^/# /' >> $LOG
echo "#" >> $LOG

VERSION=`ant version | gawk '/.echo. [0-9]+\.[0-9]+\.[-0-9a-z]+/ { print $2 }'`
if [ "X$VERSION" = "X" ]; then
    echo 'ERROR: Unable to obtain a version number' 2>&1
    exit 9
else 
    echo "# detected PEGASUS version $VERSION" >> $LOG
fi
#    rm -f $TMP
#fi
SYSTEM=`ant version | gawk '/.echo. Architect/ { print $3 }'`
if [ "X$SYSTEM" = "X" ]; then
    echo 'ERROR: Unable to obtain a system info' 2>&1
    exit 10
else 
    echo "# detected System Info : $SYSTEM" >> $LOG
fi

# create binary
echo "##### ANT DIST #####" >> $LOG
BLOG="$DST/pegasus-binary-$VERSION-$SYSTEM-$DATE.txt"
ant clean dist 2>&1 | tee "$BLOG" >> $LOG;

if [ $? -eq 0 ]; then
    src="dist/pegasus-binary-$VERSION-$SYSTEM.tar.gz"
    dst="$DST/pegasus-binary-$VERSION-$SYSTEM-$DATE.tar.gz"
    if cp "$src" "$dst"; then
	chmod a+r,g+w "$dst" "$BLOG"
    else
	echo "Warning: Unable to copy binary distribution" 1>&2
    fi
else
    echo "ERROR: ant dist failed" 1>&2
    exit 43
fi

# create worker
echo "##### ANT DIST-WORKER #####" >> $LOG
WLOG="$DST/pegasus-worker-$VERSION-$SYSTEM-$DATE.txt"
ant clean dist-worker 2>&1 | tee "$WLOG" >> $LOG
if [ $? -eq 0 ]; then
    src="dist/pegasus-worker-$VERSION-$SYSTEM.tar.gz"
    dst="$DST/pegasus-worker-$VERSION-$SYSTEM-$DATE.tar.gz"
    if cp "$src" "$dst"; then
	chmod a+r,g+w "$dst" "$WLOG"
    else
	echo "Warning: Unable to copy worker distribution" 1>&2
    fi
else
    echo "ERROR: ant dist-worker failed" 1>&2
    exit 42
fi

# create source
echo "##### SOURCE #####" >> $LOG
ant clean | tee $TMP >> $LOG 2>&1
if [ $? -ne 0 ]; then
    echo "ERROR: ant clean failed" 1>&2
    cat $TMP 1>&2
    rm -f $TMP
    exit 44
else
    rm -f $TMP
fi

cd ..
gtar --exclude=\.svn -czvf $DST/pegasus-source-$VERSION-$DATE.tar.gz pegasus >> $LOG 2>&1
if [ $? -eq 0 ]; then
    chmod a+r,g+w $DST/pegasus-source-$VERSION-$DATE.tar.gz
else 
    echo "ERROR: gtar source failed, removing source" 1>&2
    rm -f $DST/pegasus-source-$VERSION-$DATE.tar.gz >> /dev/null 2>&1
    exit 45
fi

NLOG=$DST/pegasus-logger-$SYSTEM-$DATE.txt
mv $LOG $NLOG 
# done
trap - ERR
exit 0
