diff options
-rwxr-xr-x | release-scripts/create-tarball | 312 |
1 files changed, 218 insertions, 94 deletions
diff --git a/release-scripts/create-tarball b/release-scripts/create-tarball index a689e693afb..3463f012a5b 100755 --- a/release-scripts/create-tarball +++ b/release-scripts/create-tarball @@ -1,98 +1,222 @@ #!/bin/bash +## option defaults +OPT_BRANCH="" +OPT_DOCSDIR="" +OPT_TAG="" +OPT_KEYID="" + TOPDIR="`dirname $0`/.." +VER_H="${TOPDIR}/source/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 " --tag <name> Tag name for release" + 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 + ;; + --tag) + shift + if [ -z "$1" ]; then + printUsage + return 1 + fi + OPT_TAG="$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 dopcumentation (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}" + + 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 +{ + if [ -z "${OPT_TAG}" ]; then + echo "Tagging disabled" + return 0 + fi + + if [ "x`git-tag -l ${OPT_TAG}`" != "x" ]; then + echo -n "Tag 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} ${OPT_TAG} + exitOnError $? "Failed to create tag" + + 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 source && ./script/mkversion.sh) + if [ ! -f $VER_H ]; then + exitOnError 1 "Failed to find ${VER_H}!" + fi + + version=`grep SAMBA_VERSION_OFFICIAL_STRING $VER_H | awk '{print $3}'` + vendor_version=`grep SAMBA_VERSION_VENDOR_SUFFIX $VER_H | awk '{print $3}'` + if [ -n "$vendor_version" ]; then + version="$version-$vendor_version" + 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} + + packaging/bin/update-pkginfo ${version} 1 "" + + buildDocs + exitOnError $? "Failed to build documentation" + + ( cd source && ./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 + exitOnError $? "Failed to create release tag" + + return 0 +} -cd $TOPDIR - -echo -n "Please enter branch to cut tarball from: " -read branch - -if [ "x$branch" = "x" ]; then - echo "You must enter a name! Exiting...." - exit 1 -fi - -git-checkout $branch -if [ $? -ne 0 ]; then - echo "Invalid branch name! Exiting...." - exit 2 -fi - -VER_H=source/include/version.h -(cd source && ./script/mkversion.sh) - -if [ ! -f $VER_H ]; then - echo "Failed to find $VER_H! Exiting...." - exit 1 -fi - -version=`grep SAMBA_VERSION_OFFICIAL_STRING $VER_H | awk '{print $3}'` -vendor_version=`grep SAMBA_VERSION_VENDOR_SUFFIX $VER_H | awk '{print $3}'` -if [ -n "$vendor_version" ]; then - version="$version-$vendor_version" -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 -) - -pushd ../samba-${version} - -echo "Enter the absolute path to the generated Samba docs directory." -echo -n "Just hit return to exclude the docs from the generate tarball: " -read docsdir - -if [ "x$docsdir" != "x" ]; then - if [ ! -d "$docsdir" ]; then - echo "$docsdir does not exist! Exiting...." - exit 1 - fi - - /bin/rm -rf docs - mkdir docs - rsync -a --exclude=.svn $docsdir/ docs/ - - cd docs - /bin/rm -rf test.pdf Samba4*pdf htmldocs/Samba4* htmldocs/test - /bin/mv manpages-3 manpages - /bin/mv htmldocs/manpages-3 htmldocs/manpages - cd .. -fi - -cd source -./autogen.sh -cd .. - -cd .. -tar cf samba-${version}.tar --exclude=.git* --exclude=CVS --exclude=.svn samba-${version} -gpg --detach-sign --armor samba-${version}.tar -gzip -9 samba-${version}.tar - -popd -echo -n "Enter tag name (or hit <enter> to skip): " -read tagname - -if [ "x$tagname" != "x" ]; then - if [ "x`git-tag -l $tagname`" != "x" ]; then - echo -n "Tag exists. Do you wish to overwrite? (y/N): " - read answer - - if [ "x$answer" != "xy" ]; then - echo "Tag creation aborted." - exit 1 - fi - fi - - echo -n "Enter the keyid:" - read keyid - if [ x"$keyid" = x"" ];then - echo "no keyid" - exit 1 - fi - git-tag -u $keyid ${tagname} -fi - -echo "Done!" -exit 0 +main "$@" +exit $? |