From 3594361f6f3a3b3383b82a807523854279fd69fa Mon Sep 17 00:00:00 2001 From: thierry Date: Mon, 12 Nov 2007 23:29:29 +0000 Subject: [PATCH 1/1] moving to build - replace scripts with a stub for svn extraction and invokation --- scripts/nightly-build-vserver.sh | 327 ------------------------------- 1 file changed, 327 deletions(-) delete mode 100755 scripts/nightly-build-vserver.sh diff --git a/scripts/nightly-build-vserver.sh b/scripts/nightly-build-vserver.sh deleted file mode 100755 index 6558acf..0000000 --- a/scripts/nightly-build-vserver.sh +++ /dev/null @@ -1,327 +0,0 @@ -#!/bin/bash -REVISION=$(echo '$Revision$' | sed -e 's,\$,,g' -e 's,^\w*:\s,,' ) - -COMMANDPATH=$0 -COMMAND=$(basename $0) - -# default values, tunable with command-line options -DEFAULT_FCDISTRO=fc6 -DEFAULT_PLDISTRO=onelab -DEFAULT_BASE="@--=-%" -DEFAULT_SVNPATH="http://svn.one-lab.org/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 - -# web publishing results -WEBPATH=/build/@PLDISTRO@/@BASE@ - -# for the test part -TESTBUILDURL="http://build.one-lab.org/" -TESTBOX=onelab-test.inria.fr -TESTBOXSSH=root@onelab-test.inria.fr -TESTSVNPATH="http://svn.one-lab.org/new_plc_api/trunk/plctest" -TESTSCRIPT=TestMain.py -#################### -# assuming vserver runs in UTC -DATE=$(date -u +'%Y.%m.%d') - -# Notify recipient of failure or success, manage various stamps -function failure() { - set -x - (echo -n "============================== $COMMAND: failure at" ; date ; tail -c 20k $LOG) >> $(dirname $LOG)/build-broken.txt - if [ -n "$MAILTO" ] ; then - tail -c 8k $LOG | mail -s "Failures for ${BASE}" $MAILTO - fi - exit 1 -} - -function success () { - set -x - touch $(dirname $LOG)/build-ok.txt - if [ -n "$MAILTO" ] ; then - (echo "http://build.one-lab.org/$PLDISTRO/$BASE" ; echo "Completed on $(date)" ) | mail -s "Successfull build for ${BASE}" $MAILTO - fi - exit 0 -} - -function build () { - set -x - set -e - trap failure ERR INT - - echo -n "============================== Starting $COMMAND:build on " - date - - cd / -# svn checkout $SVNPATH $BASE - - # if TAGSRELEASE specified : update PLDISTROTAGS with this tag - if [ -n "$TAGSRELEASE" ] ; then - cd build - svn up -r $TAGSRELEASE $PLDISTROTAGS - cd - > /dev/null - fi - - show_env - - echo "Running make IN $(pwd)" - make stage1=true "${MAKEOPTS[@]}" PLDISTROTAGS=${PLDISTROTAGS} PLDISTRO=${PLDISTRO} "${MAKEVARS[@]}" -C /build - # in case we use an older build - set +e - make "${MAKEOPTS[@]}" PLDISTROTAGS=${PLDISTROTAGS} PLDISTRO=${PLDISTRO} "${MAKEVARS[@]}" -C /build versions - set -e - make "${MAKEOPTS[@]}" PLDISTROTAGS=${PLDISTROTAGS} PLDISTRO=${PLDISTRO} "${MAKEVARS[@]}" -C /build $MAKETARGETS - - # restore silent mode - otherwise cron gets it - set +x -} - -# 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 () { - set -x - set -e - trap failure ERR INT - - echo -n "============================== Starting $COMMAND:runtest on " - date - - ### the URL to the myplc package - cd /vservers/$BASE/build/RPMS/i386 - rpm=$(ls myplc-[0-9]*.rpm) - if [ ${#rpm[@]} != 1 ] ; then - echo "$COMMAND: Cannot locate rpm for testing" - exit 1 - fi - url=${TESTBUILDURL}${PLDISTRO}/${BASE}/${rpm} - - # find the place where the plctest material was checked out - cd /vservers/$BASE/build/CODEBASES/PLCAPI - if [ ! -d plctest/ ] ; then - echo "$COMMAND : Cannot not locate plctest/ - exiting" - exit 1 - fi - # compute test directory name on test box - testdir=plctest-${BASE} - # rsync/push test material onto the test box - ssh ${TESTBOXSSH} mkdir -p ${testdir} - rsync -a -v plctest/ ${TESTBOXSSH}:${testdir} - # invoke test on testbox - ssh ${TESTBOXSSH} python -u ${testdir}/${TESTSCRIPT} ${url} - #invoke make install from build to the testbox - # looks suspicious : we'd need this *during* myplc run, not at the end - # in addition we are not in the vserver here so running make can have weird effects - # make install PLCHOST=${TESTBOX} - - if [ "$?" != 0 ] ; then - failure - fi - - set +x -} - -function show_env () { -# echo ROOT=$ROOT - echo FCDISTRO=$FCDISTRO - echo PLDISTRO=$PLDISTRO - echo BASE=$BASE - echo SVNPATH=$SVNPATH - echo MAKEVARS="${MAKEVARS[@]}" - echo MAKEOPTS="${MAKEOPTS[@]}" - echo PLDISTROTAGS="$PLDISTROTAGS" - echo TAGSRELEASE="$TAGSRELEASE" - if [ -f /build/$PLDISTROTAGS ] ; then - echo "XXXXXXXXXXXXXXXXXXXX Contents of tags definition file $PLDISTROTAGS" - cat /build/$PLDISTROTAGS - else - echo "no tags definition - normal if outside of the vserver" - fi - echo "XXXXXXXXXXXXXXXXXXXX end tags definition" -} - -function usage () { - echo "Usage: $COMMAND [option] make-targets" - echo "This is $REVISION" - echo "Supported options" - echo " -n dry-run : -n passed to make - vserver gets created though - no mail sent" - echo " -f FCDISTRO - defaults to $DEFAULT_FCDISTRO" - echo " -d PLDISTRO - defaults to $DEFAULT_PLDISTRO" - echo " -b BASE - defaults to $DEFAULT_BASE" - echo " may include @ (replaced with date), % (fcdistro) or = (pldistro)" - echo " -t PLDISTROTAGS - defaults to \${PLDISTRO}-tags.mk" - echo " -r TAGSRELEASE - a release number that refers to PLDISTROTAGS - defaults to HEAD" - echo " -s SVNPATH - where to fetch the build module" - echo " -o : overwrite - re-run in base directory, do not create vserver" - echo " -m MAILTO" - echo " -a MAKEVAR=value - space in values are not supported" - echo " -B : run build only" - echo " -T : run test only" - exit 1 -} - -function main () { - - set -e - - # preserve arguments for passing them again later - declare -a argv - for arg in "$@"; do argv=(${argv[@]} "$arg") ; done - - # parse arguments - MAKEVARS=() - MAKEOPTS=() - DO_BUILD=true - DO_TEST=true - while getopts "nf:d:b:t:r:s:om:a:BTh" opt ; do - case $opt in - n) DRY_RUN="true" ; MAKEOPTS=(${MAKEOPTS[@]} -n) ;; - f) FCDISTRO=$OPTARG ;; - d) PLDISTRO=$OPTARG ;; - b) BASE=$OPTARG ;; - t) PLDISTROTAGS=$OPTARG ;; - r) TAGSRELEASE=$OPTARG ;; - s) SVNPATH=$OPTARG ;; - o) USEOLD=true ;; - m) MAILTO=$OPTARG ;; - a) MAKEVARS=(${MAKEVARS[@]} "$OPTARG") ;; - B) DO_TEST= ;; - T) DO_BUILD= ; USEOLD=true ;; - h|*) usage ;; - esac - done - - shift $(($OPTIND - 1)) - MAKETARGETS="$@" - - # set defaults - [ -z "$FCDISTRO" ] && FCDISTRO=$DEFAULT_FCDISTRO - [ -z "$PLDISTRO" ] && PLDISTRO=$DEFAULT_PLDISTRO - [ -z "$PLDISTROTAGS" ] && PLDISTROTAGS="${PLDISTRO}-tags.mk" - [ -z "$BASE" ] && BASE="$DEFAULT_BASE" - [ -z "$SVNPATH" ] && SVNPATH="$DEFAULT_SVNPATH" - # - if [ "$PLDISTRO" = "onelab" ] ; then - [ -z "$MAILTO" ] && MAILTO="$DEFAULT_MAILTO_onelab" - else - [ -z "$MAILTO" ] && MAILTO="$DEFAULT_MAILTO_planetlab" - fi - [ -n "$DRY_RUN" ] && MAILTO="" - - ### set BASE from DISTRO, if unspecified - BASE=$(echo ${BASE} | sed -e "s,@,${DATE},g" -e "s,%,${FCDISTRO},g" -e "s,=,${PLDISTRO},g") - - if [ -d /vservers ] ; then - # we run in the root context : - # (*) create or check for the vserver to use - # (*) copy this command in the vserver - # (*) invoke it - - if [ -n "$USEOLD" ] ; then - ### Re-use a vserver (finish an unfinished build..) - if [ ! -d /vservers/${BASE} ] ; then - echo $COMMAND : cannot find vserver $BASE - exit 1 - fi - # manage LOG - LOG=/vservers/${BASE}-log.txt - exec > $LOG 2>&1 - echo "XXXXXXXXXX $COMMAND: using existing vserver $BASE" $(date) - show_env - # update build - vserver ${BASE} exec svn update /build - else - # create vserver: check it does not exist yet - i= - while [ -d /vservers/${BASE}${i} ] ; do - # we name subsequent builds -n so the logs and builds get sorted properly - [ -z ${i} ] && BASE=${BASE}-n - i=$((${i}+1)) - if [ $i -gt 100 ] ; then - echo "$COMMAND: Failed to create build vserver /vservers/${BASE}${i}" - exit 1 - fi - done - BASE=${BASE}${i} - # manage LOG - LOG=/vservers/${BASE}-log.txt - exec > $LOG 2>&1 - echo "XXXXXXXXXX $COMMAND: creating vserver $BASE" $(date) - show_env - - ### extract vbuild-init-vserver.sh and run it - svn cat $SVNPATH/vbuild-init-vserver.sh > /tmp/vbuild-$$.sh - # get -devel.lst - set +e - svn cat $SVNPATH/${PLDISTRO}-devel-${FCDISTRO}.lst > /tmp/vbuild-devel-$$.lst - if [ "$?" = 0 ] ; then - mv /tmp/vbuild-devel-$$.lst /tmp/${PLDISTRO}-devel-${FCDISTRO}.lst - else - svn cat $SVNPATH/${PLDISTRO}-devel.lst > /tmp/vbuild-devel-$$.lst - if [ "$?" = 0 ] ; then - mv /tmp/vbuild-devel-$$.lst /tmp/${PLDISTRO}-devel.lst - else - echo "$COMMAND: Cannot locate ${PLDISTRO}-devel.lst" - failure - fi - fi - set -e - - # Create vserver - cd /tmp - chmod +x vbuild-$$.sh - /tmp/vbuild-$$.sh ${BASE} ${FCDISTRO} ${PLDISTRO} - # cleanup - rm -f /tmp/vbuild-$$* - cd - - # Extract build - vserver ${BASE} exec svn checkout ${SVNPATH} /build - fi - # The log inside the vserver contains everything - LOG2=/vservers/${BASE}/build/build-log.txt - (echo "==================== Transcript of vserver creation" ; cat $LOG ; echo "==================== End of vserver creation") >> $LOG2 - echo "==================== See next stages in $LOG2" >> $LOG - # redirect log again - exec >> $LOG2 2>&1 - LOG=$LOG2 - - echo "XXXXXXXXXX $COMMAND: preparation of vserver $BASE done" $(date) - cp $COMMANDPATH /vservers/${BASE}/build/ - - # invoke this command in the vserver for building (-T) - vserver ${BASE} exec /build/$COMMAND "${argv[@]}" - - # if successful (we run in set -e), publish - webpath=$(echo $WEBPATH | sed -e s,@PLDISTRO@,"$PLDISTRO",g -e s,@BASE@,"$BASE",g) - weblog=${webpath}.txt - rm -rf $webpath $weblog - myplcs=$(find /vservers/$BASE/build/RPMS -name myplc\*rpm) - mkdir $webpath - cp $myplcs $webpath - - # warning : need ssh in the vserver - set +e - if [ -n "$DO_TEST" ] ; then - ok="" - runtest - [ "$?" = 0 ] && ok="true" - cp $LOG $weblog - [ -z "$ok" ] && failure - fi - - success - - else - LOG=/build/build-log.txt - if [ -n "$DO_BUILD" ] ; then - build - fi - - fi - -} - -########## -main "$@" -- 2.43.0