#!/bin/sh ## Script to build and test the latest python from svn. It basically ## does this: ## svn up ; ./configure ; make ; make test ; make install ; cd Doc ; make ## ## Logs are kept and rsync'ed to the host. If there are test failure(s), ## information about the failure(s) is mailed. ## ## This script is run on the PSF's machine as user neal via crontab. ## ## Yes, this script would probably be easier in python, but then ## there's a bootstrap problem. What if Python doesn't build? ## ## This script should be fairly clean Bourne shell, ie not too many ## bash-isms. We should try to keep it portable to other Unixes. ## Even though it will probably only run on Linux. I'm sure there are ## several GNU-isms currently (date +%s and readlink). ## ## Perhaps this script should be broken up into 2 (or more) components. ## Building doc is orthogonal to the rest of the python build/test. ## ## FIXME: we should detect test hangs (eg, if they take more than 45 minutes) ## FIXME: we should run valgrind ## FIXME: we should run code coverage ## Utilities invoked in this script include: ## basename, date, dirname, expr, grep, readlink, uname ## cksum, make, mutt, rsync, svn ## remember where did we started from DIR=`dirname $0` if [ "$DIR" = "" ]; then DIR="." fi ## make directory absolute DIR=`readlink -f $DIR` FULLPATHNAME="$DIR/`basename $0`" ## we want Misc/.. DIR=`dirname $DIR` ## Configurable options FAILURE_SUBJECT="Python Regression Test Failures" FAILURE_MAILTO="python-checkins@python.org" FAILURE_CC="nnorwitz@gmail.com" REMOTE_SYSTEM="neal@dinsdale.python.org" REMOTE_DIR="/data/ftp.python.org/pub/docs.python.org/dev/2.4" RESULT_FILE="$DIR/build/index.html" INSTALL_DIR="/tmp/python-test-2.4/local" RSYNC_OPTS="-aC -e ssh" REFLOG="build/reflog.txt.out" # Change this flag to "yes" for old releases to just update/build the docs. BUILD_DISABLED="yes" ## utility functions current_time() { date +%s } update_status() { now=`current_time` time=`expr $now - $3` echo "
  • $1 ($time seconds)
  • " >> $RESULT_FILE } mail_on_failure() { if [ "$NUM_FAILURES" != "0" ]; then mutt -s "$FAILURE_SUBJECT $1 ($NUM_FAILURES)" $FAILURE_MAILTO -c $FAILURE_CC < $2 fi } ## setup cd $DIR mkdir -p build rm -f $RESULT_FILE build/*.out rm -rf $INSTALL_DIR ## create results file TITLE="Automated Python Build Results" echo "" >> $RESULT_FILE echo " " >> $RESULT_FILE echo " $TITLE" >> $RESULT_FILE echo " " >> $RESULT_FILE echo " " >> $RESULT_FILE echo "" >> $RESULT_FILE echo "

    Automated Python Build Results

    " >> $RESULT_FILE echo "" >> $RESULT_FILE echo " " >> $RESULT_FILE echo " " >> $RESULT_FILE echo " " >> $RESULT_FILE echo " " >> $RESULT_FILE echo " " >> $RESULT_FILE echo " " >> $RESULT_FILE echo " " >> $RESULT_FILE echo "
    Built on:`date`
    Hostname:`uname -n`
    Platform:`uname -srmpo`
    " >> $RESULT_FILE echo "" >> $RESULT_FILE echo "" >> $RESULT_FILE echo "" >> $RESULT_FILE ## copy results rsync $RSYNC_OPTS html/* $REMOTE_SYSTEM:$REMOTE_DIR cd ../build rsync $RSYNC_OPTS index.html *.out $REMOTE_SYSTEM:$REMOTE_DIR/results/