#!/bin/bash SIGNER="bryce@bryceharrington.org" VERSION="0.92" PKG_NAME="inkscape" LIST_TO="inkscape-announce@lists.sf.net" LIST_CC="inkscape-devel@lists.sf.net" VCS_SYSTEM="git" # Locate Dependencies #------------------------------------------------------------------------------ MD5SUM=`which md5sum || which gmd5sum` SHA1SUM=`which sha1sum || which gsha1sum` SHA256SUM=`which sha256sum || which gsha256sum` # Choose which make program to use (could be gmake) MAKE=${MAKE:="make"} # Set the default make tarball creation command MAKE_DIST_CMD=distcheck # Choose which grep program to use (on Solaris, must be gnu grep) if [ "x$GREP" = "x" ] ; then if [ -x /usr/gnu/bin/grep ] ; then GREP=/usr/gnu/bin/grep else GREP=grep fi fi # Find path for GnuPG v2 if [ "x$GPG" = "x" ] ; then if [ -x /usr/bin/gpg2 ] ; then GPG=/usr/bin/gpg2 else GPG=gpg fi fi #------------------------------------------------------------------------------ usage() { basename="`expr "//$0" : '.*/\([^/]*\)'`" cat < /dev/null if [ $? -ne 0 ]; then echo "Error: '${MAKE} ${MAKEFLAGS} ${MAKE_DIST_CMD}' failed." cd $top_src return 1 fi return 0 } # Function: sign_or_fail #------------------------------------------------------------------------------ # # Sign the given file, if any # Output the name of the signature generated to stdout (all other output to # stderr) # Return 0 on success, 1 on fail # sign_or_fail() { if [ -n "$1" ]; then sig=$1.sig rm -f $sig [ -n ${SIGNER} ] && signer="-u $SIGNER" echo "$GPG $signer --detach-sign $1" 1>&2 $GPG $signer --detach-sign $1 1>&2 if [ $? -ne 0 ]; then echo "Error: failed to sign $1." >&2 return 1 fi echo $sig fi return 0 } sign_packages() { tar_name="$1" targz="${tar_name}.tar.gz" tarbz2="${tar_name}.tar.bz2" tarxz="${tar_name}.tar.xz" zip="${tar_name}.zip" for tarball in $targz $tarxz $tarbz2 $zip; do if [ -e "${tarball}" ]; then sig="$(sign_or_fail ${tarball})" gpgsignerr=$((${gpgsignerr} + $?)) sig_url="http://inkscape.org/.../$sig" cat < The above barely scratches the surface of what's included in this release. For the full scoop, please see our detailed Release Notes: http://wiki.inkscape.org/wiki/index.php/Release_notes/$VERSION RELEASE } process() { top_src=$(pwd) tar_name=$(make_dist) generate_announce > "${tar_name}.announce" # TODO: Once converted to git, enable display of shortlog #tag_previous=`git describe --abbrev=0 HEAD^ 2>/dev/null` #tag_range="FIXME..FIXME" #`git log --no-merges "$tag_range" | git shortlog` echo "${VCS_SYSTEM} tag: $tar_name" >> ${tar_name}.announce sign_packages ${tar_name} >> "${tar_name}.announce" if [ $? -ne 0 ]; then rm "${tar_name}.announce" echo "Error: Failed signatures" return 1 fi # TODO: Verify the top commit SHA has a version bump # local_top_commit_sha=`git rev-list --max-count=1 HEAD` # git diff --unified=0 HEAD^ | $GREP -F $pkg_version >/dev/null 2>&1 # TODO: Check that the top commit is pushed to remote # git rev-list --max-count=1 $remote_name/$remote_branch echo "TODO: Tag the top commit as $tar_name" echo "TODO: Upload the tarballs to the remote" echo "TODO: Push all local changes and tags to remote" echo "Info: [ANNOUNCE] template generated in \"$tar_name.announce\" file." echo " Please pgp sign and send it." return 0 } process