3 # PlanetLab release build script. Intended to be used by scripts and
4 # crontabs to build nightly releases (default). Can also be invoked
5 # manually to build a tagged release (-r) in the current directory.
7 # $Id: build.sh,v 1.26 2005/04/13 17:20:30 mlhuang Exp $
11 CVSROOT=:pserver:anon@cvs.planet-lab.org:/cvs
17 # cron does not set USER?
18 [ -z "$USER" ] && export USER=$LOGNAME
20 # Export certain variables
24 while getopts "d:r:m:b:x:h" opt ; do
42 echo "usage: `basename $0` [OPTION]..."
43 echo " -d directory CVS repository root (default $CVSROOT)"
44 echo " -r revision CVS revision to checkout (default $TAG)"
45 echo " -m address Notify recipient of failures (default: none)"
46 echo " -b base Run operations in specified base directory (default $BASE)"
47 echo " -x N Remove all but the last N runs from the base directory (default: none)"
53 # Base operations in specified directory
58 if [ -n "$BUILDS" ] ; then
59 ls -t | sed -n ${BUILDS}~1p | xargs rm -rf
62 # Create a unique build base
63 BASE=${TAG/HEAD/`date +%Y.%m.%d`}
65 while ! mkdir ${BASE}${i} 2>/dev/null ; do
66 [ -z ${i} ] && BASE=${BASE}.
68 if [ $i -gt 100 ] ; then
69 echo "$0: Failed to create release directory `pwd`/${BASE}${i}"
75 # Redirect output from here
80 cvs -d ${CVSROOT} export -r ${TAG} -d ${BASE} ${MODULE}
84 if [ $rc -ne 0 ] ; then
85 # Notify recipient of failure
86 if [ -n "$MAILTO" ] ; then
87 tail -100 ${BASE}/log | mail -s "Failures for ${BASE}" $MAILTO
95 # XXX Should check out a tagged version of yumgroups.xml
96 echo "$(date) Getting yumgroups.xml"
97 cvs -d ${CVSROOT} checkout -p alpina/groups/v3_yumgroups.xml > ${BASE}/RPMS/yumgroups.xml
99 # Create package manifest
100 echo "$(date) Creating package manifest"
101 URLBASE=$(cd ${BASE} && pwd -P)
102 URLBASE="http://build.planet-lab.org/${URLBASE##$HOME/}/SRPMS"
103 ${BASE}/packages.sh -b ${URLBASE} ${BASE}/SRPMS > ${BASE}/SRPMS/packages.xml
105 # Upload packages to boot server
106 SERVER=build@boot.planet-lab.org
107 ARCHIVE=/var/www/html/install-rpms/archive
108 # Put nightly alpha builds in a subdirectory
109 if [ "$TAG" = "HEAD" ] ; then
110 ARCHIVE=$ARCHIVE/planetlab-alpha
111 REPOS=/var/www/html/install-rpms/planetlab-alpha
115 if [ -n "$BUILDS" ] ; then
116 echo "$(date) Removing old runs"
117 echo "cd $ARCHIVE && ls -t | sed -n ${BUILDS}~1p | xargs rm -rf" | ssh $SERVER /bin/bash -s
120 # Populate repository
121 echo "$(date) Populating repository"
122 for RPMS in RPMS SRPMS ; do
123 ssh $SERVER mkdir -p $ARCHIVE/$BASE/$RPMS/
124 find $BASE/$RPMS/ -type f | xargs -i scp {} $SERVER:$ARCHIVE/$BASE/$RPMS/
125 ssh $SERVER yum-arch $ARCHIVE/$BASE/$RPMS/ >/dev/null
129 # Update nightly alpha symlink if it does not exist or is broken, or
131 echo "$(date) Updating symlink"
132 if [ "$TAG" = "HEAD" ] && ([ ! -e $REPOS ] || [ "$(date +%A)" = "Monday" ]) ; then
133 ssh $SERVER ln -nsf $ARCHIVE/$BASE/RPMS/ $REPOS
136 echo "$(date) $BASE done"