rendered paste body#!/bin/bash
## ------------------------------------------------------------- ##
## global variables ##
## ------------------------------------------------------------- ##
export BASEDIR=/home/repobuilder
export PATH=${BASEDIR}/bin:${BASEDIR}/local/bin:/usr/local/bin:/usr/X11R6/bin:/usr/bin:/bin:/usr/sbin:/sbin
export REPOSITORY=${1}
export REVISION=${2}
SENDER_EMAIL="auto-builder"
REPO_MAINTAINER_EMAIL="someone@somewhere.com"
DEVELOPERS_EMAIL="someone@somewhere.com"
NOW=`date +"%F__%H_%M_%S"`
BUILD_LOCATION=${BASEDIR}/${NOW}
LOGFILE=${BASEDIR}/log-${NOW}
SVN_PROTOCOL="file://"
SVN_LOCATION="/home/svn"
## ------------------------------------------------------------- ##
## common functions ##
## ------------------------------------------------------------- ##
cleanup () {
cd ${BASEDIR}
rm -fr ${BUILD_LOCATION} ${LOGFILE}
}
# send error email to all developers
# mail_error_maintainer
mail_error_developers () {
sendmail -i -f ${SENDER_EMAIL} $DEVELOPERS_EMAIL << END_OF_EMAIL
From: ${SENDER_EMAIL}
Subject: build error
Commit of revision '${REVISION}' to repository '${REPOSITORY}' has caused
the build to break. The build log is as follows...
`cat ${LOGFILE}`
END_OF_EMAIL
exit 1
}
# send error email to the repository maintainer
mail_error_maintainer () {
sendmail -i -f ${SENDER_EMAIL} ${REPO_MAINTAINER_EMAIL} << END_OF_EMAIL
From: ${SENDER_EMAIL}
Subject: build error
Something went wrong trying to build the latest commit.
Revision: '${REVISION}'
Repository: '${REPOSITORY}'
`cat ${LOGFILE}`
END_OF_EMAIL
exit 1
}
# send success email to all developers
mail_good () {
sendmail -i -f ${SENDER_EMAIL} ${DEVELOPERS_EMAIL} << END_OF_EMAIL
From: ${SENDER_EMAIL}
Subject: build success
Latest commit successful:
Revision: '${REVISION}'
Repository: '${REPOSITORY}'
END_OF_EMAIL
}
## ------------------------------------------------------------- ##
## start of "main()" ##
## ------------------------------------------------------------- ##
## handle interrupts
trap cleanup EXIT
## make log file
touch ${LOGFILE}
[ $? -ne 0 ] && mail_error_maintainer
## make temp dir
echo -n "-> Making temp directory '${BUILD_LOCATION}'..." >> ${LOGFILE}
mkdir -p ${BUILD_LOCATION} >> ${LOGFILE} 2>&1
[ $? -ne 0 ] && mail_error_maintainer
echo "done." >> ${LOGFILE}
echo -n "-> 'cd' into ${BUILD_LOCATION}'..." >> ${LOGFILE}
cd ${BUILD_LOCATION} >> ${LOGFILE} 2>&1
[ $? -ne 0 ] && mail_error_maintainer
echo "done." >> ${LOGFILE}
## export PKG_CONFIG_PATH
echo -n "-> Exporting PKG_CONFIG_PATH..." >> ${LOGFILE}
export PKG_CONFIG_PATH=${BUILD_LOCATION}/local/lib/pkgconfig:/usr/local/lib/pkgconfig
[ $? -ne 0 ] && mail_error_maintainer
echo "done = $PKG_CONFIG_PATH" >> ${LOGFILE}
## co, configure, check: checked-in repository
echo -e "\n\n-> Checking out committed module ${REPOSITORY} version ${REVISION}..." >> ${LOGFILE}
svn co ${SVN_PROTOCOL}${REPOSITORY}/trunk -r ${REVISION} code >> ${LOGFILE} 2>&1
[ $? -ne 0 ] && mail_error_maintainer
mkdir -p code >> ${LOGFILE} 2>&1
[ $? -ne 0 ] && mail_error_maintainer
pushd code >> ${LOGFILE} 2>&1
[ $? -ne 0 ] && mail_error_maintainer
echo -e "\n-> autoreconf'ing..." >> ${LOGFILE}
autoreconf -i >> ${LOGFILE} 2>&1
[ $? -ne 0 ] && mail_error_maintainer
echo -e "\n-> configuring..." >> ${LOGFILE}
./configure --prefix=${BUILD_LOCATION}/local >> ${LOGFILE} 2>&1
[ $? -ne 0 ] && mail_error_maintainer
echo -e "\n-> make check..." >> ${LOGFILE}
make check >> ${LOGFILE} 2>&1
[ $? -ne 0 ] && mail_error_developers
echo -e "\n-> make distcheck..." >> ${LOGFILE}
make distcheck >> ${LOGFILE} 2>&1
[ $? -ne 0 ] && mail_error_developers
popd >> ${LOGFILE} 2>&1
[ $? -ne 0 ] && mail_error_maintainer
## done
mail_good