1#!/bin/bash 2 3## option defaults 4OPT_BRANCH="" 5OPT_DOCSDIR="" 6OPT_TAG="" 7OPT_KEYID="" 8 9TOPDIR="`dirname $0`/.." 10VER_H="${TOPDIR}/source3/include/version.h" 11 12function exitOnError 13{ 14 local _error="$1" 15 local _msg="$2" 16 17 if [ ${_error} -eq 0 ]; then 18 return 0 19 fi 20 21 echo "FAILURE: ${_msg}" 22 exit ${_error} 23} 24 25## 26## Print help usage 27## 28 29function printUsage 30{ 31 echo "Usage $0 [options]" 32 echo " --help Print command usage" 33 echo " --branch <name> Specify the branch to to create the archive file from" 34 echo " --copy-docs <dir> Copy documentation from <dir> rather than building" 35 echo " --tag <name> Tag name for release" 36 echo " --keyid <email> The GnuPG key ID used to sign the release tag" 37 echo "" 38} 39 40## 41## Parse the command line options 42## 43 44function parseOptions 45{ 46 while [ -n "$1" ]; do 47 case "$1" in 48 --help) 49 printUsage 50 exit 0 51 ;; 52 --branch) 53 shift 54 if [ -z "$1" ]; then 55 printUsage 56 return 1 57 fi 58 OPT_BRANCH="$1" 59 shift 60 ;; 61 --copy-docs) 62 shift 63 if [ -z "$1" ]; then 64 printUsage 65 return 1 66 fi 67 OPT_DOCSDIR="$1" 68 shift 69 ;; 70 --tag) 71 shift 72 if [ -z "$1" ]; then 73 printUsage 74 return 1 75 fi 76 OPT_TAG="$1" 77 shift 78 ;; 79 --keyid) 80 shift 81 if [ -z "$1" ]; then 82 printUsage 83 return 1 84 fi 85 OPT_KEYID="$1" 86 shift 87 ;; 88 *) 89 printUsage 90 return 1 91 ;; 92 esac 93 done 94 95 if [ -z "${OPT_BRANCH}" ]; then 96 echo "You must specify a branch name!" 97 printUsage 98 return 1 99 fi 100} 101 102## 103## Build the dopcumentation (may be a no-op) 104## 105 106function buildDocs 107{ 108 if [ -n "${OPT_DOCSDIR}" ]; then 109 if [ ! -d "${OPT_DOCSDIR}" ]; then 110 exitOnError 1 "${OPT_DOCSDIR} does not exist. Please specify the absolute path." 111 fi 112 113 mkdir docs 114 exitOnError $? "Failed to create docs directory" 115 116 rsync -av "${OPT_DOCSDIR}"/ docs/ 117 exitOnError $? "Failed top copy docs from ${OPT_DOCSDIR}" 118 119 cd docs/ 120 /bin/rm -rf test.pdf Samba4*pdf htmldocs/Samba4* htmldocs/test 121 if [ -d manpages-3 ]; then 122 mv manpages-3 manpages 123 fi 124 if [ -d htmldocs/manpages-3 ]; then 125 mv htmldocs/manpages-3 htmldocs/manpages 126 fi 127 # Sync thanks, history and registry/ into the docs dir 128 rsync -Ca --exclude=.svn ../../$OPT_BRANCH/docs-xml/registry ../docs/ 129 rsync -Ca --exclude=.svn ../../$OPT_BRANCH/docs-xml/archives/ ../docs/ 130 cd ../ 131 132 return 0 133 fi 134 135 echo "Building documentation. This may take a while. Log file in /tmp/docs-build.log.$$" 136 137 ${TOPDIR}/release-scripts/build-docs 2> /tmp/docs-build.log.$$ 138 return $? 139 140} 141 142 143## 144## Create a release tag 145## 146function createReleaseTag 147{ 148 if [ -z "${OPT_TAG}" ]; then 149 echo "Tagging disabled" 150 return 0 151 fi 152 153 if [ "x`git tag -l ${OPT_TAG}`" != "x" ]; then 154 echo -n "Tag exists. Do you wish to overwrite? (y/N): " 155 read answer 156 157 if [ "x$answer" != "xy" ]; then 158 echo "Tag creation aborted." 159 exit 1 160 fi 161 fi 162 163 if [ -z "${OPT_KEYID}" ]; then 164 echo -n "Enter the keyid:" 165 read OPT_KEYID 166 if [ -z "${OPT_KEYID}" ]; then 167 exitOnError 1 "No keyid specified" 168 fi 169 fi 170 171 git tag -u ${OPT_KEYID} ${OPT_TAG} 172 exitOnError $? "Failed to create tag" 173 174 return 0 175} 176## 177## Main driver 178## 179function main 180{ 181 parseOptions "$@" 182 exitOnError $? "Failed to parse options" 183 184 cd $TOPDIR 185 186 git checkout ${OPT_BRANCH} 187 exitOnError $? "Invalid branch name \"${OPT_BRANCH}\"" 188 189 (cd source3 && ./script/mkversion.sh) 190 if [ ! -f $VER_H ]; then 191 exitOnError 1 "Failed to find ${VER_H}!" 192 fi 193 194 version=`grep "define SAMBA_VERSION_OFFICIAL_STRING" $VER_H | awk '{print $3}'` 195 vendor_version=`grep "define SAMBA_VERSION_VENDOR_SUFFIX" $VER_H | awk '{print $3}'` 196 if [ -n "$vendor_version" ]; then 197 version="$version-$vendor_version" 198 fi 199 vendor_patch=`grep "define SAMBA_VERSION_VENDOR_PATCH_STRING" $VER_H | awk '{print $3}'` 200 if [ -n "$vendor_patch" ]; then 201 version="$version-$vendor_patch" 202 fi 203 version=`echo $version | sed 's/\"//g'` 204 205 echo "Creating release tarball for Samba $version" 206 207 /bin/rm -rf ../samba-${version} 208 git archive --format=tar --prefix=samba-${version}/ HEAD | (cd .. && tar xf -) 209 exitOnError $? "Failed to create release directory tree" 210 211 pushd ../samba-${version} 212 213 # Remove RFCs as they are non-free content (with a strict interpretation of 214 # the DFSG) 215 216 #if [ -d source4 ]; then 217 # echo "Removing RFCs" 218 # find source4/ -name "rfc*.txt" -exec rm -f {} \; 219 #fi 220 221 packaging/bin/update-pkginfo ${version} 1 "" 222 223 buildDocs 224 exitOnError $? "Failed to build documentation" 225 226 ( cd source3 && ./autogen.sh ) 227 228 cd .. 229 tar cf samba-${version}.tar --exclude=.git* --exclude=CVS --exclude=.svn samba-${version} 230 exitOnError $? "Failed to create tarball from git tree" 231 232 gpg --detach-sign --armor samba-${version}.tar 233 ## exitOnError $? "Failed to sign tarball" 234 235 gzip -9 samba-${version}.tar 236 exitOnError $? "Failed to compress archive" 237 238 popd 239 240 createReleaseTag 241 exitOnError $? "Failed to create release tag" 242 243 return 0 244} 245 246main "$@" 247exit $? 248