Subversion Repositories general

Rev

Rev 1178 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

#!/bin/sh

#
# make a release (source code tar) of the project
# needs two params: major and minor version of the release
#

PROJ=rebootd
OUTDIR=output
PROG=${OUTDIR}/${PROJ}
SRCDIR=src
SRCS=${SRCDIR}/rebootd.c

VER_MAJOR=$1
VER_MINOR=$2
VER_REVISION=`svnversion .`
RELEASE_NAME=${PROJ}-${VER_MAJOR}.${VER_MINOR}.${VER_REVISION}

SAMPLES=${SRCDIR}/rebootd.conf
RELDIR=${OUTDIR}/release
COMMITDIR=releases
WEBDIR=26th.net:www/26th.net/html/public/projects/rebootd/bin    # scp format

# check params
[ -n "${VER_MINOR}" ] || { echo "Version not specified" >> /dev/stderr; exit 1; }

# only commited revisions are allowed for release
if ( ! echo $VER_REVISION | grep -E '^[0-9]+$' > /dev/null ) ; then
        echo "Cannot make release - current revision $VER_REVISION not commited" >> /dev/stderr
        exit 1;
fi

# create the tar
rm -rf ${RELDIR} \
        || { echo "Cannot delete ${RELDIR} dir" >> /dev/stderr; exit 2; }
mkdir ${RELDIR} \
        || { echo "Cannot create ${RELDIR} dir" >> /dev/stderr; exit 2; }
cp -r ${SRCDIR} ${RELDIR}/${RELEASE_NAME} \
        || { echo "Cannot copy ${SRCDIR} to ${RELDIR}/${RELEASE_NAME}" >> /dev/stderr; exit 2; }
sed -e 's/%VER_MAJOR%/${VER_MAJOR}/' -e 's/%VER_MINOR%/${VER_MINOR}/' \
        -e 's/%VER_REVISION%/${VER_REVISION}/' ${SRCDIR}/Makefile \
        > ${RELDIR}/${RELEASE_NAME}/Makefile \
        || { echo "Cannot generate ${RELDIR}/${RELEASE_NAME}/Makefile" >> /dev/stderr; exit 2; }
tar cf - --exclude '*/.svn' -C ${RELDIR} ${RELEASE_NAME} | gzip > ${OUTDIR}/${RELEASE_NAME}.tar.gz \
        || { echo "Cannot create ${OUTDIR}/${RELEASE_NAME}.tar.gz" >> /dev/stderr; exit 2; }
rm -rf ${RELDIR} \
        || { echo "Cannot clear ${RELDIR} dir" >> /dev/stderr; exit 2; }

# commit the release
echo "Relase made successfully. Enter YES to commit it."
read confirm
if [ "$confirm" != "YES" ] ; then
        echo "you have to answer 'YES' to continue"
        exit 1
fi

cp ${OUTDIR}/${RELEASE_NAME}.tar.gz ${COMMITDIR} \
        || { echo "Cannot copy ${OUTDIR}/${RELEASE_NAME}.tar.gz to releases" >> /dev/stderr; exit 2; }
svn add ${COMMITDIR}/${RELEASE_NAME}.tar.gz \
        || { echo "Cannot add ${COMMITDIR}/${RELEASE_NAME}.tar.gz to repository" >> /dev/stderr; exit 2; }
svn commit ${COMMITDIR}/${RELEASE_NAME}.tar.gz \
        -m "${PROJ}: auto commit of new release ${VER_MAJOR}.${VER_MINOR}.${VER_REVISION}" \
        || { echo "Cannot commit ${COMMITDIR}/${RELEASE_NAME}.tar.gz" >> /dev/stderr; exit 2; }

# publish web
scp ${COMMITDIR}/${RELEASE_NAME}.tar.gz ${WEBDIR} \
        || { echo "Cannot publish ${COMMITDIR}/${RELEASE_NAME}.tar.gz to ${WEBDIR}" >> /dev/stderr; exit 2; }

echo "Release ${RELEASE_NAME} is commited and published"