COMMAND=$(basename $0)
# default values, tunable with command-line options
-DEFAULT_FCDISTRO=centos5
+DEFAULT_FCDISTRO=f14
DEFAULT_PLDISTRO=planetlab
-DEFAULT_PERSONALITY=linux32
+DEFAULT_PERSONALITY=linux64
DEFAULT_BASE="@DATE@--@PLDISTRO@-@FCDISTRO@-@PERSONALITY@"
DEFAULT_BUILD_SCM_URL="git://git.onelab.eu/build"
DEFAULT_IFNAME=eth0
DEFAULT_GPGUID="root@$( /bin/hostname )"
DEFAULT_TESTCONFIG="default"
+# for passing args to run_log
+RUN_LOG_EXTRAS=""
# for publishing results, and the tests settings
x=$(hostname)
# utilities for handling the pushed material (rpms, logfiles, ...)
function webpublish_misses_dir () { ssh root@${WEBHOST} "bash -c \"test \! -d $1\"" ; }
function webpublish () { ssh root@${WEBHOST} "$@" ; }
-function webpublish_rsync_dir () { rsync --archive --delete $VERBOSE $1 root@${WEBHOST}:$2 ; }
-function webpublish_rsync_file () { rsync $VERBOSE $1 root@${WEBHOST}:$2 ; }
function webpublish_cp_local_to_remote () { scp $1 root@${WEBHOST}:$2 ; }
function webpublish_cp_stdin_to_file () { ssh root@${WEBHOST} cat \> $1; }
function webpublish_append_stdin_to_file () { ssh root@${WEBHOST} cat \>\> $1; }
+# provide remote dir as first argument, so any number of local files can be passed next
+function webpublish_rsync_dir () { rsync --archive --delete $VERBOSE $2 root@${WEBHOST}:$1 ; }
+function webpublish_rsync_files () {
+ remote="$1"; shift
+ rsync --archive $VERBOSE "$@" root@${WEBHOST}:"$remote" ;
+}
# Notify recipient of failure or success, manage various stamps
function failure() {
set -x
# early stage ? - let's not create /build/@PLDISTRO@
if test -z "$WEBLOG" ; then
- WEBHOST=localhost
+ WEBHOST=$(hostname)
WEBPATH=/tmp
WEBBASE=/tmp/vbuild-early-$(date +%Y-%m-%d)
WEBLOG=/tmp/vbuild-early-$(date +%Y-%m-%d).log.txt
webpublish_cp_stdin_to_file $WEBBASE.ko ||:
if [ -n "$MAILTO" ] ; then
( \
- echo "Subject: Failures with $MAIL_SUBJECT $BASE on $(hostname)" ; \
+ echo "Subject: KO ${BASE} ${MAIL_SUBJECT}" ; \
echo "To: $MAILTO" ; \
- echo "See full build log at $WEBBASE_URL/log.txt" ; \
- echo "and tail version at $WEBBASE_URL.ko" ; \
- echo "See complete set of testlogs at $WEBBASE_URL/testlogs" ; \
+ echo "see build results at $WEBBASE_URL" ; \
+ echo "including full build log at $WEBBASE_URL/log.txt" ; \
+ echo "and complete test logs at $WEBBASE_URL/testlogs" ; \
echo "........................................" ; \
webpublish tail --lines=1000 $WEBLOG ) | \
sendmail $MAILTO
set -x
# early stage ? - let's not create /build/@PLDISTRO@
if test -z "$WEBLOG" ; then
- WEBHOST=localhost
+ WEBHOST=$(hostname)
WEBPATH=/tmp
WEBLOG=/tmp/vbuild-early-$(date +%Y-%m-%d).log.txt
fi
if [ -n "$DO_TEST" ] ; then
( \
echo "Successfully built and tested" ; \
- echo "See full build log at $WEBBASE_URL/log.txt" ; \
- echo "See complete set of testlogs at $WEBBASE_URL/testlogs" ; \
+ echo "see build results at $WEBBASE_URL" ; \
+ echo "including full build log at $WEBBASE_URL/log.txt" ; \
+ echo "and complete test logs at $WEBBASE_URL/testlogs" ; \
) | webpublish_cp_stdin_to_file $WEBBASE.pass
webpublish rm -f $WEBBASE.pkg-ok $WEBBASE.ko
else
( \
echo "Successful package-only build, no test requested" ; \
- echo "See full build log at $WEBBASE_URL/log.txt" ; \
+ echo "see build results at $WEBBASE_URL" ; \
+ echo "including full build log at $WEBBASE_URL/log.txt" ; \
) | webpublish_cp_stdin_to_file $WEBBASE.pkg-ok
webpublish rm -f $WEBBASE.ko
fi
if [ -n "$MAILTO" ] ; then
( \
- echo "Subject: Success with ${MAIL_SUBJECT} ${BASE} on $(hostname)" ; \
+ echo "Subject: PASS ${BASE} ${MAIL_SUBJECT}" ; \
echo "To: $MAILTO" ; \
echo "$PLDISTRO ($BASE) build for $FCDISTRO completed on $(date)" ; \
- echo "See full build log at $WEBBASE_URL/log.txt" ; \
- [ -n "$DO_TEST" ] && echo "See complete set of testlogs at $WEBBASE_URL/testlogs" ) \
+ echo "see build results at $WEBBASE_URL" ; \
+ echo "including full build log at $WEBBASE_URL/log.txt" ; \
+ [ -n "$DO_TEST" ] && echo "and complete test logs at $WEBBASE_URL/testlogs" ) \
| sendmail $MAILTO
fi
# XXX For some reason, we haven't been getting this email for successful builds. If this sleep
MAKEVARS=("BASE=${BASE}" "${MAKEVARS[@]}")
+ # initialize latex
+ /build/latex-first-run.sh || :
+
# stage1
make -C /build $DRY_RUN "${MAKEVARS[@]}" stage1=true
# versions
rsync --verbose --archive /vservers/$BASE/build/MODULES/build ${testmaster_ssh}:${BASE}/
# invoke test on testbox - pass url and build url - so the tests can use vtest-init-vserver.sh
- configs=""
- for config in ${TESTCONFIG} ; do
- configs="$configs --config $config"
- done
- test_env="-p $PERSONALITY -d $PLDISTRO -f $FCDISTRO"
+ run_log_env="-p $PERSONALITY -d $PLDISTRO -f $FCDISTRO"
# need to proceed despite of set -e
success=true
# passing the build_scm_url should not be needed anymore
- ssh 2>&1 -n ${testmaster_ssh} ${testdir}/run_log --build ${BUILD_SCM_URL} --url ${url} $configs $test_env $VERBOSE --all || success=
+ ssh 2>&1 -n ${testmaster_ssh} ${testdir}/run_log --build ${BUILD_SCM_URL} --url ${url} $run_log_env $RUN_LOG_EXTRAS $VERBOSE --all || success=
# gather logs in the build vserver
mkdir -p /vservers/$BASE/build/testlogs
rsync --verbose --archive ${testmaster_ssh}:$BASE/logs/ /vservers/$BASE/build/testlogs
# push them to the build web
chmod -R a+r /vservers/$BASE/build/testlogs/
- webpublish_rsync_dir /vservers/$BASE/build/testlogs/ $WEBPATH/$BASE/testlogs/
+ webpublish_rsync_dir $WEBPATH/$BASE/testlogs/ /vservers/$BASE/build/testlogs/
echo "============================== END $COMMAND:run_log on $(date)"
echo " -o base: (overwrite) do not re-create vserver, re-use base instead"
echo " the -f/-d/-p/-m/-s/-t options are uneffective in this case"
echo " -c testconfig - defaults to $DEFAULT_TESTCONFIG"
+ echo " -y {pl,pg} - passed to run_log"
+ echo " -e step - passed to run_log"
+ echo " -X : passes --lxc to run_log"
+ echo " -S : passes --vs to run_log"
+ echo " -x <run_log_args> - a hook to pass other arguments to run_log"
echo " -w webpath - defaults to $DEFAULT_WEBPATH"
echo " -W testbuildurl - defaults to $DEFAULT_TESTBUILDURL; this is also used to get the hostname where to publish builds"
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 " -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"
SIGNYUMREPO=""
OPTS_ORIG=$@
- OPTS=$(getopt -o "f:d:p:m:s:t:b:o:c:w:W:r:M:yg:u:K:SBTnv7i:h" -l "build-branch:" -- $@)
+ OPTS=$(getopt -o "f:d:p:m:s:t:b:o:c:y:e:XSx:w:W:r:M:Yg:u:K:SBTnv7i:P:h" -l "build-branch:" -- $@)
if [ $? != 0 ]
then
usage
-b) BASE=$2; shift 2 ;;
-o) OVERBASE=$2; shift 2 ;;
-c) TESTCONFIG="$TESTCONFIG $2"; shift 2 ;;
+ ########## passing stuff to run_log
+ # -y foo -> run_log -y foo
+ -y) RUN_LOG_EXTRAS="$RUN_LOG_EXTRAS --rspec-style $2"; shift 2 ;;
+ # -e foo -> run_log -e foo
+ -e) RUN_LOG_EXTRAS="$RUN_LOG_EXTRAS --exclude $2"; shift 2 ;;
+ # -X -> run_log --lxc
+ -X) RUN_LOG_EXTRAS="$RUN_LOG_EXTRAS --lxc"; shift;;
+ # -S -> run_log --vs
+ -S) RUN_LOG_EXTRAS="$RUN_LOG_EXTRAS --vs"; shift;;
+ # more general form to pass args to run_log
+ # -x foo -> run_log foo
+ -x) RUN_LOG_EXTRAS="$RUN_LOG_EXTRAS $2"; shift 2;;
+ ##########
-w) WEBPATH=$2; shift 2 ;;
-W) TESTBUILDURL=$2; shift 2 ;;
-r) WEBROOT=$2; shift 2 ;;
-M) TESTMASTER=$2; shift 2 ;;
- -y) SIGNYUMREPO=true; shift ;;
+ -Y) SIGNYUMREPO=true; shift ;;
-g) GPGPATH=$2; shift 2 ;;
-u) GPGUID=$2; shift 2 ;;
-K) SSH_KEY=$2; shift 2 ;;
-v) set -x ; VERBOSE="-v" ; shift ;;
-7) BASE="$(date +%a|tr A-Z a-z)-@FCDISTRO@" ; shift ;;
-i) IFNAME=$2; shift 2 ;;
+ -P) PREINSTALLED="-P $2"; shift 2;;
-h) usage ; shift ;;
--) shift; break ;;
esac
done
- eval set -- "$OPTS_ORIG"
-
-
# preserve options for passing them again later, together with expanded base
- declare -a options
- toshift=$(($OPTIND - 1))
- arg=1; while [ $arg -le $toshift ] ; do options=(${options[@]} "$1") ; shift; arg=$(($arg+1)) ; done
+ options=$OPTS_ORIG
# allow var=value stuff;
for target in "$@" ; do
[ -z "$TESTMASTER" ] && TESTMASTER="$DEFAULT_TESTMASTER"
[ -n "$DRY_RUN" ] && MAILTO=""
+
+ # elaborate the extra args to be passed to run_log
+ for config in ${TESTCONFIG} ; do
+ RUN_LOG_EXTRAS="$RUN_LOG_EXTRAS --config $config"
+ done
+
if [ -n "$OVERBASE" ] ; then
sedargs="-e s,@DATE@,${DATE},g"
### elaborate mail subject
if [ -n "$DO_BUILD" -a -n "$DO_TEST" ] ; then
- MAIL_SUBJECT="complete"
+ MAIL_SUBJECT="full"
elif [ -n "$DO_BUILD" ] ; then
- MAIL_SUBJECT="package-only"
+ MAIL_SUBJECT="pkg-only"
elif [ -n "$DO_TEST" ] ; then
MAIL_SUBJECT="test-only"
fi
if [ -n "$OVERBASE" ] ; then
- MAIL_SUBJECT="$MAIL_SUBJECT incremental run on"
+ MAIL_SUBJECT="${MAIL_SUBJECT} rerun"
else
- MAIL_SUBJECT="$MAIL_SUBJECT fresh build"
+ MAIL_SUBJECT="${MAIL_SUBJECT} fresh"
fi
+ short_hostname=$(hostname | cut -d. -f1)
+ MAIL_SUBJECT="on ${short_hostname} - ${MAIL_SUBJECT}"
### compute WEBHOST from TESTBUILDURL
# this is to avoid having to change the builds configs everywhere
fi
# Create vserver
cd $tmpdir
- ./vbuild-init-vserver.sh $VERBOSE -f ${FCDISTRO} -d ${PLDISTRO} -p ${PERSONALITY} -i ${IFNAME} ${BASE}
+ ./vbuild-init-vserver.sh $VERBOSE -f ${FCDISTRO} -d ${PLDISTRO} -p ${PERSONALITY} -i ${IFNAME} ${PREINSTALLED} ${BASE}
# cleanup
cd -
rm -rf $tmpdir
# publish to the web so run_log can find them
set +e
webpublish rm -rf $WEBPATH/$BASE
- webpublish mkdir -p $WEBPATH/$BASE/{RPMS,SRPMS}
- webpublish_rsync_dir /vservers/$BASE/build/RPMS/ $WEBPATH/$BASE/RPMS/
- [[ -n "$PUBLISH_SRPMS" ]] && webpublish_rsync_dir /vservers/$BASE/build/SRPMS/ $WEBPATH/$BASE/SRPMS/
+ # guess if we've been doing any debian-related build
+ if [ ! -f /vservers/$BASE/etc/debian_version ] ; then
+ webpublish mkdir -p $WEBPATH/$BASE/{RPMS,SRPMS}
+ webpublish_rsync_dir $WEBPATH/$BASE/RPMS/ /vservers/$BASE/build/RPMS/
+ [[ -n "$PUBLISH_SRPMS" ]] && webpublish_rsync_dir $WEBPATH/$BASE/SRPMS/ /vservers/$BASE/build/SRPMS/
+ else
+ # run scanpackages so we can use apt-get on this
+ # (not needed on fedora b/c this is done by the regular build already)
+ vserver $BASE exec bash -c "(cd /build ; dpkg-scanpackages DEBIAN/ | gzip -9c > DEBIAN/Packages.gz)"
+ webpublish mkdir -p $WEBPATH/$BASE/DEBIAN
+ webpublish_rsync_files $WEBPATH/$BASE/DEBIAN/ /vservers/$BASE/build/DEBIAN/*.deb
+ webpublish_rsync_files $WEBPATH/$BASE/ /vservers/$BASE/build/DEBIAN/*.gz
+ fi
# publish myplc-release if this exists
release=/vservers/$BASE/build/myplc-release
- [ -f $release ] && webpublish_rsync_file $release $WEBPATH/$BASE
+ [ -f $release ] && webpublish_rsync_files $WEBPATH/$BASE $release
set -e
# create yum repo and sign packages.