rename -t into -T
[infrastructure.git] / scripts / nightly-build.sh
index ad83146..b1944ae 100755 (executable)
@@ -8,11 +8,15 @@ ROOT=/build
 CHROOTBINDIR=/root/bin
 
 # default values, tunable with command-line options
-CVSROOT=":pserver:anon@cvs.planet-lab.org:/cvs"
+SVNPATH="svn+ssh://build@svn.one-lab.org/svn/build/trunk"
 DISTRO=onelab
 MAILTO="onelab-build@one-lab.org"
 TAGSFILE=onelab-tags.mk
 
+TESTBUILDURL="http://onelab-build.inria.fr/"
+TESTBOX=onelab-test.inria.fr
+TESTSCRIPT=plctest/TestMain.py
+
 ####################
 # plc chroot runs in UTC
 DATE=$(date -u +'%Y.%m.%d')
@@ -26,6 +30,7 @@ EOF
 
 # Notify recipient of failure
 function failure() {
+  touch ${BUILD}.broken
   if [ -n "$MAILTO" ] ; then
     tail -c 8k ${BUILD}/log-build.txt | mail -s "Failures for ${BUILD}" $MAILTO
   fi
@@ -33,9 +38,9 @@ function failure() {
 }
 
 function success () {
-  touch ${BUILD}/log-success.stamp
+  touch ${BUILD}.ok
   if [ -n "$MAILTO" ] ; then
-    date | mail -s "Successfull build in ${BUILD}" $MAILTO
+    (echo "http://build.one-lab.org/$DISTRO/$BASE" ; echo "Completed on $(date)" ) | mail -s "Successfull build in ${BUILD}" $MAILTO
   fi
   exit 0
 }
@@ -69,54 +74,69 @@ function build () {
   date
 
   cd $ROOT
-  cvs -d $CVSROOT co -d $BASE build
+  svn co $SVNPATH $BASE
 
   # if TAGSTAG specified : update TAGSFILE with this tag
   if [ -n "$TAGSTAG" ] ; then
     cd $BASE
-    cvs up -r $TAGSTAG $TAGSFILE
+    svn up -r $TAGSTAG $TAGSFILE
     cd -
   fi
 
   show_env
     
   echo "Running make IN build $(pwd)"
+  make stage1=true ${MAKEOPTS[@]} TAGSFILE=${TAGSFILE} PLDISTRO=${DISTRO} ${MAKEVARS[@]} -C $BASE $MAKETARGETS
   make ${MAKEOPTS[@]} TAGSFILE=${TAGSFILE} PLDISTRO=${DISTRO} ${MAKEVARS[@]} -C $BASE $MAKETARGETS
 
   # only if successful
   rm -f latest
   ln -s $BASE latest
 
-  success
+}
+
+function runtest () {
+  set -x
+  build=$1; shift
+  buildname=$(basename $build)
+  distroname=$(basename $(dirname $build))
+  cd build
+  rpm=$(find . -name myplc\*.rpm )
+  url=${TESTBUILDURL}${distroname}/${buildname}/${rpm}
+  ssh root@${TESTBOX} ${TESTSCRIPT} ${url}
+  return $?
 }
 
 function show_env () {
   echo ROOT=$ROOT
-  echo BASE=$BASE
   echo DISTRO=$DISTRO
+  echo BASE=$BASE
+  echo SVNPATH=$SVNPATH
   echo MAKEVARS="${MAKEVARS[@]}"
   echo MAKEOPTS="${MAKEOPTS[@]}"
-  echo TAGSFILE=$TAGSFILE
-  echo "XXXXXXXXXXXXXXXXXXXX Contents of $TAGSFILE"
+  echo TAGSFILE="$TAGSFILE"
+  echo TAGSTAG="$TAGSTAG"
+  echo "XXXXXXXXXXXXXXXXXXXX Contents of tags definition file $TAGSFILE"
   cat $BASE/$TAGSFILE
-  echo "XXXXXXXXXXXXXXXXXXXX end contents"
+  echo "XXXXXXXXXXXXXXXXXXXX end tags definition"
 }
 
 function usage () {
   echo "Usage: $COMMAND [option] make-targets"
   echo "This is revision $REVISION"
   echo "Supported options"
-  echo " -v verbose"
-  echo " -b BASE - may include %d then is replaced with current date"
+  echo " -b BASE - may include @, then replaced with current date"
   echo " -u : uses directory given as BASE as is, even if already exists"
   echo " -e : exits (does nothing) if BASE already exists"
-  echo " -c CVSROOT"
   echo " -d DISTRO"
   echo " -t TAGSFILE"
   echo " -r TAGSTAG - a tag that refers to TAGSFILE - defaults to HEAD"
-  echo " -m MAILTO"
   echo " -s MAKEVAR=value - spaces in value are not supported"
   echo " -n passed to make"
+  echo " -v verbose"
+  echo " -m MAILTO"
+  echo " -s SVNPATH"
+  echo " -T : run test only"
   exit 1
 }
 
@@ -127,34 +147,34 @@ function main () {
   else
     MAKEVARS=()
     MAKEOPTS=()
-    while getopts "vc:t:r:m:d:b:s:uenh" opt ; do
+    while getopts "b:ued:t:r:B:s:nvm:s:Th" opt ; do
       case $opt in
-       v) set -x ;;
-       c) CVSROOT=$OPTARG ;;
-        t) TAGSFILE=$OPTARG ;;
-       r) TAGSTAG=$OPTARG ;;
-        m) MAILTO=$OPTARG ;;
-        d) DISTRO=$OPTARG ;;
         b) BASE=$OPTARG ;;
         u) USEOLD=true ;;
        e) EXITIFOLD=true ;;
+        d) DISTRO=$OPTARG ;;
+        t) TAGSFILE=$OPTARG ;;
+       r) TAGSTAG=$OPTARG ;;
         s) MAKEVARS=(${MAKEVARS[@]} $OPTARG) ;;
        n) MAILTO="" ; MAKEOPTS=(${MAKEOPTS[@]} -n) ;;
+       v) set -x ;;
+        m) MAILTO=$OPTARG ;;
+       s) SVNPATH=$OPTARG ;;
+        T) TESTONLY=true ; USEOLD=true ;;
         h|*) usage ;;
       esac
     done
 
-    ROOT=$ROOT/$DISTRO
-
     shift $(($OPTIND - 1))
     
+    ROOT=$ROOT/$DISTRO
+    cd $ROOT
+
     MAKETARGETS="$@"
 
-    cd $ROOT
     ### set BASE from DISTRO, if unspecified
     [ -z "$BASE" ] && BASE=${DISTRO}
-
-    BASE=$(echo ${BASE} | sed -e "s,%d,${DATE},g")
+    BASE=$(echo ${BASE} | sed -e "s,@,${DATE},g")
 
     if [ -n "$EXITIFOLD" -a -d "$BASE" ] ; then
       echo "$COMMAND: -e : exits on existing base directory $BASE"
@@ -170,7 +190,14 @@ function main () {
     fi
     BUILD=$ROOT/$BASE
     
-    build >> ${BUILD}/log-build.txt 2>&1
+    if [ -z "$TESTONLY" ] ; then 
+      build >> ${BUILD}/log-build.txt 2>&1
+    fi
+
+    runtest ${BUILD} >> ${BUILD}/log-build.txt 2>&1
+
+    success
+
   fi
 }