Files
mercury/tools/run_all_tests_from_cron
Julien Fischer 8f9762dac7 Bump the release branch.
tools/run_all_tests_from_cron:
	Bump the release branch.
2012-08-12 18:03:03 +00:00

226 lines
6.2 KiB
Bash
Executable File

#!/bin/sh
#
# This script runs the nightly bootstrap tests.
# It is invoked directly from cron, so it runs
# without a proper environment (PATH, etc.) set up.
#
# NB. Although this file is under CVS control,
# the copy that is used by cron does not get
# automatically updated from the CVS repository.
# After any modifications, the master copy
# in /home/mercury/public/test_mercury/scripts
# should be updated manually.
#-----------------------------------------------------------------------------#
tmpfile=/tmp/run_test$$
tmpscript=/tmp/test_mercury$$
mail_subject=/tmp/test_mercury_mail$$
trap 'rm -f $tmpfile $tmpscript $mail_subject; exit 1' 1 2 3 13 15
#-----------------------------------------------------------------------------#
ulimit -c 0
C_COMPILER=gcc
BRANCH=
USE_MMC_MAKE=""
case $# in
1) HOST=$1 ;;
2) HOST=$1; C_COMPILER=$2 ;;
3) HOST=$1; C_COMPILER=$2; BRANCH=$3 ;;
4) HOST=$1; C_COMPILER=$2; BRANCH=$3; USE_MMC_MAKE=$4 ;;
*) echo "Usage: $0 host [c-compiler] [branch] [use_mmc_make]" 1>&2
exit 1 ;;
esac
#-----------------------------------------------------------------------------#
if [ -d /home/mercury/public/. ]; then
TOPDIR=/home/mercury/public
PATH="$HOME/bin/$ARCH`awk '/^[^#]/{printf ":%s",$0;}' $TOPDIR/cron/.path`"
else
case "$HOST" in
# The repeated `mercury' for eris is deliberate.
eris) TOPDIR=/Users/mercury/mercury/public ;;
*) TOPDIR=$HOME/public ;;
esac
fi
PATH="$TOPDIR/mercury-latest/$FULLARCH/bin:$PATH"
PATH="$TOPDIR/$HOST:$PATH"
PATH="$HOME/bin:$PATH"
PATH="$PATH:/usr/bin"
export PATH
CVSROOT=/home/mercury/mercury1/repository
if [ -d $CVSROOT/. ]; then
:
else
case "$HOST" in
neptune|goofy|eris|bob)
CVSROOT=":ext:mercury@cvs.mercury.csse.unimelb.edu.au:$CVSROOT"
;;
*)
CVSROOT=":pserver:guest@cvs.mercury.csse.unimelb.edu.au:$CVSROOT"
;;
esac
fi
export CVSROOT
#-----------------------------------------------------------------------------#
# Redirect all output to $tmpfile to stop cron mailing
# content-free messages to mercury@cs.mu.oz.au.
{
tm_dir=$TOPDIR/test_mercury/test_dirs/$HOST
[ -d $TOPDIR/test_mercury/scripts ] || mkdir -p $TOPDIR/test_mercury/scripts
cd $TOPDIR/test_mercury/scripts
cvs checkout mercury/tools/test_mercury
cp mercury/tools/test_mercury $tmpscript
cvs checkout mercury/tools/generate_index_html
cvs checkout mercury/config.guess
FULLARCH="`./mercury/config.guess`"
ARCH="`expr $FULLARCH : '\([^-]*\)-.*' `"
#-----------------------------------------------------------------------------#
release_branch=12.08
case "$BRANCH" in
"")
DAY=`date '+%e'`
case $HOST in
mundroo|mundula)
# For these hosts we only run 3 times a week;
# twice during the week and once on the weekend.
# During the week, test the main branch.
# On the weekend, test the release branch.
#case `date '+%w'` in
# 0|6) BRANCH=$release_branch ;;
# *) BRANCH=latest ;;
#esac
BRANCH=latest
;;
goliath)
case $DAY in
*[02468]) BRANCH=$release_branch ;;
*) BRANCH=latest ;;
esac
;;
carlton)
BRANCH=latest
;;
*)
# On anything else just test the main branch.
BRANCH=latest
;;
esac
;;
esac
# While we are preparing for the release, test the release branch
# intensively -- only test the main branch on one host (the ROTD host).
#case $HOST in
#earth) ;;
#*) BRANCH=$release_branch ;;
#esac
#
#-----------------------------------------------------------------------------#
echo run_test $HOST $C_COMPILER
echo branch $BRANCH
case "$C_COMPILER" in
gcc) logname="test-$BRANCH-$HOST" ;;
*) logname="test-$BRANCH-$HOST-$C_COMPILER" ;;
esac
[ -d $tm_dir/logs ] || mkdir -p $tm_dir/logs ]
[ -d $tm_dir/logs/old ] || mkdir -p $tm_dir/logs/old ]
[ -d $tm_dir/logs/old2 ] || mkdir -p $tm_dir/logs/old2 ]
mv -f $tm_dir/logs/old/$logname.out $tm_dir/logs/old2 2>/dev/null
mv -f $tm_dir/logs/old/$logname.out.errs $tm_dir/logs/old2 2>/dev/null
mv -f $tm_dir/logs/old/$logname.test_errs $tm_dir/logs/old2 2>/dev/null
mv -f $tm_dir/logs/$logname.out $tm_dir/logs/old 2>/dev/null
mv -f $tm_dir/logs/$logname.out.errs $tm_dir/logs/old 2>/dev/null
mv -f $tm_dir/logs/$logname.test_errs $tm_dir/logs/old 2>/dev/null
logfile="$tm_dir/logs/$logname.out"
if
nice -5 sh $tmpscript \
$HOST $ARCH $FULLARCH $BRANCH $C_COMPILER $USE_MMC_MAKE \
> $logfile 2>&1
then
test_status="succeeded"
fgrep '**' $logfile > $logfile.errs
if [ -s $logfile.errs ]; then
echo "test passed (with some errors supressed/ignored)"
echo "log file summary in $logfile.errs"
else
rm -f $logfile.errs
echo "test passed"
fi
if [ -s $logfile.test_errs ]; then
test_status="FAILED"
echo "Error: test passed but $logfile.test_errs not empty"
else
rm -f $logfile.test_errs
fi
echo
INSTALL_DIR=`tail $logfile | \
awk '/^Installation directory:/ { print $3; }' `
cd $INSTALL_DIR/bin
ls -l mercury_compile
size mercury_compile
{
echo $FULLARCH $BRANCH $HOST $C_COMPILER
ls -l mercury_compile
size mercury_compile
echo
} >> $tm_dir/logs/sizes
else
test_status="FAILED"
fgrep '**' $logfile > $logfile.errs
echo test FAILED
echo log file in $logfile
echo log file summary in $logfile.errs
if [ -s $logfile.test_errs ]; then
echo test failure summary in $logfile.test_errs
fi
fi
if [ -s $logfile.errs -o -s $logfile.test_errs ]; then
if [ -s $logfile.errs ]; then
# Failures building the compiler or library should
# occur early in the log summary.
echo first 10 lines of log file summary:
head -10 $logfile.errs
echo
echo
fi
if [ -s $logfile.test_errs ]; then
echo first 100 test failures:
grep "FAILED TEST" $logfile.test_errs | head -100 -
fi
elif [ $test_status = "FAILED" ]; then
echo
echo last 20 lines of log file:
tail -20 $logfile
fi
# We can't just set a variable containing the mail subject string
# because sh (but not bash) executes compound commands with redirection
# in a sub-shell.
echo "test_mercury $test_status: $BRANCH $HOST $C_COMPILER" > $mail_subject
} > $tmpfile 2>&1
# NB we can't just pipe into `mutt' because the $mail_subject file
# needs to be written before `mutt' is started.
mutt -s "`cat $mail_subject`" juliensf@csse.unimelb.edu.au < $tmpfile
rm -f $tmpfile $tmpscript $mail_subject
#-----------------------------------------------------------------------------#