X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=vbuild-nightly.sh;h=0fa98393fa7a51593b4dbd9618eaa40a0e108ee0;hb=837b518018bc24186e3d7da34a3e97af4b2d55f2;hp=e146e468a37701d1028998fd096a4c2a86bfca32;hpb=3678eb46899b9bafdeee19909161757c49fe49d3;p=build.git diff --git a/vbuild-nightly.sh b/vbuild-nightly.sh index e146e468..0fa98393 100755 --- a/vbuild-nightly.sh +++ b/vbuild-nightly.sh @@ -10,20 +10,34 @@ DEFAULT_PLDISTRO=planetlab DEFAULT_PERSONALITY=linux32 DEFAULT_BASE="@DATE@--@PLDISTRO@-@FCDISTRO@-@PERSONALITY@" DEFAULT_build_SVNPATH="http://svn.planet-lab.org/svn/build/trunk" -DEFAULT_TESTCONFIG="default" DEFAULT_IFNAME=eth0 -# web publishing results -DEFAULT_WEBPATH="/build/@PLDISTRO@/" - # default gpg path used in signing yum repo DEFAULT_GPGPATH="/etc/planetlab" # default email to use in gpg secring DEFAULT_GPGUID="root@$( /bin/hostname )" -# for the test part -DEFAULT_TESTBUILDURL="http://build.onelab.eu/" -TESTBOXSSH=root@testbox.onelab.eu +# for publishing results, and the tests settings +x=$(hostname) +y=$(hostname|sed -e s,inria,,) +# INRIA defaults +if [ "$x" != "$y" ] ; then + DEFAULT_WEBPATH="/build/@PLDISTRO@/" + DEFAULT_TESTBUILDURL="http://build.onelab.eu/" + # 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" +fi + #################### # assuming vserver runs in UTC DATE=$(date +'%Y.%m.%d') @@ -98,7 +112,11 @@ EOF # Notify recipient of failure or success, manage various stamps function failure() { set -x - mkdir -p ${WEBPATH} + # early stage ? - let's not create /build/@PLDISTRO@ + if [ ! -d ${WEBPATH} ] ; then + WEBPATH=/tmp + WEBLOG=/tmp/vbuild-early.log.txt + fi cp $LOG ${WEBLOG} summary $LOG >> ${WEBLOG} (echo -n "============================== $COMMAND: failure at " ; date ; tail -c 30k $WEBLOG) > ${WEBLOG}.ko @@ -107,14 +125,18 @@ function failure() { echo "See full build log at ${LOG_URL}" ; \ echo "and tail version at ${LOG_URL}.ko" ; \ echo "See complete set of testlogs at ${TESTLOGS_URL}" ; \ - tail -c 30k ${WEBLOG} ) | mail -s "Failures for build ${BASE}" $MAILTO + tail -c 30k ${WEBLOG} ) | mail -s "Failures with ${MAIL_SUBJECT} ${BASE}" $MAILTO fi exit 1 } function success () { set -x - mkdir -p ${WEBPATH} + # early stage ? - let's not create /build/@PLDISTRO@ + if [ ! -d ${WEBPATH} ] ; then + WEBPATH=/tmp + WEBLOG=/tmp/vbuild-early-$(date +%Y-%m-%d).log.txt + fi cp $LOG ${WEBLOG} summary $LOG >> ${WEBLOG} if [ -n "$DO_TEST" ] ; then @@ -123,19 +145,20 @@ function success () { echo "See full build log at ${LOG_URL}" ; \ echo "See complete set of testlogs at ${TESTLOGS_URL}" ; \ ) > ${WEBLOG}.pass - rm -f ${WEBLOG}.ok ${WEBLOG}.ko + rm -f ${WEBLOG}.pkg-ok ${WEBLOG}.ko else ( \ - echo "Successfully built, no test requested" ; \ + echo "Successful package-only build, no test requested" ; \ echo "See full build log at ${LOG_URL}" ; \ - ) > ${WEBLOG}.ok + ) > ${WEBLOG}.pkg-ok + rm -f ${WEBLOG}.ko fi if [ -n "$MAILTO" ] ; then ( \ echo "$PLDISTRO ($BASE) build for $FCDISTRO completed on $(date)" ; \ echo "See full build log at ${LOG_URL}" ; \ [ -n "$DO_TEST" ] && echo "See complete set of testlogs at ${TESTLOGS_URL}" ) \ - | mail -s "Successful build for ${BASE}" $MAILTO + | mail -s "Success with ${MAIL_SUBJECT} ${BASE}" $MAILTO fi exit 0 } @@ -149,11 +172,6 @@ function build () { date cd /build - # if TAGSRELEASE specified : update PLDISTROTAGS with this tag - if [ -n "$TAGSRELEASE" ] ; then - svn up -r $TAGSRELEASE $PLDISTROTAGS - fi - show_env echo "Running make IN $(pwd)" @@ -164,6 +182,9 @@ function build () { MAKEVARS=("build-SVNPATH=${build_SVNPATH}" "${MAKEVARS[@]}") MAKEVARS=("PERSONALITY=${PERSONALITY}" "${MAKEVARS[@]}") MAKEVARS=("MAILTO=${MAILTO}" "${MAKEVARS[@]}") + MAKEVARS=("WEBPATH=${WEBPATH}" "${MAKEVARS[@]}") + MAKEVARS=("TESTBUILDURL=${TESTBUILDURL}" "${MAKEVARS[@]}") + MAKEVARS=("WEBROOT=${WEBROOT}" "${MAKEVARS[@]}") MAKEVARS=("BASE=${BASE}" "${MAKEVARS[@]}") @@ -216,14 +237,16 @@ function runtest () { exit 1 fi + testmaster_ssh="root@${TESTMASTER}" + # test directory name on test box testdir=${BASE} # clean it - ssh -n ${TESTBOXSSH} rm -rf ${testdir} + ssh -n ${testmaster_ssh} rm -rf ${testdir} # check it out - ssh -n ${TESTBOXSSH} svn co ${TESTS_SYSTEM_SVNPATH} ${testdir} + 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 ${TESTBOXSSH} svn co ${TESTS_SVNPATH} ${testdir}/tests + 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 @@ -233,14 +256,14 @@ function runtest () { # need to proceed despite of set -e success=true - ssh 2>&1 -n ${TESTBOXSSH} ${testdir}/runtest --build ${build_SVNPATH} --url ${url} $configs $test_env --all || success= + ssh 2>&1 -n ${testmaster_ssh} ${testdir}/runtest --build ${build_SVNPATH} --url ${url} $configs $test_env --all || success= # gather logs in the vserver mkdir -p /vservers/$BASE/build/testlogs - ssh 2>&1 -n ${TESTBOXSSH} tar -C ${testdir}/logs -cf - . | tar -C /vservers/$BASE/build/testlogs -xf - || true + ssh 2>&1 -n ${testmaster_ssh} tar -C ${testdir}/logs -cf - . | tar -C /vservers/$BASE/build/testlogs -xf - || true # push them to the build web + chmod -R a+r /vservers/$BASE/build/testlogs/ rsync --archive --delete /vservers/$BASE/build/testlogs/ $WEBPATH/$BASE/testlogs/ - chmod -R a+r $WEBPATH/$BASE/testlogs/ if [ -z "$success" ] ; then failure @@ -253,6 +276,7 @@ function in_root_context () { rpm -q util-vserver > /dev/null } +# this part won't work with a remote(rsync) WEBPATH function sign_node_packages () { echo "Signing node packages" @@ -311,16 +335,19 @@ function show_env () { echo MAKEVARS="${MAKEVARS[@]}" echo DRY_RUN="$DRY_RUN" echo PLDISTROTAGS="$PLDISTROTAGS" - echo TAGSRELEASE="$TAGSRELEASE" # this does not help, it's not yet set when we run show_env #echo WEBPATH="$WEBPATH" echo TESTBUILDURL="$TESTBUILDURL" if in_root_context ; then echo PLDISTROTAGS="$PLDISTROTAGS" else - echo "XXXXXXXXXXXXXXXXXXXX Contents of tags definition file /build/$PLDISTROTAGS" - cat /build/$PLDISTROTAGS - echo "XXXXXXXXXXXXXXXXXXXX end tags definition" + if [ -f /build/$PLDISTROTAGS ] ; then + echo "XXXXXXXXXXXXXXXXXXXX Contents of tags definition file /build/$PLDISTROTAGS" + cat /build/$PLDISTROTAGS + echo "XXXXXXXXXXXXXXXXXXXX end tags definition" + else + echo "XXXXXXXXXXXXXXXXXXXX Cannot find tags definition file /build/$PLDISTROTAGS, assuming remote pldistro" + fi fi set -x } @@ -332,20 +359,21 @@ function usage () { echo " -f fcdistro - defaults to $DEFAULT_FCDISTRO" echo " -d pldistro - defaults to $DEFAULT_PLDISTRO" echo " -p personality - defaults to $DEFAULT_PERSONALITY" + echo " -m mailto - no default" + echo " -s svnpath - where to fetch the build module - defaults to $DEFAULT_build_SVNPATH" + echo " -t pldistrotags - defaults to \${PLDISTRO}-tags.mk" echo " -b base - defaults to $DEFAULT_BASE" echo " @NAME@ replaced as appropriate" echo " -o base: (overwrite) do not re-create vserver, re-use base instead" - echo " the -f/-d/-t/-s/-p/-m options are uneffective in this case" - 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 - defaults to $DEFAULT_build_SVNPATH" + echo " the -f/-d/-p/-m/-s/-t options are uneffective in this case" echo " -c testconfig - defaults to $DEFAULT_TESTCONFIG" echo " -w webpath - defaults to $DEFAULT_WEBPATH" 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 " -m mailto - no default" 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" @@ -366,23 +394,24 @@ function main () { DO_BUILD=true DO_TEST=true SIGNYUMREPO="" - while getopts "f:d:p:b:o:t:r:s:x:c:w:W:g:u:m:BTnyv7i:" opt ; do + while getopts "f:d:p:m:s:t:b:o:c:w:W:r:M:yg:u:BTnv7i:" opt ; do case $opt in f) FCDISTRO=$OPTARG ;; d) PLDISTRO=$OPTARG ;; p) PERSONALITY=$OPTARG ;; + m) MAILTO=$OPTARG ;; + s) build_SVNPATH=$OPTARG ;; + t) PLDISTROTAGS=$OPTARG ;; b) BASE=$OPTARG ;; o) OVERBASE=$OPTARG ;; - t) PLDISTROTAGS=$OPTARG ;; - r) TAGSRELEASE=$OPTARG ;; - s) build_SVNPATH=$OPTARG ;; c) TESTCONFIG="$TESTCONFIG $OPTARG" ;; w) WEBPATH=$OPTARG ;; W) TESTBUILDURL=$OPTARG ;; + r) WEBROOT=$OPTARG ;; + M) TESTMASTER=$OPTARG ;; y) SIGNYUMREPO=true ;; g) GPGPATH=$OPTARG ;; u) GPGUID=$OPTARG ;; - m) MAILTO=$OPTARG ;; B) DO_TEST= ;; T) DO_BUILD= ;; n) DRY_RUN="-n" ;; @@ -417,11 +446,13 @@ function main () { [ -z "$BASE" ] && BASE="$DEFAULT_BASE" [ -z "$WEBPATH" ] && WEBPATH="$DEFAULT_WEBPATH" [ -z "$TESTBUILDURL" ] && TESTBUILDURL="$DEFAULT_TESTBUILDURL" + [ -z "$WEBROOT" ] && WEBROOT="$DEFAULT_WEBROOT" [ -z "$GPGPATH" ] && GPGPATH="$DEFAULT_GPGPATH" [ -z "$GPGUID" ] && GPGUID="$DEFAULT_GPGUID" [ -z "$IFNAME" ] && IFNAME="$DEFAULT_IFNAME" [ -z "$build_SVNPATH" ] && build_SVNPATH="$DEFAULT_build_SVNPATH" [ -z "$TESTCONFIG" ] && TESTCONFIG="$DEFAULT_TESTCONFIG" + [ -z "$TESTMASTER" ] && TESTMASTER="$DEFAULT_TESTMASTER" [ -n "$DRY_RUN" ] && MAILTO="" @@ -433,6 +464,20 @@ function main () { BASE=$(echo ${BASE} | sed $sedargs) fi + ### elaborate mail subject + if [ -n "$DO_BUILD" -a -n "$DO_TEST" ] ; then + MAIL_SUBJECT="complete" + elif [ -n "$DO_BUILD" ] ; then + MAIL_SUBJECT="package-only" + elif [ -n "$DO_TEST" ] ; then + MAIL_SUBJECT="test-only" + fi + if [ -n "$OVERBASE" ] ; then + MAIL_SUBJECT="$MAIL_SUBJECT incremental run on" + else + MAIL_SUBJECT="$MAIL_SUBJECT fresh build" + fi + if ! in_root_context ; then # in the vserver echo "==================== Within vserver BEG $(date)" @@ -470,6 +515,9 @@ function main () { build_SVNPATH=$(vserver ${BASE} exec make --no-print-directory -C /build stage1=skip +build-SVNPATH) PERSONALITY=$(vserver ${BASE} exec make --no-print-directory -C /build stage1=skip +PERSONALITY) MAILTO=$(vserver ${BASE} exec make --no-print-directory -C /build stage1=skip +MAILTO) + WEBPATH=$(vserver ${BASE} exec make --no-print-directory -C /build stage1=skip +WEBPATH) + TESTBUILDURL=$(vserver ${BASE} exec make --no-print-directory -C /build stage1=skip +TESTBUILDURL) + WEBROOT=$(vserver ${BASE} exec make --no-print-directory -C /build stage1=skip +WEBROOT) show_env else # create vserver: check it does not exist yet @@ -521,12 +569,13 @@ function main () { sedargs="-e s,@DATE@,${DATE},g -e s,@FCDISTRO@,${FCDISTRO},g -e s,@PLDISTRO@,${PLDISTRO},g -e s,@PERSONALITY@,${PERSONALITY},g" WEBPATH=$(echo ${WEBPATH} | sed $sedargs) + mkdir -p ${WEBPATH} # where to store the log for web access WEBLOG=${WEBPATH}/${BASE}.log.txt # compute the log URL - inserted in the mail messages for convenience - LOG_URL=$(echo ${WEBLOG} | sed -e "s,//,/,g" -e "s,/build/,${TESTBUILDURL},") - TESTLOGS_URL=$(echo ${WEBPATH}/${BASE}/testlogs | sed -e "s,//,/,g" -e "s,/build/,${TESTBUILDURL},") + LOG_URL=$(echo ${WEBLOG} | sed -e "s,//,/,g" -e "s,${WEBROOT},${TESTBUILDURL},") + TESTLOGS_URL=$(echo ${WEBPATH}/${BASE}/testlogs | sed -e "s,//,/,g" -e "s,${WEBROOT},${TESTBUILDURL},") if [ -n "$DO_BUILD" ] ; then