view contrib/make_flys_release/make_release.sh @ 6229:3fea9701d58d

Fix gauge determination. If we look upstream ( a > b ) we still have to compare the start value of our range against the gauge and not the end value. The start value is always the relevant value as we handle the direction by checking this against A or B of the gauge. Also: I will never compare doubles with == again. I will never compare doubles with == again. I will never compare doubles with == again. I will never compare doubles with == again. I will never compare doubles with == again.
author Andre Heinecke <aheinecke@intevation.de>
date Thu, 06 Jun 2013 18:23:17 +0200
parents 0aa9c5d8dccb
children 47f4d2c1866a
line wrap: on
line source
#!/bin/bash
# Release script for Flys
#
# Authors:
# Andre Heinecke <aheinecke@intevation.de>
#
# Copyright:
# Copyright (C) 2013 Intevation GmbH
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

set -e
DEFAULT_WD=/tmp/flys-release
DEVELOPER=aheinecke

ARTIFACTS_HG_REPO="http://wald.intevation.org/hg/dive4elements/framework"
HTTPCLIIENT_HG_REPO="http://wald.intevation.org/hg/dive4elements/http-client"
FLYS_HG_REPO="http://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

ORACLE_HIBERNATE=$FLYS_SOURCE_DIR/hibernate-spatial-oracle-1.1.jar
ORACLE_JDBC=$FLYS_SOURCE_DIR/ojdbc5.jar

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

usage: $0 [options] VERSION

Create a flys 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.
   VERSION must be in the format MAYOR.MINOR.PATCH or default
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
TOMCAT_PORT=${TOMCAT_PORT:-8282}
MAPSERVER_URL=${MAPSERVER_URL:-http://flys-devel.intevation.de}
WIKI_URL=${WIKI_URL:-https://flys3-devel.bafg.de/wiki}
# Prefix to FreeSans.ttf
FONT_PATH=${FONT_PATH:-/opt/flys}

# Seddb Configuration
SEDDBURL=${SEDDBURL:-czech-republic.atlas.intevation.de}
SEDDBPORT=${SEDDBPORT:-5432}
SEDDBBACK=${SEDDBBACK:-seddb}
SEDDBUSER=${SEDDBUSER:-flys}
SEDDBPASS=${SEDDBPASS:-flys}
SEDINITSQLS=${SEDINITSQLS:-}


# Backend configuration
BACKENDURL=${BACKENDURL:-czech-republic.atlas.intevation.de}
BACKENDPORT=${BACKENDPORT:-5432}
BACKENDBACK=${BACKENDBACK:-flys_devel}
BACKENDUSER=${BACKENDUSER:-flys_dami}
BACKENDPASS=${BACKENDPASS:-flys_dami}
INITSQLS=${INITSQLS:-}
DGM_PATH=${DGM_PATH:-/opt/river/gewaesser}
LOG_DIR=/var/log/flys

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 [ "$VERSION" = "default" ]; then
    ARTIFACT_PORT=${ARTIFACT_PORT:-29999}
else
    ARTIFACT_PORT=${ARTIFACT_PORT:-`echo 1$VERSION | sed 's/\.//g'`}
fi

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 pull && hg revert -a && hg up && cd $FLYS_SOURCE_DIR
    done;
fi

if [ "$DO_TAG" = "TRUE" ]; then
    echo "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
    hg up $VERSION
    cd $FLYS_SOURCE_DIR
done

rm -rf "$WORK_DIR/server" "$WORK_DIR/client"
cd $WORK_DIR
mkdir -p "$WORK_DIR/server/bin/lib/own"
mkdir "$WORK_DIR/server/shapefiles"
mkdir "$WORK_DIR/client"

echo "[INFO]: Preparing configuration of web client"
echo "[INFO]: Tomcat Port: $TOMCAT_PORT"
echo "[INFO]: Artifact Port: $ARTIFACT_PORT"

#Needs to be done before the tomcat replacement below
sed -i -e "s@http://localhost:8888/flys/mapfish-print@https://localhost/flys-${VERSION}/flys/mapfish-print@g" \
    $FLYS_SOURCE_DIR/river/gwt-client/src/main/webapp/WEB-INF/web.xml

sed -i -e "s@http://localhost:8181@http://localhost:$ARTIFACT_PORT@g" \
       -e "s@http://localhost:8888@http://localhost:$TOMCAT_PORT@g" \
    $FLYS_SOURCE_DIR/river/gwt-client/src/main/webapp/WEB-INF/web.xml

sed -i -e "s@/tmp/flys-client.log@${LOG_DIR}/client-${VERSION}.log@g" \
    $FLYS_SOURCE_DIR/river/gwt-client/src/main/webapp/WEB-INF/log4j.properties

if [ -r "$FEATURES_XML" ]; then
    cp "$FEATURES_XML" $FLYS_SOURCE_DIR/river/gwt-client/src/main/webapp/WEB-INF/features.xml
fi

find $FLYS_SOURCE_DIR/river/ -name \*.properties -o -name \*.xsl |  \
    xargs sed -i "s@https://flys-intern.intevation.de@${WIKI_URL}@g";

sed -i -e "s@/usr/share/fonts/truetype/freefont@${FONT_PATH}@g" \
    $FLYS_SOURCE_DIR/river/gwt-client/src/main/webapp/WEB-INF/config.yaml

if [ ! -f $FLYS_SOURCE_DIR/OpenLayers-2.11.tar.gz ]; then
    echo "INFO: download OpenLayers-2.11 for client"
    cd $FLYS_SOURCE_DIR
    curl -O http://openlayers.org/download/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: compile and build sources"
mvn -f $FLYS_SOURCE_DIR/framework/pom.xml clean compile package install
mvn -f $FLYS_SOURCE_DIR/river/backend/pom.xml clean compile package install
mvn -f $FLYS_SOURCE_DIR/river/artifacts/pom.xml clean compile package dependency:copy-dependencies install
mvn -f $FLYS_SOURCE_DIR/http-client/pom.xml clean compile package install
mvn -f $FLYS_SOURCE_DIR/river/gwt-client/pom.xml clean compile package


echo "INFO: copy dependencies and libs"
cp $FLYS_SOURCE_DIR/framework/artifact-database/target/artifact-database-1.0-SNAPSHOT.jar $WORK_DIR/server/bin/lib/own/
cp $FLYS_SOURCE_DIR/framework/artifacts/target/artifacts-1.0-SNAPSHOT.jar $WORK_DIR/server/bin/lib/own/
cp $FLYS_SOURCE_DIR/framework/artifacts-common/target/artifacts-common-1.0-SNAPSHOT.jar $WORK_DIR/server/bin/lib/own/
cp $FLYS_SOURCE_DIR/river/backend/target/river-backend-1.0-SNAPSHOT.jar $WORK_DIR/server/bin/lib/own/
cp $FLYS_SOURCE_DIR/river/artifacts/target/river-artifacts-1.0-SNAPSHOT.jar $WORK_DIR/server/bin/lib/own/
cp $FLYS_SOURCE_DIR/river/gwt-client/target/gwt-client-1.0-SNAPSHOT.war $WORK_DIR/client/flys-${VERSION}.war
cp $FLYS_SOURCE_DIR/river/artifacts/target/dependency/* $WORK_DIR/server/bin/lib/

echo "INFO: copy scripts and libraries to target destination"
cp ${SCRIPT_DIR}/bin/run.sh $WORK_DIR/server/bin/
cp ${SCRIPT_DIR}/bin/wsplgen.exe $WORK_DIR/server/bin/
cp ${SCRIPT_DIR}/libs/* $WORK_DIR/server/bin/lib/


if [ "$BUILD_ORACLE" = "TRUE" ]; then
    echo "INFO: remove PostgreSQL and PostGIS libraries"
    rm $WORK_DIR/server/bin/lib/postg*
    rm $WORK_DIR/server/bin/lib/hibernate-spatial-postgis*
    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
    if [ ! -f $ORACLE_HIBERNATE ]; then
        echo "Could not find hibernate-spatial-oracle in $ORACLE_HIBERNATE"
        echo "Please make sure that the ORACLE_HIBERNATE variable is set correctly"
        exit 1
    fi
    cp $ORACLE_HIBERNATE $ORACLE_JDBC $WORK_DIR/server/bin/lib/
else
    echo "INFO: remove Oralce libraries"
    rm -f $WORK_DIR/server/bin/lib/hibernate-spatial-oracle-1.1.jar
    rm -f $WORK_DIR/server/bin/lib/ojdbc*
fi

# fetch the configuration stuff
echo "INFO: copy default configuration to target destination"
cp -R $FLYS_SOURCE_DIR/river/artifacts/doc/conf $WORK_DIR/server/

sed -i "s/8181/$ARTIFACT_PORT/g" \
    $WORK_DIR/server/conf/rest-server.xml

sed -i -e "s@http://example.com/@${MAPSERVER_URL}/@g" \
    $WORK_DIR/server/conf/floodmap.xml

sed -i -e "s@http://example.com/@${MAPSERVER_URL}/@g" \
    $WORK_DIR/server/conf/rivermap.xml

sed -i -e "s@/usr/share/fonts/truetype/freefont@${FONT_PATH}@g" \
    $WORK_DIR/server/conf/mapserver/fontset.txt

sed -i -e "s@/tmp/flys-rivers-wms.log@${LOG_DIR}/rivers-wms-${VERSION}.log@g" \
    $WORK_DIR/server/conf/mapserver/river-mapfile.vm

sed -i -e "s@/tmp/flys-user-wms.log@${LOG_DIR}/user-wms-${VERSION}.log@g" \
    $WORK_DIR/server/conf/mapserver/mapfile.vm

sed "s@/tmp/flys-server-default.log@${LOG_DIR}/server-${VERSION}.log@" \
    $SCRIPT_DIR/confs/log4j.properties \
    > $WORK_DIR/server/conf/log4j.properties

sed -i -e "s@<dgm-path>/path/to/rivers/</dgm-path>@<dgm-path>${DGM_PATH}</dgm-path>@g" \
       -e "s@<help-url>http://example.com</help-url>@<help-url>${WIKI_URL}</help-url>@g" \
    $WORK_DIR/server/conf/conf.xml


if [ "$BUILD_ORACLE" = "TRUE" ]; then
    # Oracle backend configuration
    cat > $WORK_DIR/server/conf/backend-db.xml << EOF
<?xml version="1.0" encoding="UTF-8" ?>
<backend-database>
    <user>$BACKENDUSER</user>
    <password>$BACKENDPASS</password>
    <dialect>org.hibernatespatial.oracle.OracleSpatial10gDialect</dialect>
    <driver>oracle.jdbc.driver.OracleDriver</driver>
    <url>jdbc:oracle:thin:@//$BACKENDURL:$BACKENDPORT/$BACKENDBACK</url>
    <connection-init-sqls>$INITSQLS</connection-init-sqls>
</backend-database>
EOF

cat > $WORK_DIR/server/conf/seddb-db.xml << EOF
<?xml version="1.0" encoding="UTF-8" ?>
<seddb-database>
    <user>$SEDDBUSER</user>
    <password>$SEDDBPASS</password>
    <dialect>org.hibernate.dialect.Oracle9iDialect</dialect>
    <driver>oracle.jdbc.driver.OracleDriver</driver>
    <url>jdbc:oracle:thin:@//$SEDDBURL:$SEDDBPORT/$SEDDBBACK</url>
    <connection-init-sqls>$SEDINITSQLS</connection-init-sqls>
</seddb-database>
EOF

else
    #Postgresql backend configuration
    cat > $WORK_DIR/server/conf/backend-db.xml << EOF
<?xml version="1.0" encoding="UTF-8" ?>
<backend-database>
    <user>$BACKENDUSER</user>
    <password>$BACKENDPASS</password>
    <dialect>org.hibernate.dialect.PostgreSQLDialect</dialect>
    <driver>org.postgresql.Driver</driver>
    <url>jdbc:postgresql://$BACKENDURL:$BACKENDPORT/$BACKENDBACK</url>
    <connection-init-sqls>$INITSQLS</connection-init-sqls>
</backend-database>
EOF

cat > $WORK_DIR/server/conf/seddb-db.xml << EOF
<?xml version="1.0" encoding="UTF-8" ?>
<seddb-database>
    <user>$SEDDBUSER</user>
    <password>$SEDDBPASS</password>
    <dialect>org.hibernate.dialect.PostgreSQLDialect</dialect>
    <driver>org.postgresql.Driver</driver>
    <url>jdbc:postgresql://$SEDDBURL:$SEDDBPORT/$SEDDBBACK</url>
</seddb-database>
EOF

fi

mkdir $WORK_DIR/artifactsdb
mkdir $WORK_DIR/datacagedb

cp $FLYS_SOURCE_DIR/framework/artifact-database/doc/schema-h2.sql $WORK_DIR/artifactsdb/artifacts-h2.sql
cp $FLYS_SOURCE_DIR/river/artifacts/doc/conf/datacage.sql $WORK_DIR/datacagedb/datacage.sql

echo "INFO: create h2 database for artifacts and datacage"
$SCRIPT_DIR/h2/createArtifacts.sh $WORK_DIR/artifactsdb/artifacts-h2.sql
$SCRIPT_DIR/h2/createDatacage.sh $WORK_DIR/datacagedb/datacage.sql

mv $WORK_DIR/artifactsdb $WORK_DIR/server/
mv $WORK_DIR/datacagedb $WORK_DIR/server/

echo "INFO: create tarball"
mkdir $WORK_DIR/flys-$VERSION
mv $WORK_DIR/server $WORK_DIR/client $WORK_DIR/flys-$VERSION
cd $WORK_DIR
tar cfz flys-$VERSION.tar.gz flys-$VERSION
echo "INFO: cleanup"
#rm -r $WORK_DIR/flys-$VERSION

echo "DONE: $WORK_DIR/flys-$VERSION.tar.gz"
echo "Changelog: $WORK_DIR/changes_$OLD_REV-$VERSION.txt"

http://dive4elements.wald.intevation.org