From 3e48d74aad0b7ca30dc4a748c1c5a740d77a5c49 Mon Sep 17 00:00:00 2001 From: build Date: Sun, 22 Apr 2007 23:41:24 +0000 Subject: [PATCH] first draft --- scripts/nightly-build-svn.sh | 180 +++++++++++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100755 scripts/nightly-build-svn.sh diff --git a/scripts/nightly-build-svn.sh b/scripts/nightly-build-svn.sh new file mode 100755 index 0000000..f10dcb7 --- /dev/null +++ b/scripts/nightly-build-svn.sh @@ -0,0 +1,180 @@ +#!/bin/bash + +# use svn propset svn:keywords Revision to enable this +REVISION=$(echo '$Revision$' | sed -e 's,\$,,g' -e 's,^\w*:\s,,' ) + +COMMAND=$(basename $0) +ROOT=/build +CHROOTBINDIR=/root/bin + +# default values, tunable with command-line options +SVNPATH="svn+ssh://build@svn.one-lab.org/svn/build/trunk" +DISTRO=onelab +MAILTO="onelab-build@one-lab.org" +TAGSFILE=onelab-tags.mk + +#################### +# plc chroot runs in UTC +DATE=$(date -u +'%Y.%m.%d') + +### in the root context +function do_chroot () { + chroot /plc/devel/root su - build </dev/null ; do + [ -z ${i} ] && BASE=${BASE}. + i=$((${i}+1)) + if [ $i -gt 100 ] ; then + echo "$0: Failed to create release directory `pwd`/${BASE}${i}" + exit 1 + fi + done + BASE=${BASE}${i} +} + +function use_base () { + [ ! -d $BASE ] && mkdir $BASE + if [ ! -d $BASE ] ; then + echo $COMMAND failed to create base $BASE + exit 1 + fi +} + +function build () { + trap failure ERR INT + set -x + + echo -n "============================== Starting $COMMAND on " + date + + cd $ROOT + svn co $SVNPATH $BASE + + # if TAGSTAG specified : update TAGSFILE with this tag + if [ -n "$TAGSTAG" ] ; then + cd $BASE + svn up -r $TAGSTAG $TAGSFILE + cd - + fi + + show_env + + echo "Running make IN build $(pwd)" + make ${MAKEOPTS[@]} TAGSFILE=${TAGSFILE} PLDISTRO=${DISTRO} ${MAKEVARS[@]} -C $BASE $MAKETARGETS + + # only if successful + rm -f latest + ln -s $BASE latest + + success +} + +function show_env () { + echo ROOT=$ROOT + echo DISTRO=$DISTRO + echo BASE=$BASE + echo SVNPATH=$SVNPATH + echo MAKEVARS="${MAKEVARS[@]}" + echo MAKEOPTS="${MAKEOPTS[@]}" + echo TAGSFILE="$TAGSFILE" + echo TAGSTAG="$TAGSTAG" + echo "XXXXXXXXXXXXXXXXXXXX Contents of tags definition file $TAGSFILE" + cat $BASE/$TAGSFILE + echo "XXXXXXXXXXXXXXXXXXXX end tags definition" +} + +function usage () { + echo "Usage: $COMMAND [option] make-targets" + echo "This is revision $REVISION" + echo "Supported options" + echo " -b BASE - may include @, then replaced with current date" + echo " -u : uses directory given as BASE as is, even if already exists" + echo " -e : exits (does nothing) if BASE already exists" + echo " -d DISTRO" + echo " -t TAGSFILE" + echo " -r TAGSTAG - a tag that refers to TAGSFILE - defaults to HEAD" + echo " -s MAKEVAR=value - spaces in value are not supported" + echo " -n passed to make" + echo " -v verbose" + echo " -m MAILTO" + echo " -s SVNPATH" + exit 1 +} + +function main () { + + if [ -d /plc/devel/data ] ; then + do_chroot "$@" + else + MAKEVARS=() + MAKEOPTS=() + while getopts "b:ued:t:r:B:s:nvm:s:h" opt ; do + case $opt in + b) BASE=$OPTARG ;; + u) USEOLD=true ;; + e) EXITIFOLD=true ;; + d) DISTRO=$OPTARG ;; + t) TAGSFILE=$OPTARG ;; + r) TAGSTAG=$OPTARG ;; + s) MAKEVARS=(${MAKEVARS[@]} $OPTARG) ;; + n) MAILTO="" ; MAKEOPTS=(${MAKEOPTS[@]} -n) ;; + v) set -x ;; + m) MAILTO=$OPTARG ;; + s) SVNPATH=$OPTARG ;; + h|*) usage ;; + esac + done + + shift $(($OPTIND - 1)) + + ROOT=$ROOT/$DISTRO + cd $ROOT + + MAKETARGETS="$@" + + ### set BASE from DISTRO, if unspecified + [ -z "$BASE" ] && BASE=${DISTRO} + BASE=$(echo ${BASE} | sed -e "s,@,${DATE},g") + + if [ -n "$EXITIFOLD" -a -d "$BASE" ] ; then + echo "$COMMAND: -e : exits on existing base directory $BASE" + BUILD=$ROOT/$BASE + failure + exit 1 + fi + + if [ -n "$USEOLD" ] ; then + use_base $BASE + else + create_base + fi + BUILD=$ROOT/$BASE + + build >> ${BUILD}/log-build.txt 2>&1 + fi +} + +########## +main "$@" -- 2.47.0