switch to sfa module
[build.git] / vbuild-nightly.sh
index 0fa9839..642fea8 100755 (executable)
@@ -17,6 +17,8 @@ DEFAULT_GPGPATH="/etc/planetlab"
 # default email to use in gpg secring
 DEFAULT_GPGUID="root@$( /bin/hostname )"
 
+DEFAULT_TESTCONFIG="default"
+
 # for publishing results, and the tests settings
 x=$(hostname)
 y=$(hostname|sed -e s,inria,,)
@@ -27,15 +29,12 @@ if [ "$x" != "$y" ] ; then
     # this is where the buildurl is pointing towards
     DEFAULT_WEBROOT="/build/"
     DEFAULT_TESTMASTER="testmaster.onelab.eu"
-    DEFAULT_TESTCONFIG="1default"
 else
     DEFAULT_WEBPATH="/build/@FCDISTRO@/@PLDISTRO@/"
     DEFAULT_TESTBUILDURL="http://build.planet-lab.org/"
     # this is where the buildurl is pointing towards
     DEFAULT_WEBROOT="/build/"
-    ### xxx change as appropriate
-    DEFAULT_TESTMASTER="p-testmaster.onelab.eu"
-    DEFAULT_TESTCONFIG="pdefault"
+    DEFAULT_TESTMASTER="manager.test.planet-lab.org"
 fi    
 
 ####################
@@ -53,7 +52,7 @@ function summary () {
 # read a full log and tries to extract the interesting stuff
 
 import sys,re
-m_show_line=re.compile(".* BEG (RPM|VSERVER).*|.*'boot'.*|\* .*|.*is not installed.*|.*PROPFIND.*|.*Starting.*:runtest.*")
+m_show_line=re.compile(".* BEG (RPM|VSERVER).*|.*'boot'.*|\* .*|.*is not installed.*|.*PROPFIND.*|.*Starting.*:run_log.*")
 m_installing_any=re.compile('\r  (Installing:[^\]]*]) ')
 m_installing_err=re.compile('\r  (Installing:[^\]]*])(..+)')
 m_installing_end=re.compile('Installed:.*')
@@ -201,12 +200,12 @@ function build () {
 
 # this was formerly run in the myplc-devel chroot but now is run in the root context,
 # this is so that the .ssh config gets done manually, and once and for all
-function runtest () {
+function run_log () {
     set -x
     set -e
     trap failure ERR INT
 
-    echo -n "============================== Starting $COMMAND:runtest on $(date)"
+    echo -n "============================== Starting $COMMAND:run_log on $(date)"
 
     # where to find TESTS_SVNPATH
     stamp=/vservers/$BASE/build/tests_svnpath
@@ -216,9 +215,7 @@ function runtest () {
        exit 1
     fi
     TESTS_SVNPATH=$(cat $stamp)
-    # xxx - Thierry - need to rework the test framework in tests/system so it can work
-    # with the entire tests/ module checked out, rather than only tests/system/ 
-    # ugly workaround for now
+    # don't need the tests fulltree anymore
     TESTS_SYSTEM_SVNPATH=${TESTS_SVNPATH}/system
 
     ### the URL to the RPMS/<arch> location
@@ -226,7 +223,9 @@ function runtest () {
     for a in i386 x86_64; do
        archdir=/vservers/$BASE/build/RPMS/$a
        if [ -d $archdir ] ; then
-           url=$(echo $archdir | sed -e "s,/vservers/$BASE/build,${TESTBUILDURL}${PLDISTRO}/${BASE},")
+           # where was that installed
+           url=$(echo $archdir | sed -e "s,/vservers/${BASE}/build,${WEBPATH}/${BASE},")
+           url=$(echo $url | sed -e "s,${WEBROOT},${TESTBUILDURL},")
            break
        fi
     done
@@ -245,8 +244,8 @@ function runtest () {
     ssh -n ${testmaster_ssh} rm -rf ${testdir}
     # check it out 
     ssh -n ${testmaster_ssh} svn co ${TESTS_SYSTEM_SVNPATH} ${testdir}
-    # check out the entire tests/ module (with system/ duplicated) as a subdir - see xxx above
-    ssh -n ${testmaster_ssh} svn co ${TESTS_SVNPATH} ${testdir}/tests
+###    # check out the entire tests/ module (with system/ duplicated) as a subdir - see fulltree above
+###    ssh -n ${testmaster_ssh} svn co ${TESTS_SVNPATH} ${testdir}/tests
     # invoke test on testbox - pass url and build url - so the tests can use vtest-init-vserver.sh
     configs=""
     for config in ${TESTCONFIG} ; do
@@ -256,7 +255,7 @@ function runtest () {
 
     # need to proceed despite of set -e
     success=true
-    ssh 2>&1 -n ${testmaster_ssh} ${testdir}/runtest --build ${build_SVNPATH} --url ${url} $configs $test_env --all || success=
+    ssh 2>&1 -n ${testmaster_ssh} ${testdir}/run_log --build ${build_SVNPATH} --url ${url} $configs $test_env --verbose --all || success=
 
     # gather logs in the vserver
     mkdir -p /vservers/$BASE/build/testlogs
@@ -269,7 +268,7 @@ function runtest () {
        failure
     fi
     
-    echo -n "============================== End $COMMAND:runtest on $(date)"
+    echo -n "============================== End $COMMAND:run_log on $(date)"
 }
 
 function in_root_context () {
@@ -352,6 +351,24 @@ function show_env () {
     set -x
 }
 
+function setupssh () {
+    base=$1; shift
+    sshkey=$1; shift
+    
+    if [ -f ${sshkey} ] ; then
+       SSHDIR=/vservers/${base}/root/.ssh
+       mkdir -p ${SSHDIR}
+       cp $sshkey ${SSHDIR}/thekey
+       (echo "host *"; \
+           echo "  IdentityFile ~/.ssh/thekey"; \
+           echo "  StrictHostKeyChecking no" ) > ${SSHDIR}/config
+       chmod 700 ${SSHDIR}
+       chmod 400 ${SSHDIR}/*
+    else 
+       echo "WARNING : could not find provided ssh key $sshkey - ignored"
+    fi
+}
+
 function usage () {
     echo "Usage: $COMMAND [option] [var=value...] make-targets"
     echo "This is $REVISION"
@@ -371,14 +388,16 @@ function usage () {
     echo " -W testbuildurl - defaults to $DEFAULT_TESTBUILDURL"
     echo " -r webroot - defaults to $DEFAULT_WEBROOT - the fs point where testbuildurl actually sits"
     echo " -M testmaster - defaults to $DEFAULT_TESTMASTER"
-    echo " -y sign yum repo in webpath"
-    echo " -g path to gpg secring used to sign rpms.  Defaults to $DEFAULT_GPGPATH" 
-    echo " -u gpg email used in secring. Defaults to $DEFAULT_GPGUID"
-    echo " -B : run build only"
-    echo " -T : run test only"
-    echo " -n dry-run : -n passed to make - vserver gets created though - no mail sent"
-    echo " -v : be verbose"
-    echo " -7 : uses weekday-@FCDISTRO@ as base"
+    echo " -y - sign yum repo in webpath"
+    echo " -g gpg_path - to the gpg secring used to sign rpms.  Defaults to $DEFAULT_GPGPATH" 
+    echo " -u gpg_uid - email used in secring. Defaults to $DEFAULT_GPGUID"
+    echo " -K svnsshkey - specify key to use when svn+ssh:// URLs are used for SVNPATH"
+    echo " -S - do not publish source rpms"
+    echo " -B - run build only"
+    echo " -T - run test only"
+    echo " -n - dry-run: -n passed to make - vserver gets created though - no mail sent"
+    echo " -v - be verbose"
+    echo " -7 - uses weekday-@FCDISTRO@ as base"
     echo " -i ifname - defaults to $DEFAULT_IFNAME - used to determine local IP"
     exit 1
 }
@@ -393,8 +412,10 @@ function main () {
     DRY_RUN=
     DO_BUILD=true
     DO_TEST=true
+    PUBLISH_SRPMS=true
+    SSH_KEY=""
     SIGNYUMREPO=""
-    while getopts "f:d:p:m:s:t:b:o:c:w:W:r:M:yg:u:BTnv7i:" opt ; do
+    while getopts "f:d:p:m:s:t:b:o:c:w:W:r:M:yg:u:K:SBTnv7i:" opt ; do
        case $opt in
            f) FCDISTRO=$OPTARG ;;
            d) PLDISTRO=$OPTARG ;;
@@ -412,6 +433,8 @@ function main () {
             y) SIGNYUMREPO=true ;;
             g) GPGPATH=$OPTARG ;;
             u) GPGUID=$OPTARG ;;
+           K) SSH_KEY=$OPTARG ;;
+           S) PUBLISH_SRPMS="" ;;
            B) DO_TEST= ;;
            T) DO_BUILD= ;;
            n) DRY_RUN="-n" ;;
@@ -506,6 +529,7 @@ function main () {
            # start in case e.g. we just rebooted
            vserver ${BASE} start || :
            # update build
+           [ -n "$SSH_KEY" ] && setupssh ${BASE} ${SSH_KEY}
            vserver ${BASE} exec svn update /build
            # get environment from the first run 
            FCDISTRO=$(vserver ${BASE} exec /build/getdistroname.sh)
@@ -551,8 +575,10 @@ function main () {
            cd -
            rm -rf $tmpdir
            # Extract build again - in the vserver
+           [ -n "$SSH_KEY" ] && setupssh ${BASE} ${SSH_KEY}
            vserver ${BASE} exec svn checkout ${build_SVNPATH} /build
        fi
+       # install ssh key in vserver
        echo "XXXXXXXXXX $COMMAND: preparation of vserver $BASE done" $(date)
 
        # The log inside the vserver contains everything
@@ -579,6 +605,7 @@ function main () {
     
        if [ -n "$DO_BUILD" ] ; then 
 
+           # invoke this command into the build directory of the vserver
            cp $COMMANDPATH /vservers/${BASE}/build/
 
            # invoke this command in the vserver for building (-T)
@@ -586,12 +613,13 @@ function main () {
            vserver ${BASE} exec /build/$COMMAND "${options[@]}" -b "${BASE}" "${MAKEVARS[@]}" "${MAKETARGETS[@]}"
        fi
 
-       # publish to the web so runtest can find them
+       # publish to the web so run_log can find them
        rm -rf $WEBPATH/$BASE ; mkdir -p $WEBPATH/$BASE/{RPMS,SRPMS}
        rsync --archive --delete --verbose /vservers/$BASE/build/RPMS/ $WEBPATH/$BASE/RPMS/
-       rsync --archive --delete --verbose /vservers/$BASE/build/SRPMS/ $WEBPATH/$BASE/SRPMS/
-       # publish myplc-release
-       rsync --verbose /vservers/$BASE/build/myplc-release $WEBPATH/$BASE
+       [[ -n "$PUBLISH_SRPMS" ]] && rsync --archive --delete --verbose /vservers/$BASE/build/SRPMS/ $WEBPATH/$BASE/SRPMS/
+       # publish myplc-release if this exists
+       release=/vservers/$BASE/build/myplc-release
+       [ -f $release ] && rsync --verbose $release $WEBPATH/$BASE
 
         # create yum repo and sign packages.
        if [ -n "$SIGNYUMREPO" ] ; then
@@ -599,7 +627,7 @@ function main () {
        fi
 
        if [ -n "$DO_TEST" ] ; then 
-           runtest
+           run_log
        fi
 
        success