1 #!/bin/bash 2 3 # host to rcp the rpms to 4 RHOST=blader 5 6 # user to rcp as (has to have root@<this host> in it's .rhosts file) 7 RUSER=gbuild 8 9 # directory to copy rpms/srpms to on the remote host 10 RPMSDIR=/sgnome/pkgs/gnome2.12/rpms/nightly 11 SRPMSDIR=/sgnome/pkgs/gnome2.12/srpms/nightly 12 LOCKFILE=/sgnome/pkgs/gnome2.12/rpms/.build.lock 13 14 # reply-to/to address to send the build log as/to 15 REPLY_TO=laszlo.peter@sun.com 16 EMAIL_ADDR=gnome-re@sun.com 17 18 # date format appended to the Release tag in the spec files 19 # (passed to the date command on the cmd line) 20 RELEASE_DATE_FMT="%y%m%d" 21 22 # date format used for naming the directories 23 DIR_DATE_FMT="%Y-%m-%d" 24 25 RELEASE_DATE=`date +$RELEASE_DATE_FMT` 26 DIR_DATE=`date +$DIR_DATE_FMT` 27 28 # document root of the web server 29 WEBROOT=/scde/web/docs 30 31 # subdir to keep logs and reports on the webserver 32 WEBDIR=gnome/releng/jds/gnome2.12/nightly 33 LOGDIR=$WEBDIR/$DIR_DATE 34 35 # ------------ nothing to configure below this line -------------- 36 37 #if [ "x$I_KNOW_WHAT_IM_DOING" != xyes ]; then 38 # echo " ,---------------------------------------------------------------." 39 # echo "| This script is intended to be run from cron for producing |" 40 # echo "| official nightly builds. It will mail responsible engineers |" 41 # echo "| if any build failure occurs, sends build reports to v" 42 # echo "| RE and update web pages." 43 # echo "|" 44 # echo "| Don't run it unless you know what you are doing. Thanks." 45 # echo "|" 46 # echo "| Mail gnome-re (at] sun.com if you need more info." 47 # echo "\`------> +" 48 # exit 1 49 #fi 50 51 MYNAME="$0" 52 MYDIR=$(cd `dirname $0`; pwd) 53 54 if [ "x$1" != x ]; then 55 SPECDIR="$1" 56 else 57 SPECDIR="$MYDIR" 58 fi 59 60 # remove temporary files on exit 61 clean_up () { 62 case "$MYNAME" in 63 /tmp/cron-script.copy.* ) 64 rm -f $MYNAME 65 ;; 66 esac 67 exit 68 } 69 70 trap clean_up HUP INT TERM QUIT EXIT 71 72 # make a copy of the cron script in /tmp and execute that in order to 73 # avoid disasters caused by cvs update. 74 case "$MYNAME" in 75 /tmp/cron-script.copy.* ) 76 ;; 77 *) 78 cp $MYNAME /tmp/cron-script.copy.$$ 79 chmod 755 /tmp/cron-script.copy.$$ 80 cd /tmp 81 exec /tmp/cron-script.copy.$$ "$MYDIR" 82 ;; 83 esac 84 85 fatal_error () { 86 echo "ERROR: $*" 87 exit 1 88 } 89 90 cd $SPECDIR || fatal_error "$SPECDIR not found" 91 92 cvs -q up -Pd > /dev/null 2>&1 || fatal_error "CVS update failed" 93 94 # if the script changed during cvs update, restart with the updated script 95 if ! /usr/bin/cmp -s ./cron-script.sh $MYNAME; then exec ./cron-script.sh; fi 96 97 # uninstall all pkgs left behind by a previous build 98 ./build-gnome2 -q uninstall-pkgs *.spec 99 100 rm -f /usr/src/packages/SRPMS/* /usr/src/packages/RPMS/*/* 101 102 # if the log directory exists, open a new one with numbered suffix 103 NEW_LOGDIR=$LOGDIR 104 N=1 105 while [ -d $WEBROOT/$NEW_LOGDIR ]; do 106 NEW_LOGDIR=$LOGDIR.$N 107 N=`expr $N + 1` 108 done 109 110 LOGDIR=$NEW_LOGDIR 111 mkdir -p $WEBROOT/$LOGDIR 112 113 echo '' | rsh $RHOST -l $RUSER "touch $LOCKFILE" 114 115 # start the build 116 ./build-gnome2 -v --nightly --date "$RELEASE_DATE" build --target i586 *.spec \ 117 --logdir=$WEBROOT/$LOGDIR \ 118 --logdir-url=http://gnome.ireland/$LOGDIR \ 119 --mail-errors-file=MAINTAINERS \ 120 --mail-errors-cc=gnome-2-10-build-reports@sun.com \ 121 --prodname="G2.12/Linux" \ 122 --good-build-dir=/sgnome/pkgs/gnome2.12/rpms \ 123 --good-rpms-copy-dir=/tmp/old-rpms-used.$$ \ 124 --summary-log=$WEBROOT/$LOGDIR.html \ 125 --summary-title="Nightly Build Report `date +'%d %B %Y'`" \ 126 --rpm-url=file:///net/dtserv1.ireland/dtserv1/sgnome/buildenv$RPMSDIR \ 127 --srpm-url=file:///net/dtserv1.ireland/dtserv1/sgnome/buildenv$SRPMSDIR > /tmp/build.log.$$ 2>&1 128 129 # the number of failed pkgs is returned 130 FAILED=$? 131 132 # rotate rpms dir 133 echo '' | rsh $RHOST -l $RUSER "rm -f $RPMSDIR.prev/*; rmdir $RPMSDIR.prev" 134 echo '' | rsh $RHOST -l $RUSER "mv $RPMSDIR $RPMSDIR.prev; mkdir -p $RPMSDIR" 135 136 # copy new rpms 137 echo '' | rcp `./build-gnome2 --nightly --date "$RELEASE_DATE" install-order \ 138 --full-path --target i586 \ 139 *.spec` $RUSER@$RHOST:$RPMSDIR 140 141 if [ -d /tmp/old-rpms-used.$$ ]; then 142 echo '' | rcp /tmp/old-rpms-used.$$/*.rpm $RUSER@$RHOST:$RPMSDIR 143 rm -rf /tmp/old-rpms-used.$$ 144 fi 145 146 # rotate srpms dir 147 echo '' | rsh $RHOST -l $RUSER "rm -f $SRPMSDIR.prev/*; rmdir $SRPMSDIR.prev" 148 echo '' | rsh $RHOST -l $RUSER "mv $SRPMSDIR $SRPMSDIR.prev; mkdir -p $SRPMSDIR" 149 # copy new srpms 150 echo '' | rcp /usr/src/packages/SRPMS/*.$RELEASE_DATE.*src.rpm \ 151 $RUSER@$RHOST:$SRPMSDIR 152 153 ALL_REPORTS=$WEBROOT/$WEBDIR/all_reports.html 154 touch $ALL_REPORTS 155 156 cp $ALL_REPORTS $ALL_REPORTS.old 157 export FAILED ALL_REPORTS 158 159 # update web page 160 ( echo "<TR><TD><A HREF=/$LOGDIR.html>$DIR_DATE</A></TD>"; \ 161 echo " <TD>$FAILED package(s) failed</TD></TR>"; \ 162 cat $ALL_REPORTS.old ) > $ALL_REPORTS 163 164 # send log by email 165 grep -v '^INFO:' /tmp/build.log.$$ | \ 166 mail -s "G2.12/Linux nightly build: $FAILED pkgs failed" \ 167 -R $REPLY_TO $EMAIL_ADDR 168 169 rm -f /tmp/build.log.$$ 170 171 echo '' | rsh $RHOST -l $RUSER "rm $LOCKFILE" 172 173 exit 0 174