#!/bin/bash
# Set PROGram name
PROG=$(basename $0)
########################################################################
#+
#+ NAME
#+     $PROG - ChromeOS image pusher (.zip and .bin)
#+ 
#+ SYNOPSIS
#+     $PROG  [--nolatest] [--beta] [--branch=<branch>]
#+             --board=<board> <image directory>
#+     $PROG  [--help | -man] 
#+     $PROG  [--usage | -?]
#+ 
#+ DESCRIPTION
#+     Push images up to archive server, chromeos-images and chrome-master.mtv.
#+     Always pushes up to -rc (release candidate) namespace.
#+ 
#+ OPTIONS
#+     [--beta]                       - Beta Channel
#+     [--nolatest]                   - Do not set LATEST file
#+     [--branch]                     - branch value determines if support
#+                                      scripts also get updated
#+     [--help | -man]                - display man page for this script
#+     [--usage | -?]                 - display usage information
#+ 
#+ EXAMPLES
#+ 
#+ FILES
#+     Applicable files
#+     Related files
#+ 
#+ SEE ALSO
#+     stdlib.sh                 -  function definitions for TimeStamp, etc.
#+     Other related scripts
#+ 
#+ BUGS/TODO
#+     Known problems with script
#+ 
#- AUTHOR & DT : djmm Wed Jul 21 15:02:45 PDT 2010
#-
########################################################################
# If NO ARGUMENTS should return *usage*, uncomment the following line:
usage=${1-yes}

# This construct allows $PROG to be a symlink or simply PATH'd to
symlink=$(readlink $0)
# Set up basic env and standard functions
. $(dirname ${symlink:-$0})/stdlib.sh

# Set some default options
DRYRUN=false
VERBOSE=false
CHANNEL=dev-channel
NOLATEST=false
RC=-rc
for arg in $LOOSEARGS
do
   case "$arg" in
     --beta) CHANNEL=beta-channel ;;
     --nolatest) NOLATEST=true ;;
     -v) VERBOSE=true ;;
      *) looseargs="$looseargs $arg" ;;
   esac
done
# strip leading spaces from final looseargs to pass to program
basedir=$(echo $looseargs)
basedir=$(cd $basedir && pwd)
if [ -z "$board" ]
then
   $PROG -?
   exit
fi
BOARD=$board

###############################################################################
# MAIN
###############################################################################
tooldir=$(dirname $0)
cversion=$(basename $basedir)
cversion2=${cversion%%-*}
binfile=/tmp/ChromeOS-$cversion-$BOARD.bin.gz
image_host='chromeos-images.corp.google.com'
# This should change based on architecture/board and dev/beta channel
imagetarget_base=/var/www/chromeos-official
imagetarget=$imagetarget_base/$CHANNEL/$BOARD$RC
usbtarget=/usr/local/google/cltbld/chromeos/$CHANNEL
baseimagename=chromiumos_base_image.bin
baseimage=$(dirname $basedir)/src/build/images/$BOARD/$cversion2-a1/$baseimagename

# BEGIN script
TimeStamp begin

ReleaseNotify() {
local lmailto=${1:-"$USER"}
local lmailfile=/tmp/$PROG-mail.$$

logecho -r
logecho "Notifying $lmailto of release push..."
cat <<+_MailFile > $lmailfile
$cversion2 $BOARD is ready for testing at http://go/chromeos-images.
<P>
The ChromeOS-RE Team
+_MailFile

mail -s "ChromeOS $cversion2 $BOARD ready for testing" \
     -a "From: ChromeOS Releng<chromeos-re@google.com>" \
     -a "Content-type: text/html" $lmailto < $lmailfile

# cleanup
rm -f $lmailfile
}

# SEND TO MAIN IMAGE TARGET
if ssh $image_host test -d $imagetarget/$cversion2
then
   echo "$imagetarget already exists.  Skipping..."
else
   echo "Sending images up to $imagetarget/$cversion2..."
   ssh $image_host mkdir -p $imagetarget/$cversion2
   scp $basedir/image.zip $image_host:$imagetarget/$cversion2/ChromeOS-$cversion-$BOARD.zip
   scp $basedir/factory_image.zip $image_host:$imagetarget/$cversion2/ChromeOS-factory-$cversion-$BOARD.zip
   scp $basedir/*.tar.bz2 $image_host:$imagetarget/$cversion2
   if [ -f $basedir/au-generator.zip ]; then
      scp $basedir/au-generator.zip $image_host:$imagetarget/$cversion2/
   fi
   scp $basedir/debug.tgz $image_host:$imagetarget/$cversion2/debug-$BOARD.tgz
   # Copy the build log, ChangeLog and manifest.xml files
   scp $basedir/*.log $basedir/*.*ml $image_host:$imagetarget/$cversion2
   # Only update support scripts if master
   if [ "$branch" = master ]
   then
      scp $(dirname $0)/promoterc $image_host:$imagetarget_base
   fi

   case "$BOARD" in
     x86-mario|x86-agz|x86-alex|x86-zgb)
       # Create PVT signed/mod'd images by default
       ssh $image_host touch $imagetarget/$cversion2/.tobesigned
       # Copy over the new format signing insturctions.
       scp $(dirname $0)/signer_instructions/$BOARD.instructions \
         $image_host:$imagetarget/$cversion2/ChromeOS-$cversion-$BOARD.instructions
       ;;
   esac

   $NOLATEST || ssh $image_host "cd $imagetarget && echo $cversion > LATEST"
   ReleaseNotify chromeos-releases@google.com
fi

if [ "$USER" = "chrome-bot" ]
then
   Exit 0 "Can't send images to chrome-master.mtv from bot jail.  Do it by hand. Exiting..."
fi

# SEND TO USB TARGET
echo "Compressing image..."
# Make compressed image
if [ -f $baseimage ]
then
   cat $baseimage |gzip > $binfile
else
   echo "$baseimage not found!  Extracting from image.zip..."
   mkdir /tmp/foobar.$$
   cd /tmp/foobar.$$
   unzip $basedir/image.zip $baseimagename
   cat $baseimagename | gzip > $binfile
   cd /tmp
   rm -rf /tmp/foobar.$$
fi
# To store usb key insructions images
echo "Copying to chrome-master.mtv..."
scp $binfile chrome-master.mtv:$usbtarget
if ! $NOLATEST
then
   echo "Updating LATEST-$BOARD$RC file..."
   ssh chrome-master.mtv "echo $(basename $binfile) > $usbtarget/LATEST-$BOARD$RC"
fi
# Recursive 775 of upload dir
ssh chrome-master.mtv "chmod -R 775 $usbtarget 2>&-"

# Copy script and README
scp $tooldir/mkcrosusb.sh chrome-master.mtv:$usbtarget/..
scp $tooldir/mkcrosusb.README chrome-master.mtv:$usbtarget/../README.txt
rm -f $binfile

# END script
TimeStamp end
