view contrib/make_flys_release/make_release.sh @ 8709:71ae18553377

(issue1754) Also fixup master artifact for already loaded recommendations As the load many call creates (and needs to create) all artifacts in the reccomendations this would break "old" recommendations after a reload through the "Pencil" mode. A better fix would probably be to just set the master artifiact in the recommendations but due to the extremly weird interaction with the server at this point it is not trivial to identify how this can be done.
author Andre Heinecke <andre.heinecke@intevation.de>
date Fri, 24 Apr 2015 15:57:23 +0200
parents 25f9ab25affd
children 1e9667ef5742
line wrap: on
line source
#!/bin/bash
# Release script for Dive4Elements River
#
# Authors:
# Andre Heinecke <aheinecke@intevation.de>
#
# Copyright (C) 2011 - 2014 by Bundesanstalt für Gewässerkunde
# Software engineering by Intevation GmbH
#
# This file is Free Software under the GNU AGPL (>=v3)
# and comes with ABSOLUTELY NO WARRANTY! Check out the
# documentation coming with Dive4Elements River for details.

set -e
LC_ALL=en_US.UTF-8
DEFAULT_WD=/tmp/flys-release
DEVELOPER=aheinecke

ARTIFACTS_HG_REPO="https://wald.intevation.org/hg/dive4elements/framework"
HTTPCLIIENT_HG_REPO="https://wald.intevation.org/hg/dive4elements/http-client"
FLYS_HG_REPO="https://wald.intevation.org/hg/dive4elements/river"

REPOS="river http-client framework"
# Do not use spaces in path
FLYS_SOURCE_DIR=/local-vol1/aheinecke/flys-release

SCRIPT_DIR=$(readlink -f `dirname $0`)
usage(){
    cat << EOF

usage: $0 [options] VERSION

Create a D4E River package

OPTIONS:
   -?, --help          Show this message
   -w                  The working directory to use (do not use spaces in path)
                       Default: $DEFAULT_WD
   -t                  Tag the current default branch as "VERSION"
   -o, --oracle        Release is for oracle.
                       Suitable jar-file for JDBC driver has to be given with
                       the environment variable ORACLE_JDBC
   VERSION must specify a tag (usually MAYOR.MINOR.PATCH) or a branch name.
EOF
exit 0
}
#   --backend-db-url                Url of database backend. Default: $BACKENDURL
#   --backend-db-pass               Backend db password. Default: $BACKENDPASS
#   --backend-db-port               Backend db port. Default: $BACKENDPORT
#   --backend-db-user               Backend db user. Default: $BACKENDUSER
#   --backend-db-backend            Backend db backend name. Default: $BACKENDBACK
#   --seddb-url                     Sediment db url. Default: $SEDDBURL
#   --seddb-port                    Sediment db port. Default: $SEDDBPORT
#   --seddb-user                    Sediment db user. Default: $SEDDBUSER
#   --seddb-pass                    Sediment db password. Default: $SEDDBPASS
#   --seddb-back                    Sediment db backend. Default: $SEDDBBACK

# customizable variables
ELBE_MODEL_UUID=${ELBE_MODEL_UUID:-1a4825f6-925f-11e3-8165-001f29e71d12}

OPTS=`getopt -o ?w:,t,o \
     -l help,oracle \
     -n $0 -- "$@"`

if [ $? != 0 ] ; then usage; fi
eval set -- "$OPTS"
while true ; do
  case "$1" in
    "-?"|"--help")
      usage;;
    "--")
      shift
      break;;
    "-w")
      WORK_DIR=$2
      shift 2;;
    "-o"|"--oracle")
      BUILD_ORACLE="TRUE"
      shift;;
    "-t")
      DO_TAG="TRUE"
      shift;;
    *)
      echo "Unknown Option $1"
      usage;;
  esac
done

if [ $# != 1 ]; then
    usage
fi

VERSION=$1

if [ -z $WORK_DIR ]; then
  WORK_DIR=$DEFAULT_WD
fi

mkdir -p $WORK_DIR

if [ ! -d $FLYS_SOURCE_DIR ]; then
    mkdir -p $FLYS_SOURCE_DIR
    echo "Cloning sources"
    cd $FLYS_SOURCE_DIR
    hg clone $ARTIFACTS_HG_REPO framework
    hg clone $HTTPCLIIENT_HG_REPO http-client
    hg clone $FLYS_HG_REPO river
else
    echo "Updating sources / Reverting changes"
    cd $FLYS_SOURCE_DIR
    for repo in $REPOS; do
        cd $repo && hg purge && hg revert -a && hg pull -u && cd -
    done;
fi

if [ "$DO_TAG" = "TRUE" ]; then
    echo "INFO: Tagging version $VERSION"
    for repo in $REPOS; do
        cd $repo
        CHANGESET=$(hg log -l1 |head -1 | awk -F: '{print $3}')
        echo ""
        echo "Do you really want to tag $repo rev: $CHANGESET as Version $VERSION?"
        echo "press enter to continue or CTRL+C to abort."
        echo ""
        hg log -l1
        read
        OLD_REV=$(cat .hgtags | tail -1 | awk '{print $2}')
        hg tag $VERSION -m "Added tag $VERSION for changeset $CHANGESET"
        hg push ssh://$DEVELOPER@scm.wald.intevation.org/hg/dive4elements/$repo
        echo "Changelog for $repo" >> $WORK_DIR/changes_$OLD_REV-$VERSION.txt
        echo "#############################################################################" \
            >> $WORK_DIR/changes_$OLD_REV-$VERSION.txt
        hg log -r $VERSION:$OLD_REV --style changelog >> $WORK_DIR/changes_$OLD_REV-$VERSION.txt
        cd $FLYS_SOURCE_DIR
    done;
fi

# Update to current version
for repo in $REPOS; do
    cd $repo
    if [ -z "`hg tags | sed -n "/$VERSION/p"`" -a -z "`hg branches | sed -n "/$VERSION/p"`" ]
    then
        echo "WARNING: $VERSION not found in $repo! Updating to default."
        hg up default
    else
        hg up "$VERSION"
    fi
    cd $FLYS_SOURCE_DIR
done


if [ ! -f $FLYS_SOURCE_DIR/OpenLayers-2.11.tar.gz ]; then
    echo "INFO: download OpenLayers-2.11 for client"
    cd $FLYS_SOURCE_DIR
    wget "https://github.com/openlayers/openlayers/releases/download/release-2.11/OpenLayers-2.11.tar.gz"
    tar xvfz OpenLayers-2.11.tar.gz
    # TODO: Remove more superfluous OpenLayers stuff.
    rm -rf OpenLayers-2.11/doc
    rm -rf OpenLayers-2.11/tests
    rm -rf OpenLayers-2.11/examples
    cd $WORK_DIR
fi
cp -r $FLYS_SOURCE_DIR/OpenLayers-2.11 \
    $FLYS_SOURCE_DIR/river/gwt-client/src/main/webapp/


echo "INFO: Downloading smartGWT"
mvn com.isomorphic:isc-maven-plugin:install -Dproduct=SMARTGWT -Dlicense=LGPL \
    -DbuildNumber=4.1p -DbuildDate=2014-12-13 -Dworkdir=$WORK_DIR

echo "INFO: compile sources"
mvn -f $FLYS_SOURCE_DIR/framework/pom.xml clean compile install
mvn -f $FLYS_SOURCE_DIR/river/backend/pom.xml clean compile install
mvn -f $FLYS_SOURCE_DIR/river/artifacts/pom.xml clean compile
mvn -f $FLYS_SOURCE_DIR/http-client/pom.xml clean compile install
# gwt-client has to be compiled later to allow custom CLIENT_CONF

echo "INFO: create h2 database for artifacts and datacage"
cd $FLYS_SOURCE_DIR/river/artifacts
rm -rf artifactsdb datacagedb
$FLYS_SOURCE_DIR/framework/artifact-database/bin/createArtifacts.sh
$FLYS_SOURCE_DIR/river/artifacts/bin/createDatacage.sh
cd -

echo "INFO: download WSPLGEN"
cd $WORK_DIR
wget \
    https://wald.intevation.org/frs/download.php/1496/wsplgen-linux-64bit-static.gz \
    https://wald.intevation.org/frs/download.php/1498/wsplgen-linux-32bit-static.gz
gunzip wsplgen-linux-64bit-static.gz wsplgen-linux-32bit-static.gz
chmod +x wsplgen-linux-*
cp wsplgen-linux-32bit-static $FLYS_SOURCE_DIR/river/artifacts/bin/wsplgen
cd -

if [ "$DO_TAG" = "TRUE" ]; then
    echo "INFO: Building packages for publication"
    cd $FLYS_SOURCE_DIR/river/artifacts
    mvn package assembly:single
    mv target/river-artifacts-1.0-SNAPSHOT-bin.tar.bz2 \
        $WORK_DIR/d4e-river-$VERSION.tar.bz2 && cd ..
    cd gwt-client && mvn clean compile package
    mv target/gwt-client-1.0-SNAPSHOT.war \
        $WORK_DIR/d4e-river-$VERSION.war && cd ..
fi


echo "INFO: Preparing configuration of web client"

#Needs to be done before the tomcat replacement below
sed -i -e "s@1a4825f6-925f-11e3-8165-001f29e71d12@${ELBE_MODEL_UUID}@g" \
    $FLYS_SOURCE_DIR/river/gwt-client/src/main/webapp/images/FLYS_Karte_interactive.html

if [ -d $WEBINF ]; then
    echo "INFO: copy custom client configuration to target destination"
    WEBINF_DIR=$FLYS_SOURCE_DIR/river/gwt-client/src/main/webapp/WEB-INF/
    cp -R $WEBINF/* $WEBINF_DIR
    for file in `find $WEBINF_DIR/ -type f`; do
        sed -i -e "s@D4E_VERSION@${VERSION}@g" $file
    done
fi

if [ -f $CLIENT_CONF ]; then
    echo "INFO: copy custom java script client configuration to target destination"
    cp $CLIENT_CONF \
        $FLYS_SOURCE_DIR/river/gwt-client/src/main/java/org/dive4elements/river/client/client/config.xml
fi

if [ -n $DGM_PATH ]; then
    sed -i -e "s@<dgm-path>.*</dgm-path>@<dgm-path>${DGM_PATH}</dgm-path>@g" \
        $FLYS_SOURCE_DIR/river/artifacts/doc/conf/conf.xml
fi

if [ -n $WIKI_URL ]; then
    sed -i -e "s@<help-url>http://example.com</help-url>@<help-url>${WIKI_URL}</help-url>@g" \
        $FLYS_SOURCE_DIR/river/artifacts/doc/conf/conf.xml
fi

if [ -d $SERVER_CONF ]; then
    echo "INFO: copy custom server configuration to target destination"
    cp -R $SERVER_CONF/* $FLYS_SOURCE_DIR/river/artifacts/doc/conf/
    for file in `find $FLYS_SOURCE_DIR/river/artifacts/doc/conf -type f`; do
        sed -i -e "s@D4E_VERSION@${VERSION}@g" $file
    done
fi


echo "INFO: compile and build sources"
cp $WORK_DIR/wsplgen-linux-64bit-static \
    $FLYS_SOURCE_DIR/river/artifacts/bin/wsplgen

if [ "$BUILD_ORACLE" = "TRUE" ]; then
    if [ ! -f $ORACLE_JDBC ]; then
        echo "Could not find oracle jdbc in $ORACLE_JDBC"
        echo "Please make sure that the ORACLE_JDBC variable is set correctly"
        exit 1
    fi
    mvn install:install-file -DgroupId=ojdbc -DartifactId=ojdbc \
       -Dversion=0 -Dpackaging=jar -Dfile=$ORACLE_JDBC -DgeneratePom=true
    mvn -f $FLYS_SOURCE_DIR/river/backend/pom-oracle.xml clean compile install
    mvn -f $FLYS_SOURCE_DIR/river/artifacts/pom-oracle.xml \
        package assembly:single
else
    mvn -f $FLYS_SOURCE_DIR/river/artifacts/pom.xml package assembly:single
fi
mvn -f $FLYS_SOURCE_DIR/river/gwt-client/pom.xml clean compile package


echo "INFO: create tarball"
cd $WORK_DIR
mv $FLYS_SOURCE_DIR/river/artifacts/target/river-artifacts-1.0-SNAPSHOT-bin.tar \
    flys-$VERSION.tar
mv $FLYS_SOURCE_DIR/river/gwt-client/target/gwt-client-1.0-SNAPSHOT.war \
    flys-${VERSION}.war
tar -rf flys-$VERSION.tar flys-${VERSION}.war

if [ -f $INSTALL ]; then
    echo "INFO: prepare custom installation script"
    cp $INSTALL .
    sed -i "s/D4E_VERSION/$VERSION/g" ./`basename $INSTALL`
    tar -rf flys-$VERSION.tar `basename $INSTALL`
fi

## TODO: tag with maven and include basedir with correct name in assembly ##
rm -rf flys-$VERSION && mkdir flys-$VERSION
tar -xf flys-$VERSION.tar -C flys-$VERSION
tar cfz flys-$VERSION.tar.gz flys-$VERSION
##

if [ "$DO_TAG" = "TRUE" ]; then
    echo "Binary-packages for publication:"
    echo "_ $WORK_DIR/d4e-river-$VERSION.tar.bz2"
    echo "_ $WORK_DIR/d4e-river-$VERSION.war"
fi
echo "DONE: $WORK_DIR/flys-$VERSION.tar.gz"
echo "Changelog: $WORK_DIR/changes_$OLD_REV-$VERSION.txt"

http://dive4elements.wald.intevation.org