From 461aa5bbfcb3ce912e4873dc42db69bb72e92b35 Mon Sep 17 00:00:00 2001 From: Neal Norwitz Date: Mon, 2 Jan 2006 20:07:16 +0000 Subject: Script to automatically build and test python and doc. The results are copied up to docs.python.org/dev Needs lots more work. Feel free to add code, fixes, or FIXME comments. --- Misc/build.sh | 192 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100755 Misc/build.sh diff --git a/Misc/build.sh b/Misc/build.sh new file mode 100755 index 0000000..af6824b --- /dev/null +++ b/Misc/build.sh @@ -0,0 +1,192 @@ +#!/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: +## date, dirname, expr, grep, readlink, uname +## cksum, make, mutt, rsync, svn + +## need to get svn from ~/local/bin +PATH=$PATH:$HOME/local/bin + +## remember where did we started from +DIR=`dirname $0` +if [ "$DIR" = "" ]; then + DIR="." +fi + +## make directory absolute +DIR=`readlink -f $DIR` +FULLPATHNAME="$DIR/$0" +## we want Misc/.. +DIR=`dirname $DIR` + +## Configurable options + +FAILURE_SUBJECT="Python Regression Test Failures" +#FAILURE_MAILTO="python-checkins@python.org" +#FAILURE_MAILTO="YOUR_ACCOUNT@gmail.com" +FAILURE_MAILTO="nnorwitz@gmail.com" + +REMOTE_SYSTEM="neal@dinsdale.python.org" +REMOTE_DIR="/data/ftp.python.org/pub/docs.python.org/dev/" +RESULT_FILE="$DIR/build/index.html" +INSTALL_DIR="/tmp/python-test/local" +RSYNC_OPTS="-aC -e ssh" + +REFLOG="build/reflog.txt.out" + +## 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 < $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 "$TITLE" >> $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/ + -- cgit v0.12