# HG changeset patch # User Andre Heinecke # Date 1363103575 -3600 # Node ID 8fa0c522bef30c7fe0812392bb2c4cd4101a9761 # Parent 3ba2917e49d387a3d5123e7df0f20be0729965a8 Improve make_release script to optinally handle tagging and be more generic. It can now be used to prepare a fully configured version of flys. There are still some variables to set in the script or to be overwritten by environment variables. diff -r 3ba2917e49d3 -r 8fa0c522bef3 contrib/make_flys_release/make_release.sh --- a/contrib/make_flys_release/make_release.sh Tue Mar 12 16:50:47 2013 +0100 +++ b/contrib/make_flys_release/make_release.sh Tue Mar 12 16:52:55 2013 +0100 @@ -1,149 +1,303 @@ #!/bin/bash +# Release script for Flys +# +# Authors: +# Andre Heinecke +# +# 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 -echo "INFO: define required variables" ARTIFACTS_HG_REPO="http://wald.intevation.org/hg/dive4elements/artifacts" HTTPCLIIENT_HG_REPO="http://wald.intevation.org/hg/dive4elements/http-client" FLYS_HG_REPO="http://wald.intevation.org/hg/dive4elements/flys" -ARTIFACTS_HG="hg.artifacts" -HTTPCLIENT_HG="hg.http-client" -FLYS_HG="hg.flys" +REPOS="artifacts http-client flys" +# Do not use spaces in path +FLYS_SOURCE_DIR=/local-vol1/aheinecke/flys-release -PREFIX="flys-" -RELEASE=${RELEASE:-default} -RELEASE_DATE=`date +'%Y-%m-%d'` -DIRECTORY=$PREFIX$RELEASE-$RELEASE_DATE +SCRIPT_DIR=$(readlink -f `dirname $0`) +usage(){ + cat << EOF -ARTIFACT_PORT=${ARTIFACT_PORT:-9002} -TOMCAT_PORT=${TOMCAT_PORT:-8005} +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 +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:-czech-republic.atlas.intevation.de} WIKI_URL=${WIKI_URL:-https://flys-intern.intevation.de/Flys-3.0} -echo "INFO: create server directories" -mkdir -p $DIRECTORY/server/bin/lib/own -mkdir $DIRECTORY/server/shapefiles -mkdir $DIRECTORY/client - -echo "INFO: checkout sources" -echo " ... checkout $ARTIFACTS_HG_REPO" - -rm -rf $ARTIFACTS_HG -hg clone $ARTIFACTS_HG_REPO $ARTIFACTS_HG -(cd $ARTIFACTS_HG && hg co $RELEASE) +# Seddb Configuration +SEDDBURL=${SEDDBURL:-czech-republic.atlas.intevation.de} +SEDDBPORT=${SEDDBPORT:-1521} +SEDDBBACK=${SEDDBBACK:-XE} +SEDDBUSER=${SEDDBUSER:-seddb} +SEDDBPASS=${SEDDBPASS:-seddbpass} -echo " ... checkout $HTTPCLIIENT_HG_REPO" -rm -rf $HTTPCLIENT_HG -hg clone $HTTPCLIIENT_HG_REPO $HTTPCLIENT_HG -(cd $HTTPCLIENT_HG && hg co $RELEASE) +# Backend configuration +BACKENDURL=${BACKENDURL:-czech-republic.atlas.intevation.de} +BACKENDPORT=${BACKENDPORT:-5432} +BACKENDBACK=${BACKENDBACK:-flys_2912} +BACKENDUSER=${BACKENDUSER:-flys_dami} +BACKENDPASS=${BACKENDPASS:-flys_dami} -echo " ... checkout $FLYS_HG_REPO" -rm -rf $FLYS_HG -hg clone $FLYS_HG_REPO $FLYS_HG -(cd $FLYS_HG && hg co $RELEASE) +OPTS=`getopt -o ?w:,t,o \ + -l help,oracle \ + -n $0 -- "$@"` -# adapt client configuration -echo "INFO: prepare configuration of web client" +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 +ARTIFACT_PORT=${ARTIFACT_PORT:-`echo 1$VERSION | sed 's/\.//g'`} + +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 artifacts + hg clone $HTTPCLIIENT_HG_REPO http-client + hg clone $FLYS_HG_REPO flys +else + echo "Updating sources / Reverting changes" + cd $FLYS_SOURCE_DIR + for repo in $REPOS; do + cd $repo && hg pull && hg up && hg revert -a && 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 + hg tag $VERSION -m "Added tag $VERSION for changeset $CHANGESET" + hg push ssh://$DEVELOPER@scm.wald.intevation.org/hg/dive4elements/$repo + 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" sed -i -e "s@http://localhost:8181@http://localhost:$ARTIFACT_PORT@g" \ -e "s@http://localhost:8888@http://localhost:$TOMCAT_PORT@g" \ - $FLYS_HG/flys-client/src/main/webapp/WEB-INF/web.xml + $FLYS_SOURCE_DIR/flys/flys-client/src/main/webapp/WEB-INF/web.xml -sed -i -e "s@/tmp/flys-client.log@/var/log/flys/client-${RELEASE}.log@g" \ - $FLYS_HG/flys-client/src/main/webapp/WEB-INF/log4j.properties +sed -i -e "s@/tmp/flys-client.log@/var/log/flys/client-${VERSION}.log@g" \ + $FLYS_SOURCE_DIR/flys/flys-client/src/main/webapp/WEB-INF/log4j.properties -# Fix the Wiki URLs -find $FLYS_HG/flys-artifacts/src/main/resources/ -name messages_\*.properties \ +find $FLYS_SOURCE_DIR/flys/flys-artifacts/src/main/resources/ -name messages_\*.properties \ -exec sed -i "s@https://flys-intern.intevation.de/Flys-3.0@${WIKI_URL}@g" {} \; -echo "INFO: download OpenLayers-2.11 for client" -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 -mv OpenLayers-2.11 $FLYS_HG/flys-client/src/main/webapp/ +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/flys/flys-client/src/main/webapp/ -# compile and build our code stuff echo "INFO: compile and build sources" -mvn -f $ARTIFACTS_HG/pom.xml clean compile package install -mvn -f $FLYS_HG/flys-backend/pom.xml clean compile package install -mvn -f $FLYS_HG/flys-artifacts/pom.xml clean compile package dependency:copy-dependencies install -mvn -f $HTTPCLIENT_HG/pom.xml clean compile package install -mvn -f $FLYS_HG/flys-client/pom.xml clean compile package +mvn -f $FLYS_SOURCE_DIR/artifacts/pom.xml clean compile package install +mvn -f $FLYS_SOURCE_DIR/flys/flys-backend/pom.xml clean compile package install +mvn -f $FLYS_SOURCE_DIR/flys/flys-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/flys/flys-client/pom.xml clean compile package -## fetch the java stuff + echo "INFO: copy dependencies and libs" -cp $ARTIFACTS_HG/artifact-database/target/artifact-database-1.0-SNAPSHOT.jar $DIRECTORY/server/bin/lib/own/ -cp $ARTIFACTS_HG/artifacts/target/artifacts-1.0-SNAPSHOT.jar $DIRECTORY/server/bin/lib/own/ -cp $ARTIFACTS_HG/artifacts-common/target/artifacts-common-1.0-SNAPSHOT.jar $DIRECTORY/server/bin/lib/own/ -cp $FLYS_HG/flys-backend/target/flys-backend-1.0-SNAPSHOT.jar $DIRECTORY/server/bin/lib/own/ -cp $FLYS_HG/flys-artifacts/target/flys-artifacts-1.0-SNAPSHOT.jar $DIRECTORY/server/bin/lib/own/ -cp $FLYS_HG/flys-client/target/FLYS-1.0-SNAPSHOT.war $DIRECTORY/client/flys-${RELEASE}.war -cp $FLYS_HG/flys-artifacts/target/dependency/* $DIRECTORY/server/bin/lib/ +cp $FLYS_SOURCE_DIR/artifacts/artifact-database/target/artifact-database-1.0-SNAPSHOT.jar $WORK_DIR/server/bin/lib/own/ +cp $FLYS_SOURCE_DIR/artifacts/artifacts/target/artifacts-1.0-SNAPSHOT.jar $WORK_DIR/server/bin/lib/own/ +cp $FLYS_SOURCE_DIR/artifacts/artifacts-common/target/artifacts-common-1.0-SNAPSHOT.jar $WORK_DIR/server/bin/lib/own/ +cp $FLYS_SOURCE_DIR/flys/flys-backend/target/flys-backend-1.0-SNAPSHOT.jar $WORK_DIR/server/bin/lib/own/ +cp $FLYS_SOURCE_DIR/flys/flys-artifacts/target/flys-artifacts-1.0-SNAPSHOT.jar $WORK_DIR/server/bin/lib/own/ +cp $FLYS_SOURCE_DIR/flys/flys-client/target/FLYS-1.0-SNAPSHOT.war $WORK_DIR/client/flys-${VERSION}.war +cp $FLYS_SOURCE_DIR/flys/flys-artifacts/target/dependency/* $WORK_DIR/server/bin/lib/ echo "INFO: copy scripts and libraries to target destination" -cp bin/run.sh $DIRECTORY/server/bin/ -cp bin/wsplgen.exe $DIRECTORY/server/bin/ -cp libs/* $DIRECTORY/server/bin/lib/ +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/ -#echo "INFO: remove PostgreSQL and PostGIS libraries" -#rm $DIRECTORY/server/bin/lib/postg* -#rm $DIRECTORY/server/bin/lib/hibernate-spatial-postgis* -echo "INFO: remove Oralce libraries" -rm -f $DIRECTORY/server/bin/lib/hibernate-spatial-oracle-1.1.jar -rm -f $DIRECTORY/server/bin/lib/ojdbc* +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* +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_HG/flys-artifacts/doc/conf $DIRECTORY/server/ - -#cp confs/* $DIRECTORY/server/conf/ -mkdir -p $DIRECTORY/server/conf - -sed "s/8999/$ARTIFACT_PORT/g" \ - confs/rest-server.xml \ - > $DIRECTORY/server/conf/rest-server.xml - -sed -e "s@http://example.com/@http://${MAPSERVER_URL}/@g" \ - confs/floodmap.xml \ - > $DIRECTORY/server/conf/floodmap.xml +cp -R $FLYS_SOURCE_DIR/flys/flys-artifacts/doc/conf $WORK_DIR/server/ -sed -e "s@http://example.com/@http://${MAPSERVER_URL}/@g" \ - confs/rivermap.xml \ - > $DIRECTORY/server/conf/rivermap.xml - -sed "s@/tmp/flys-server-default.log@/var/log/flys/server-${RELEASE}.log@" \ - confs/log4j.properties \ - > $DIRECTORY/server/conf/log4j.properties +sed -i "s/8181/$ARTIFACT_PORT/g" \ + $WORK_DIR/server/conf/rest-server.xml -# TODO: Use templating here -cp confs/seddb-db.xml $DIRECTORY/server/conf/seddb-db.xml -cp confs/backend-db.xml $DIRECTORY/server/conf/backend-db.xml -cp confs/artifact-db.xml $DIRECTORY/server/conf/artifact-db.xml -cp confs/datacage-db.xml $DIRECTORY/server/conf/datacage-db.xml -cp confs/mapserver/fontset.txt $DIRECTORY/server/conf/mapserver/fontset.txt +sed -i -e "s@http://example.com/@http://${MAPSERVER_URL}/@g" \ + $WORK_DIR/server/conf/floodmap.xml -cp $ARTIFACTS_HG/artifact-database/doc/schema-h2.sql h2/artifacts-h2.sql -cp $FLYS_HG/flys-artifacts/doc/conf/datacage.sql h2/datacage.sql +sed -i -e "s@http://example.com/@http://${MAPSERVER_URL}/@g" \ + $WORK_DIR/server/conf/rivermap.xml + +sed "s@/tmp/flys-server-default.log@/var/log/flys/server-${VERSION}.log@" \ + $SCRIPT_DIR/confs/log4j.properties \ + > $WORK_DIR/server/conf/log4j.properties + +cat > $WORK_DIR/server/conf/seddb-db.xml << EOF + + + + $SEDDBUSER + $SEDDBPASS + org.hibernate.dialect.Oracle9iDialect + oracle.jdbc.driver.OracleDriver + jdbc:oracle:thin:@//$SEDDBURL:$SEDDBPORT/$SEDDBBACK + +EOF + +if [ "$BUILD_ORACLE" = "TRUE" ]; then + # Oracle backend configuration + cat > $WORK_DIR/server/conf/backend-db.xml << EOF + + + flys27 + flys27 + org.hibernatespatial.oracle.OracleSpatial10gDialect + oracle.jdbc.driver.OracleDriver + jdbc:oracle:thin:@//czech-republic.atlas.intevation.de:1521/XE + +EOF +else + #Postgresql backend configuration + cat > $WORK_DIR/server/conf/backend-db.xml << EOF + + + $BACKENDUSER + $BACKENDPASS + org.hibernate.dialect.PostgreSQLDialect + org.postgresql.Driver + jdbc:postgresql://$BACKENDURL:$BACKENDPORT/$BACKENDBACK + +EOF +fi + +mkdir $WORK_DIR/artifactsdb +mkdir $WORK_DIR/datacagedb + +cp $FLYS_SOURCE_DIR/artifacts/artifact-database/doc/schema-h2.sql $WORK_DIR/artifactsdb/artifacts-h2.sql +cp $FLYS_SOURCE_DIR/flys/flys-artifacts/doc/conf/datacage.sql $WORK_DIR/datacagedb/datacage.sql echo "INFO: create h2 database for artifacts and datacage" -h2/createArtifacts.sh -h2/createDatacage.sh +$SCRIPT_DIR/h2/createArtifacts.sh $WORK_DIR/artifactsdb/artifacts-h2.sql +$SCRIPT_DIR/h2/createDatacage.sh $WORK_DIR/datacagedb/datacage.sql -mv artifactsdb $DIRECTORY/server/ -mv datacagedb $DIRECTORY/server/ +mv $WORK_DIR/artifactsdb $WORK_DIR/server/ +mv $WORK_DIR/datacagedb $WORK_DIR/server/ echo "INFO: create tarball" -tar cvfz $DIRECTORY.tar.gz $DIRECTORY +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 "INFO: remove temporary files and directories" -rm -rf $ARTIFACTS_HG -rm -rf $HTTPCLIENT_HG -rm -rf $FLYS_HG -rm -rf $DIRECTORY -rm -rf OpenLayers.2.11.tar.gz +echo "DONE: $WORK_DIR/flys-$VERSION.tar.gz"