blob: 6ba79732f9f7a1d74aa32a76d1342a9853f2f2bf [file] [log] [blame]
#!/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