#!/bin/sh # # This script builds a delivery # # Parameters: # $1: target directory # $2: build type (dev, rel) # $3: SVN location (trunk, tags, branches) # $4: delivery name # $5: delivery version # $6: branch identifier # # Environment variable that MUST be defined # by the calling script # # SVN_URL SVN_USER SVN_PASS # # Source functions # . `dirname $0`/functions # # Binaries # BIN_BASENAME="/bin/basename" BIN_CHMOD="/bin/chmod" BIN_ECHO="/bin/echo" BIN_MKDIR="/bin/mkdir" BIN_RM="/bin/rm" BIN_SVN="/usr/bin/svn" # # Parameters # TARGET_DIR="" BUILD_TYPE="" SVN_LOCATION="" SVN_DELIVERY="" SVN_VERSION="" SVN_BRANCH="" # # Internal variables # EXIT=0 TMP_DIR="" SVN_PATH_PACKAGE="" VERSION="" # # Main script # $BIN_ECHO "Preparing to build delivery '$4'" if [ $EXIT -eq 0 ] ; then check_svn_parameters if [ -z "$1" ] ; then $BIN_ECHO "-> Target directory parameter is missing" EXIT=1 else if [ -d $1 ] ; then TARGET_DIR=$1 else $BIN_ECHO "-> Target directory '$1' does not exist" EXIT=1 fi fi if [ -z "$2" ] ; then $BIN_ECHO "-> Build type is missing (dev or rel)" EXIT=1 else if [ "$2" != "dev" -a "$2" != "rel" ] ; then $BIN_ECHO "-> Build type '$2' is not supported (dev or rel)" EXIT=1 else BUILD_TYPE=$2 fi fi if [ -z "$3" ] ; then $BIN_ECHO "-> SVN location parameter is missing (trunk, tags or branches)" EXIT=1 else if [ "$3" != "trunk" -a "$3" != "tags" -a "$3" != "branches" ] ; then $BIN_ECHO "-> SVN location '$3' is not supported (trunk, tags or branches)" EXIT=1 else SVN_LOCATION=$3 fi fi if [ -z "$4" ] ; then $BIN_ECHO "-> SVN delivery parameter is missing" EXIT=1 else SVN_DELIVERY=$4 fi if [ -z "$5" ] ; then if [ "$SVN_LOCATION" = "tags" -o "$SVN_LOCATION" = "branches" ] ; then $BIN_ECHO "-> SVN version parameter is missing" EXIT=1 fi else SVN_VERSION=$5 fi if [ -z "$6" ] ; then if [ "$SVN_LOCATION" = "branches" ] ; then $BIN_ECHO "-> SVN branch parameter is missing" EXIT=1 fi else SVN_BRANCH=$6 fi if [ ! -x $BIN_SVN ] ; then $BIN_ECHO "-> Binary '$BIN_SVN' is missing" EXIT=1 fi fi if [ $EXIT -eq 0 ] ; then case "$SVN_LOCATION" in trunk) SVN_PATH_PACKAGE="trunk/delivery/$SVN_DELIVERY/package" ;; tags) SVN_PATH_PACKAGE="tags/delivery/$SVN_DELIVERY/$SVN_VERSION/package" ;; branches) SVN_PATH_PACKAGE="branches/delivery/$SVN_DELIVERY/$SVN_VERSION-$SVN_BRANCH/package" ;; *) $BIN_ECHO "-> SVN location '$SVN_LOCATION' is not supported" EXIT=1 esac fi if [ $EXIT -eq 0 ] ; then TMP_DIR="$TARGET_DIR/`$BIN_BASENAME $0`" if [ -d $TMP_DIR ] ; then $BIN_ECHO "-> Directory '$TMP_DIR' already exists" EXIT=1 else $BIN_MKDIR -p $TMP_DIR/package if [ ! -d $TMP_DIR/package ] ; then $BIN_ECHO "-> Error while creating directory '$TMP_DIR/package'" EXIT=1 fi fi fi if [ $EXIT -eq 0 ] ; then pushd $TMP_DIR/package >> /dev/null 2>&1 $BIN_SVN checkout --username $SVN_USER --password $SVN_PASS $SVN_URL/$SVN_PATH_PACKAGE . >> /dev/null 2>&1 if [ $? -ne 0 ] ; then $BIN_ECHO "-> Error while checkouting URL '$SVN_URL/$SVN_PATH_PACKAGE'" EXIT=1 fi popd >> /dev/null 2>&1 fi if [ $EXIT -eq 0 ] ; then if [ ! -e $TMP_DIR/package/config ] ; then $BIN_ECHO "-> The package configuration file '$TMP_DIR/package/config' is missing" EXIT=1 fi fi if [ $EXIT -eq 0 ] ; then . $TMP_DIR/package/config if [ -z "$VERSION" ] ; then VERSION="1.0" fi fi if [ $EXIT -eq 0 ] ; then $BIN_MKDIR -p $TMP_DIR/packaging if [ ! -d $TMP_DIR/packaging ] ; then $BIN_ECHO "-> Error while creating directory '$TMP_DIR/packaging'" EXIT=1 fi fi if [ $EXIT -eq 0 ] ; then pushd $TMP_DIR/packaging >> /dev/null 2>&1 case "$SVN_LOCATION" in trunk) SVN_PATH_DELIVERY="trunk/packaging/delivery" ;; *) SVN_PATH_DELIVERY="$SVN_LOCATION/packaging/$VERSION/delivery" ;; esac $BIN_SVN checkout --username $SVN_USER --password $SVN_PASS $SVN_URL/$SVN_PATH_DELIVERY . >> /dev/null 2>&1 if [ $? -ne 0 ] ; then $BIN_ECHO "-> Error while checkouting URL '$SVN_URL/$SVN_PATH_DELIVERY'" EXIT=1 fi popd >> /dev/null 2>&1 fi if [ $EXIT -eq 0 ] ; then if [ ! -e $TMP_DIR/packaging/build ] ; then $BIN_ECHO "-> File '$TMP_DIR/packaging/build' is missing" EXIT=1 fi fi if [ $EXIT -eq 0 ] ; then $BIN_ECHO "-> OK" $BIN_CHMOD 755 $TMP_DIR/packaging/build $TMP_DIR/packaging/build "$TARGET_DIR" "$BUILD_TYPE" "$SVN_LOCATION" "$SVN_DELIVERY" "$SVN_VERSION" "$SVN_BRANCH" if [ $? -ne 0 ] ; then EXIT=1 fi fi if [ -n "$TMP_DIR" -a "$TMP_DIR" != "/" ] ; then $BIN_RM -rf $TMP_DIR fi exit $EXIT