Mercurial > dive4elements > river
view contrib/make_flys_release/make_release.sh @ 6001:bd6d7da9c6fd
WQKmsFactory: prevent NPE.
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Mon, 13 May 2013 11:16:28 +0200 |
parents | 75803c9eb63b |
children | bf5dba3f66ac |
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://flys-intern.intevation.de/Flys-3.0} # Prefix to FreeSans.ttf FONT_PATH=${FONT_PATH:-/opt/flys} # Seddb Configuration SEDDBURL=${SEDDBURL:-czech-republic.atlas.intevation.de} SEDDBPORT=${SEDDBPORT:-1521} SEDDBBACK=${SEDDBBACK:-XE} SEDDBUSER=${SEDDBUSER:-seddb} SEDDBPASS=${SEDDBPASS:-seddbpass} 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}/river/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 # XXX: Are they really used at runtime? 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 cat > $WORK_DIR/server/conf/seddb-db.xml << EOF <?xml version="1.0" encoding="UTF-8" ?> <seddb-database> <!-- This is the default SedDB db configuration. --> <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 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 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 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"