Home | History | Annotate | Download | only in scripts
      1 #!/bin/bash
      2 # Entry point to build the Eclipse plugins for the build server.
      3 #
      4 # Input parameters:
      5 # $1: *Mandatory* destination directory. Must already exist. Cannot contain spaces.
      6 # $2: Optional build number. If present, will be appended to the date qualifier.
      7 #     The build number cannot contain spaces *nor* periods (dashes are ok.)
      8 # -z: Optional, prevents the final zip and leaves the udate-site directory intact.
      9 # -i: Optional, if present, the Google internal update site will be built. Otherwise,
     10 #     the external site will be built
     11 # Workflow:
     12 # - make dx, ddms, ping
     13 # - create symlinks (for eclipse code reorg, for ddms, ping)
     14 # - call the actual builder script from Brett
     15 # - zip resulting stuff and move to $DEST
     16 # Note: currently wrap around existing shell script, reuse most of it,
     17 # eventually both might merge as needed.
     18 
     19 
     20 ###################
     21 # temporary disable to deal with build server issues
     22 # see b/14685861
     23 exit 0
     24 ###################
     25 
     26 
     27 set -e  # Fail this script as soon as a command fails -- fail early, fail fast
     28 
     29 PROG_DIR=$(dirname "$0")
     30 
     31 DEST_DIR=""
     32 BUILD_NUMBER=""
     33 CREATE_ZIP="1"
     34 INTERNAL_BUILD=""
     35 ADT_PREVIEW="preview"   # "preview" for preview builds, "" for final release builds.
     36 
     37 function get_params() {
     38   # parse input parameters
     39   while [ $# -gt 0 ]; do
     40     if [ "$1" == "-z" ]; then
     41       CREATE_ZIP=""
     42     elif [ "$1" == "-i" ]; then
     43       INTERNAL_BUILD="-i"
     44     elif [ "$1" != "" ] && [ -z "$DEST_DIR" ]; then
     45       DEST_DIR="$1"
     46     elif [ "$1" != "" ] && [ -z "$BUILD_NUMBER" ]; then
     47       BUILD_NUMBER="$1"
     48     fi
     49     shift
     50   done
     51 }
     52 
     53 function die() {
     54   echo "Error:" $*
     55   echo "Aborting"
     56   exit 1
     57 }
     58 
     59 function check_params() {
     60   # This needs to run from the top android directory
     61   # Automatically CD to the top android directory, whatever its name
     62   D="$PROG_DIR"
     63   cd "$D/../../../" && echo "Switched to directory $PWD"
     64 
     65   # The current Eclipse build has some Linux dependency in its config files
     66   [ `uname` == "Linux" -o `uname` == "Darwin" ] || die "This must run from a Linux or Mac OSX box."
     67 
     68   # Check dest dir exists
     69   [ -n "$DEST_DIR" ] || die "Usage: $0 <destination-directory> [build-number]"
     70   [ -d "$DEST_DIR" ] || die "Destination directory $DEST_DIR must exist."
     71 
     72   # Qualifier is "v" followed by date/time in YYYYMMDDHHSS format, an optional "preview"
     73   # tag and the optional build number.
     74   DATE=`date +v%Y%m%d%H%M`
     75   local preview="${ADT_PREVIEW:+-}${ADT_PREVIEW}"
     76   QUALIFIER="${DATE}${preview}"
     77   [ -n "$BUILD_NUMBER" ] && QUALIFIER="${QUALIFIER}-${BUILD_NUMBER}"
     78 
     79   return 0
     80 }
     81 
     82 function build_plugin() {
     83   sdk/eclipse/scripts/create_all_symlinks.sh
     84 
     85   # Compute the final directory name and remove any leftovers from previous
     86   # runs if any.
     87   BUILD_PREFIX="android-eclipse"
     88   if [ "$INTERNAL_BUILD" ]; then
     89     # append 'eng' qualifier to end of archive name to denote internal build
     90     BUILD_PREFIX="${BUILD_PREFIX}-eng"
     91   fi
     92 
     93   # exclude date from build-zip name so it can be auto-calculated by continuous
     94   # test process unless there's no build number, in which case the date is
     95   # still used (useful for testing)
     96   local preview="${ADT_PREVIEW:+-}${ADT_PREVIEW}"
     97   ZIP_NAME="${BUILD_PREFIX}${preview}-${BUILD_NUMBER:-$DATE}.zip"
     98   [ -d "$DEST_DIR/$BUILD_PREFIX" ] || rm -rfv "$DEST_DIR/$BUILD_PREFIX"
     99 
    100   # Perform the Eclipse build and move the result in $DEST_DIR/android-build
    101   sdk/eclipse/scripts/build_plugins.sh $QUALIFIER $INTERNAL_BUILD -d "$DEST_DIR" -a "$BUILD_PREFIX"
    102 
    103   # Cleanup
    104   [ -d "$QUALIFIER" ] && rm -rfv "$QUALIFIER"
    105 
    106   if [ "$CREATE_ZIP" ]; then
    107     # The result is a full update-site under $DEST_DIR/BUILD_PREFIX
    108     # Zip it and remove the directory.
    109     echo "**** Package in $DEST_DIR"
    110     [ -d "$DEST_DIR/$BUILD_PREFIX" ] || \
    111       die "Build failed to produce $DEST_DIR/$BUILD_PREFIX"
    112     cd "$DEST_DIR"
    113     [ -f "$ZIP_NAME" ] && rm -rfv "$ZIP_NAME"
    114     cd "$BUILD_PREFIX"
    115     zip -9r "../$ZIP_NAME" *
    116     cd .. # back to $DEST_DIR
    117     rm -rfv "$BUILD_PREFIX"  # removes the directory, not the zip
    118     echo "ZIP of Update site available at $DEST_DIR/${ZIP_NAME}"
    119   else
    120     echo "Update site available in $DEST_DIR/$BUILD_PREFIX"
    121   fi
    122 }
    123 
    124 function build_adt_ide() {
    125   local preview="${ADT_PREVIEW}${ADT_PREVIEW:+-}"
    126   if [[ -z $INTERNAL_BUILD ]]; then
    127     # This needs to run from the top android directory
    128     D="$PROG_DIR"
    129     cd "$D/../../../" && echo "Switched to directory $PWD"
    130 
    131     IDE_SCRIPTS="sdk/eclipse/scripts/build_ide.sh tools/idea/build_ide_ext.sh"
    132     for sc in $IDE_SCRIPTS; do
    133       if [[ -x $sc ]]; then
    134         echo "RUNNING $sc from $PWD"
    135         $sc "$DEST_DIR" "$QUALIFIER" "${preview}${BUILD_NUMBER:-$QUALIFIER}"
    136       else
    137         echo "WARNING: skipping non-exec $sc script"
    138       fi
    139     done
    140   fi
    141 }
    142 
    143 get_params "$@"
    144 check_params
    145 ( build_plugin )
    146 ( build_adt_ide )
    147 
    148