#!/bin/bash ## option defaults OPT_BRANCH="" OPT_DOCSDIR="" OPT_KEYID="" TOPDIR="`dirname $0`/.." VER_H="${TOPDIR}/source3/include/version.h" function exitOnError { local _error="$1" local _msg="$2" if [ ${_error} -eq 0 ]; then return 0 fi echo "FAILURE: ${_msg}" exit ${_error} } ## ## Print help usage ## function printUsage { echo "Usage $0 [options]" echo " --help Print command usage" echo " --branch <name> Specify the branch to to create the archive file from" echo " --copy-docs <dir> Copy documentation from <dir> rather than building" echo " --keyid <email> The GnuPG key ID used to sign the release tag" echo "" } ## ## Parse the command line options ## function parseOptions { while [ -n "$1" ]; do case "$1" in --help) printUsage exit 0 ;; --branch) shift if [ -z "$1" ]; then printUsage return 1 fi OPT_BRANCH="$1" shift ;; --copy-docs) shift if [ -z "$1" ]; then printUsage return 1 fi OPT_DOCSDIR="$1" shift ;; --keyid) shift if [ -z "$1" ]; then printUsage return 1 fi OPT_KEYID="$1" shift ;; *) printUsage return 1 ;; esac done if [ -z "${OPT_BRANCH}" ]; then echo "You must specify a branch name!" printUsage return 1 fi } ## ## Build the documentation (may be a no-op) ## function buildDocs { if [ -n "${OPT_DOCSDIR}" ]; then if [ ! -d "${OPT_DOCSDIR}" ]; then exitOnError 1 "${OPT_DOCSDIR} does not exist. Please specify the absolute path." fi mkdir docs exitOnError $? "Failed to create docs directory" rsync -av "${OPT_DOCSDIR}"/ docs/ exitOnError $? "Failed top copy docs from ${OPT_DOCSDIR}" cd docs/ /bin/rm -rf test.pdf Samba4*pdf htmldocs/Samba4* htmldocs/test if [ -d manpages-3 ]; then mv manpages-3 manpages fi if [ -d htmldocs/manpages-3 ]; then mv htmldocs/manpages-3 htmldocs/manpages fi # Sync thanks, history and registry/ into the docs dir rsync -Ca --exclude=.svn ../../$OPT_BRANCH/docs-xml/registry ../docs/ rsync -Ca --exclude=.svn ../../$OPT_BRANCH/docs-xml/archives/ ../docs/ cd ../ return 0 fi echo "Building documentation. This may take a while. Log file in /tmp/docs-build.log.$$" ${TOPDIR}/release-scripts/build-docs 2> /tmp/docs-build.log.$$ return $? } ## ## Create a release tag ## function createReleaseTag { tagname="$1" if [ "x`git tag -l ${tagname}`" != "x" ]; then echo -n "Tag '${tagname}' exists. Do you wish to overwrite? (y/N): " read answer if [ "x$answer" != "xy" ]; then echo "Tag creation aborted." exit 1 fi fi if [ -z "${OPT_KEYID}" ]; then echo -n "Enter the keyid:" read OPT_KEYID if [ -z "${OPT_KEYID}" ]; then exitOnError 1 "No keyid specified" fi fi git tag -u ${OPT_KEYID} ${tagname} exitOnError $? "Failed to create tag '${tagname}'" return 0 } ## ## Main driver ## function main { parseOptions "$@" exitOnError $? "Failed to parse options" cd $TOPDIR git checkout ${OPT_BRANCH} exitOnError $? "Invalid branch name \"${OPT_BRANCH}\"" (cd source3 && ./script/mkversion.sh) if [ ! -f $VER_H ]; then exitOnError 1 "Failed to find ${VER_H}!" fi version=`grep "define SAMBA_VERSION_OFFICIAL_STRING" $VER_H | awk '{print $3}'` vendor_version=`grep "define SAMBA_VERSION_VENDOR_SUFFIX" $VER_H | awk '{print $3}'` if [ -n "$vendor_version" ]; then version="$version-$vendor_version" fi vendor_patch=`grep "define SAMBA_VERSION_VENDOR_PATCH_STRING" $VER_H | awk '{print $3}'` if [ -n "$vendor_patch" ]; then version="$version-$vendor_patch" fi version=`echo $version | sed 's/\"//g'` echo "Creating release tarball for Samba $version" /bin/rm -rf ../samba-${version} git archive --format=tar --prefix=samba-${version}/ HEAD | (cd .. && tar xf -) exitOnError $? "Failed to create release directory tree" pushd ../samba-${version} # Remove RFCs as they are non-free content (with a strict interpretation of # the DFSG) if [ -d source4 ]; then echo "Removing RFCs" find source4/ -name "rfc*.txt" -exec rm -f {} \; rm -f source4/ldap_server/devdocs/draft-armijo-ldap-syntax-00.txt rm -f source4/ldap_server/devdocs/ldapext-ldapv3-vlv-04.txt fi packaging/bin/update-pkginfo ${version} 1 "" buildDocs exitOnError $? "Failed to build documentation" ( cd source3 && ./autogen.sh ) cd .. tar cf samba-${version}.tar --exclude=.git* --exclude=CVS --exclude=.svn samba-${version} exitOnError $? "Failed to create tarball from git tree" gpg --detach-sign --armor samba-${version}.tar ## exitOnError $? "Failed to sign tarball" gzip -9 samba-${version}.tar exitOnError $? "Failed to compress archive" popd createReleaseTag "samba-${version}" exitOnError $? "Failed to create release tag" return 0 } main "$@" exit $?