blob: f495945d8b387272111ecb6255901953da0520bb [file] [log] [blame]
#!/bin/sh -x
# $Id: create-repository-jars.sh,v 1.12 2004/02/16 23:38:49 joerg Exp $
# This script will do the following:
# - checkout/update a cocoon-2.1 repository
# - make a local.build.properties, that excludes all documentation stuff
# - build all jars and the war file
# - copy all jars and the war to the appropriate locations (repository structure)
# The cvs repository name
if [ "$REPOSITORY_NAME" = "" ]; then
REPOSITORY_NAME=cocoon-2.1
fi
# What is the default revision/branch/tag to use
# In case of a HEAD revision a SNAPSHOT version will be created and
# any old snapshots will be removed to save some space
if [ "$REVISION" = "" ]; then
REVISION="" # it's a HEAD
fi
# What is the default CVSROOT to be used for checkout
if [ "$CVSROOT" = "" ]; then
CVSROOT=":pserver:anoncvs@cvs.apache.org:/home/cvspublic"
fi
# Where is the local cocoon cvs repository we use to maintain.
# If this directory doesn't exists it will do a
# 'cvs -d $CVSROOT co -Pd $LOCAL_REPOSITORY -r $REVISION $REPOSITORY_NAME'
# to create it.
#
# If it exists it will do a
# 'cvs upd -dPACr $REVISION'
# in there to update to the requested revision (see REVISION below)
if [ "$LOCAL_REPOSITORY" = "" ]; then
LOCAL_REPOSITORY=$HOME/cvs/cocoon-2.1
fi
# On which host should the artifacts be published
if [ "$REMOTEHOST" = "" ]; then
REMOTEHOST=www.apache.org
fi
# Where is the path on the remote host the repository is located at
if [ "$REMOTEPATH" = "" ]; then
REMOTEPATH=/www/www.apache.org/dist/java-repository/cocoon
fi
# Where is the md5sum command to be used
if [ "$MD5SUM" = "" ]; then
MD5SUM=/sbin/md5
fi
# ------- NO NEED TO CHANGE ANYTHING BELOW HERE ----------
if [ "$JAVA_HOME" = "" ]; then
echo "You need to set the JAVA_HOME environment variable to the installed JDK 1.3"
exit 1
fi
$JAVA_HOME/bin/java -version
# parse for options
NOCVS=0
NOBUILD=0
NOCLEAN=0
NOJARS=0
NOWAR=0
BUILD_SRC_DIST=0
while getopts ":BCdhJkW" option
do
case $option in
B) NOBUILD=1;;
C) NOCVS=1;;
d) BUILD_SRC_DIST=1;;
h) echo "Usage: `basename $0` [-B] [-C] [-d] [-J] [-h] [-k] [-W] [RELEASE-TAG]"
echo " -B don't do a build"
echo " -C don't do a cvs update"
echo " -d build a src dist"
echo " -h this usage note"
echo " -J don't deploy the jar files"
echo " -k keep the build tree (don't do a clean-dist)"
echo " -W don't deploy the war file"
echo " RELEASE-TAG the tag to do a cvs update for"
echo " if the RELEASE-TAG is HEAD a snapshot version"
echo " will be produced"
exit 0
;;
J) NOJARS=1;;
k) NOCLEAN=1;;
W) NOWAR=1;;
* ) echo "Unimplemented option $option chosen.";;
esac
done
shift $(($OPTIND - 1))
if [ "$1" != "" -a "$1" != "HEAD" ]; then
REVISION=$1
fi
# check if the local repository exists and do a checkout/update accordingly
if [ -d "$LOCAL_REPOSITORY" ]; then
cd $LOCAL_REPOSITORY
if [ $NOCVS = 0 ]; then
echo
echo "updating the local repository at $LOCAL_REPOSITORY with"
if [ "$REVISION" = "" ]; then
echo " cvs up -dPAC"
echo
cvs up -dPAC
else
echo " cvs up -dPACr $REVISION"
echo
cvs up -dPACr $REVISION
fi
fi
else
DIRNAME=`dirname $LOCAL_REPOSITORY`
BASENAME=`basename $LOCAL_REPOSITORY`
if [ ! -d $DIRNAME ]; then
mkdir -p $DIRNAME 2>/dev/null >/dev/null
fi
cd $DIRNAME
echo
echo "checking out into the local repository at $LOCAL_REPOSITORY with "
if [ "$REVISION" = "" ]; then
echo " cvs -d $CVSROOT co -Pd $LOCAL_REPOSITORY $REPOSITORY_NAME"
echo
cvs -d $CVSROOT co -Pd $BASENAME $REPOSITORY_NAME
else
echo " cvs -d $CVSROOT co -Pd $LOCAL_REPOSITORY -r $REVISION $REPOSITORY_NAME"
echo
cvs -d $CVSROOT co -Pd $BASENAME -r $REVISION $REPOSITORY_NAME
fi
cd $LOCAL_REPOSITORY
fi
# cleanup the repository, prepare and do a build if not suppressed by command line option
RC=0 # set in advace in case we don't do a build
if [ $NOBUILD = 0 ]; then
# build the local.blocks.properties file
echo
echo "generating local.blocks.properties file"
echo
cat blocks.properties \
>local.blocks.properties
# build the local.build.properties file
echo
echo "generating local.build.properties file"
echo
cat build.properties \
| sed 's/#exclude.webapp.documentation/exclude.webapp.documentation/' \
| sed 's/#exclude.webapp.javadocs/exclude.webapp.javadocs/' \
| sed 's/#exclude.webapp.samples/exclude.webapp.samples/' \
| sed 's/#exclude.documentation/exclude.documentation/' \
| sed 's/#exclude.javadocs/exclude.javadocs/' \
| sed 's/#exclude.validate.xdocs/exclude.validate.xdocs/' \
| sed 's/#config.allow-reloads/config.allow-reloads/' \
| sed 's/#config.enable-uploads/config.enable-uploads/' >local.build.properties
# build everything
echo
if [ $NOCLEAN = 0 ]; then
echo "clean the local repository, build the webapp, and the war files"
CLEAN=clean-dist
else
echo "build the webapp, and the war files"
CLEAN=""
fi
echo
./build.sh $CLEAN webapp war | tee $LOCAL_REPOSITORY/build.log
# The build script dosn't report on failures so we have to do that by hand
tail -10 $LOCAL_REPOSITORY/build.log|grep "BUILD SUCCESSFUL"
if [ $? = 0 ]; then
RC=0
else
RC=1
fi
fi
if [ $RC -ne 0 ]; then
echo "The build has failed"
exit $RC
fi
# copy all the jars produced over to the remote repository space
VERSION=`ls build | grep cocoon | sed s/cocoon-//`
if [ "$REVISION" = "" ]; then
TVERSION=`date "+%Y%m%d.%H%M%S"`
else
TVERSION=$VERSION
fi
if [ $NOJARS = 0 ]; then
# create the target directory if they do not exists and make them group writable
ssh $REMOTEHOST "mkdir -p $REMOTEPATH/jars 2>/dev/null >/dev/null; \
chmod -R g+w $REMOTEPATHi/jars"
JARS=`find build/cocoon-$VERSION -name "*.jar"`
for i in $JARS; do
FILE=`echo $i | sed 's/.*[/]//' | sed s/[.]jar//`
isBlock=`echo $FILE|grep block`
if [ ! -z "$isBlock" ]; then
BLOCKPART="-`echo $FILE | sed 's/-block//'`"
else
BLOCKPART=`echo $FILE | sed 's/cocoon//'`
fi
if [ "$REVISION" = "" ]; then
# remove all snapshots in the remote repository
SNAPSHOT=`ssh $REMOTEHOST "ls $REMOTEPATH/jars/cocoon$BLOCKPART-????????.??????.jar 2>/dev/null"`
fi
scp $i $REMOTEHOST:$REMOTEPATH/jars/cocoon$BLOCKPART-$TVERSION.jar
if [ "$REVISION" = "" ]; then
if [ ! -z "$SNAPSHOT" ]; then
RM="rm $SNAPSHOT;"
else
RM=""
fi
CMD="$RM \
cd $REMOTEPATH/jars; \
ln -fs cocoon$BLOCKPART-$TVERSION.jar cocoon$BLOCKPART-SNAPSHOT.jar; \
echo $TVERSION >cocoon$BLOCKPART-snapshot.version;"
else
CMD=""
fi
ssh $REMOTEHOST "$CMD \
$MD5SUM <$REMOTEPATH/jars/cocoon$BLOCKPART-$TVERSION.jar | \
sed 's/ .*$//' >$REMOTEPATH/jars/cocoon$BLOCKPART-$TVERSION.jar.md5; \
chmod g+w $REMOTEPATH/jars/cocoon$BLOCKPART-$TVERSION.*"
done
fi
# copy the war file to the web space
if [ "$NOWAR" = "0" ]; then
# create the target directory if they do not exists and make them group writable
ssh $REMOTEHOST "mkdir -p $REMOTEPATH/wars 2>/dev/null >/dev/null; \
chmod -R g+w $REMOTEPATH/wars"
WAR=build/cocoon-$VERSION/cocoon.war
if [ "$REVISION" = "" ]; then
SNAPSHOT=`ssh $REMOTEHOST "ls $REMOTEPATH/wars/cocoon-war-????????.??????.war 2>/dev/null"`
fi
scp $WAR $REMOTEHOST:$REMOTEPATH/wars/cocoon-war-$TVERSION.war
if [ "$REVISION" = "" ]; then
if [ ! -z "$SNAPSHOT" ]; then
RM="rm $SNAPSHOT;"
else
RM=""
fi
CMD="$RM \
cd $REMOTEPATH/wars; \
ln -fs cocoon-war-$TVERSION.war cocoon-war-SNAPSHOT.war; \
echo $TVERSION >cocoon-war-snapshot.version;"
else
CMD=""
fi
ssh $REMOTEHOST "$CMD \
$MD5SUM <$REMOTEPATH/wars/cocoon-war-$TVERSION.war | \
sed 's/ .*$//' >$REMOTEPATH/jars/cocoon-war-$TVERSION.jar.md5; \
chmod g+w $REMOTEPATH/jars/cocoon-war-$TVERSION.*"
fi
# create a distribution
if [ "$BUILD_SRC_DIST" = "1" ]; then
# create the target directory if they do not exists and make them group writable
ssh $REMOTEHOST "mkdir -p $REMOTEPATH/distributions 2>/dev/null >/dev/null; \
chmod -R g+w $REMOTEPATH/distributions"
./build.sh clean-dist
cd ..
if [ "$REVISION" = "" ]; then
TVERSION=SNAPSHOT
fi
ln -sf $REPOSITORY_NAME cocoon-src-$TVERSION
zip -r cocoon-src-$TVERSION.zip cocoon-src-$TVERSION
rm cocoon-src-$TVERSION
scp cocoon-src-$TVERSION.zip $REMOTEHOST:$REMOTEPATH/distributions/cocoon-src-$TVERSION.zip
rm cocoon-src-$TVERSION.zip
fi