Home | History | Annotate | Download | only in gnome-2-16
      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