X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=vbuild-nightly.sh;h=642fea8efc7c443fe0bc619b2bfb436e3e7bde6d;hb=7a470ae059026f668495847c2da9be410cf1ca07;hp=984f9e7cbeaeda067cc31f34c10498b9a9ecb5a6;hpb=91cf48e10ced142d42e5f5aebbf08ee7ee46f58c;p=build.git diff --git a/vbuild-nightly.sh b/vbuild-nightly.sh index 984f9e7c..642fea8e 100755 --- a/vbuild-nightly.sh +++ b/vbuild-nightly.sh @@ -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/ 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: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