reviewed options:
[build.git] / vbuild-nightly.sh
index 43a7d7f..74f8c7b 100755 (executable)
@@ -10,10 +10,9 @@ DEFAULT_PLDISTRO=planetlab
 DEFAULT_BASE="@DATE@--@PLDISTRO@-@FCDISTRO@"
 DEFAULT_SVNPATH="http://svn.planet-lab.org/svn/build/trunk"
 
-DEFAULT_MAILTO_onelab="onelab-build@one-lab.org"
-# tmp - send all mails to onelab
-#DEFAULT_MAILTO_planetlab="devel@planet-lab.org"
-DEFAULT_MAILTO_planetlab=$DEFAULT_MAILTO_onelab
+# NOTE: do not think we want to put email addresses into scripts
+# that can be harvested by spambots. --mef
+DEFAULT_MAILTO="onelab-build@one-lab.org"
 
 # web publishing results
 DEFAULT_WEBPATH="/build/@PLDISTRO@/"
@@ -26,26 +25,41 @@ TESTSVNPATH="http://svn.planet-lab.org/svn/tests/trunk/system/"
 TESTSCRIPT=TestMain.py
 ####################
 # assuming vserver runs in UTC
-DATE=$(date -u +'%Y.%m.%d')
+DATE=$(date +'%Y.%m.%d')
+
+# temporary - wrap a quick summary of suspicious stuff
+# this is to focus on installation that go wrong
+# use with care, a *lot* of other things can go bad as well
+function summary () {
+    from=$1; shift
+    echo "******************** BEG SUMMARY" 
+    tr -d '\r' < $from | egrep 'BEG RPM|not installed|Installing:.*([eE]rror|[wW]arning)' 
+    echo "******************** END SUMMARY" 
+}
+
 
 # Notify recipient of failure or success, manage various stamps 
 function failure() {
     set -x
+    WEBLOG=${WEBPATH}/${BASE}.log.txt
+    cp $LOG ${WEBLOG}
+    summary $LOG >> ${WEBLOG}
+    (echo -n "============================== $COMMAND: failure at " ; date ; tail -c 20k $WEBLOG) > ${WEBLOG}.ko
     if [ -n "$MAILTO" ] ; then
-       tail -c 8k $LOG | mail -s "Failures for build ${BASE}" $MAILTO
+       tail -c 20k ${WEBPATH}/${BASE}.log.txt | mail -s "Failures for build ${BASE}" $MAILTO
     fi
-    cp $LOG ${WEBPATH}/${BASE}.log.txt
-    (echo -n "============================== $COMMAND: failure at" ; date ; tail -c 20k $LOG) > ${WEBPATH}/${BASE}.bko.txt
     exit 1
 }
 
 function success () {
     set -x
+    WEBLOG=${WEBPATH}/${BASE}.log.txt
+    cp $LOG ${WEBLOG}
+    summary $LOG >> ${WEBLOG}
+    touch ${WEBLOG}.ok
     if [ -n "$MAILTO" ] ; then
-       (echo "http://build.one-lab.org/$PLDISTRO/$BASE" ; echo "Completed on $(date)" ) | mail -s "Successfull build for ${BASE}" $MAILTO
+       (echo "$PLDISTRO ($BASE) build for $FCDISTRO completed on $(date)" ) | mail -s "Successfull build for ${BASE}" $MAILTO
     fi
-    cp $LOG ${WEBPATH}/${BASE}.log.txt
-    touch ${WEBPATH}/${BASE}.bok.txt
     exit 0
 }
 
@@ -216,11 +230,12 @@ function main () {
     [ -z "$BASE" ] && BASE="$DEFAULT_BASE"
     [ -z "$WEBPATH" ] && WEBPATH="$DEFAULT_WEBPATH"
     [ -z "$SVNPATH" ] && SVNPATH="$DEFAULT_SVNPATH"
-    # 
+
+    # NOTE: suggest that by default no email is sent and that the user
+    # should explicitly invoke this script with the -m arg to pass in
+    # the appropriate email address. --mef
     if [ "$PLDISTRO" = "onelab" ] ; then
-       [ -z "$MAILTO" ] && MAILTO="$DEFAULT_MAILTO_onelab"
-    else
-       [ -z "$MAILTO" ] && MAILTO="$DEFAULT_MAILTO_planetlab"
+       [ -z "$MAILTO" ] && MAILTO="$DEFAULT_MAILTO"
     fi
     [ -n "$DRY_RUN" ] && MAILTO=""
        
@@ -295,9 +310,9 @@ function main () {
 
        # The log inside the vserver contains everything
        LOG2=/vservers/${BASE}/log.txt
-       (echo "==================== Transcript of vserver creation -- BEG $(date)" ; \
+       (echo "==================== BEG VSERVER Transcript of vserver creation" ; \
         cat $LOG ; \
-        echo "==================== Transcript of vserver creation -- END $(date)" ; \
+        echo "==================== END VSERVER Transcript of vserver creation" ; \
         echo "xxxxxxxxxx Messing with logs, symlinking $LOG2 to $LOG" ) >> $LOG2
        ### not too nice : nuke the former log, symlink it to the new one
        rm $LOG; ln -s $LOG2 $LOG
@@ -310,6 +325,7 @@ function main () {
            cp $COMMANDPATH /vservers/${BASE}/build/
 
            # invoke this command in the vserver for building (-T)
+           vserver ${BASE} exec chmod +x /build/$COMMAND
            vserver ${BASE} exec /build/$COMMAND "${argv[@]}" -b "${BASE}"
        fi