#!/bin/bash # Set PROGram name PROG=$(basename $0) ######################################################################## #+ #+ NAME #+ $PROG - ChromeOS image pusher (.zip and .bin) #+ #+ SYNOPSIS #+ $PROG [--nolatest] [--beta] [--branch=] #+ --board= #+ $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 #+ #+ SEE ALSO #+ stdlib.sh - function definitions for TimeStamp, etc. #+ #+ BUGS/TODO #+ #- 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 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=$(CanonicalizePath $(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.

The ChromeOS-RE Team +_MailFile mail -s "ChromeOS $cversion2 $BOARD ready for testing" \ -a "From: ChromeOS Releng" \ -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 logecho "$imagetarget/$cversion2 already exists. Skipping..." else logecho "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 # Put up a temp copy of the script to use remote_tooldir=/tmp/pushimage.$$ ssh $image_host "rm -rf $remote_tooldir && mkdir -p $remote_tooldir" scp $TOOLDIR/contrib/channelsign $TOOLDIR/contrib/gsrestore \ $image_host:$remote_tooldir instructionsfile=$TOOLDIR/signer_instructions/$BOARD.instructions if [ -f $instructionsfile ] then # Copy over the new format signing instructions. scp $instructionsfile \ $image_host:$imagetarget/$cversion2/ChromeOS-$cversion-$BOARD.instructions # Check signing instructions for final destination signingchannels=$(awk '/^channel/ {print $3}' $instructionsfile |sort -u) for sc in $signingchannels do if [ "$sc" = dev ] then # Set signing for dev logecho "Touching .tobesigned file..." ssh $image_host touch $imagetarget/$cversion2/.tobesigned else # Or move channels ssh $image_host "cd $imagetarget_base && \ $remote_tooldir/channelsign $cversion2 $sc $BOARD && \ rm -rf $remote_tooldir" fi done fi $NOLATEST || ssh $image_host "cd $imagetarget && echo $cversion > LATEST" ReleaseNotify chromeos-releases@google.com fi # Cleanup ssh $image_host rm -rf $remote_tooldir # END script TimeStamp end