diff options
| -rwxr-xr-x | mksrcrelease.sh | 140 | ||||
| -rwxr-xr-x | mkwinbins.sh | 4 | 
2 files changed, 144 insertions, 0 deletions
| diff --git a/mksrcrelease.sh b/mksrcrelease.sh new file mode 100755 index 0000000..e81e32e --- /dev/null +++ b/mksrcrelease.sh @@ -0,0 +1,140 @@ +#!/bin/bash + +set -e + +usage() { +        cat <<EOF + +Usage: ${0##*/} <new_version> + +<new_version>    - release version to create in X.Y.Z format +EOF +        exit 0 +} + +fatal() { +        printf "Error: %s\n" "$1" >&2 +        exit 1 +} + +askyesno() { +	local question="$1" +	local choice="" + +	read -p "$question [y/N]? " choice + +	case "$choice" in +	y|Y) +		echo "yes" +		;; +	*) +		;; +	esac + +	return 0 +} + +##### get the command line arguments +[ $# -eq 0 ] && usage +[ $# -eq 1 ] || fatal "Insufficient or too many argumetns" + +new_ver="$1"; shift + +VER_REGEX="\([0-9]\+.[0-9]\+.[0-9]\+\)" +echo "$new_ver" | grep -q -x "$VER_REGEX" || +        fatal "please, provide new version in X.Y.Z format" + +##### parse the old version information +old_ver="$(grep AC_INIT configure.ac | grep -o \\[[0-9.]*\\] | tr -d [])" +old_so_ver="$(grep LIBSQUASHFS_SO_VERSION configure.ac | \ +	      grep -o \\[[0-9:]*\\] | tr -d [])" + +current=$(echo "${old_so_ver}" | cut -d: -f1) +revision=$(echo "${old_so_ver}" | cut -d: -f2) +age=$(echo "${old_so_ver}" | cut -d: -f3) + +echo "$old_ver" | grep -q -x "$VER_REGEX" || +        fatal "error reading old version number" + +VER_REGEX="\([0-9]\+:[0-9]\+:[0-9]\+\)" +echo "$old_so_ver" | grep -q -x "$VER_REGEX" || +        fatal "error reading old so version" + +[ "x$current:$revision:$age" = "x$old_so_ver" ] || \ +	fatal "Error parsing old so version" + +##### generate new library SO version +libchanges=$(git diff --numstat v${old_ver}..HEAD lib/sqfs/ | wc -l) + +if [ $libchanges -gt 0 ]; then +	echo "Detected changes to library code, updating so version" +	added=$(askyesno "Have any public interfaces been changed") +	changed=$(askyesno "Have any public interfaces been added") +	removed=$(askyesno "Have any public interfaces been removed") + +	revision=$((revision+1)) + +	if [ -n "$added" -o -n "$removed" -o -n "$changed" ]; then +		current=$((current+1)) +		revision=0 +	fi + +	if [ -n "$added" ]; then +		age=$((age+1)) +	fi + +	if [ -n "$removed" -o -n "$changed" ]; then +		age=0 +	fi +else +	echo "No changes to library code detected, keeping old so version" +fi + +new_so_ver="${current}:${revision}:${age}" + +echo "" +echo "current package version:      $old_ver" +echo "current library so-version:   $old_so_ver" +echo "" +echo "creating package version:     $new_ver" +echo "With library so-version:      $new_so_ver" +echo "" + +if [ "x$(askyesno "Is this ok")" != "xyes" ]; then +	echo "Aborting" +	exit +fi + +tag_name="v$new_ver" +release_name="squashfs-tools-ng-${new_ver}" + +# Make sure the git index is up-to-date +[ -z "$(git status --porcelain)" ] || fatal "Git index is not up-to-date" + +# Make sure the tag does not exist +[ -z "$(git tag -l "$tag_name")" ] || fatal "Tag $tag_name already exists" + +# Change the version in the configure.ac +sed -i -e "s/$old_ver/$new_ver/g" configure.ac +sed -i -e "s/$old_so_ver/$new_so_ver/g" configure.ac + +# Commit the change, create new signed tag +echo "Generating signed release commit tag $tag_name" + +git commit -s -m "Release version $new_ver" configure.ac +git tag -m "Release $new_ver" -s "$tag_name" + +# Prepare signed tarball +./autogen.sh +./configure +make -j distcheck + +echo "Signing the tarball" +gpg -o "$release_name.tar.gz.asc" --detach-sign \ +    -a "$release_name.tar.gz" +gpg -o "$release_name.tar.xz.asc" --detach-sign \ +    -a "$release_name.tar.xz" + +echo "Generating doxygen documentation" +make doxygen-doc +tar czf "doxydoc-$new_ver.tar.gz" -C doxygen-doc/html . diff --git a/mkwinbins.sh b/mkwinbins.sh index 0567660..b05bafc 100755 --- a/mkwinbins.sh +++ b/mkwinbins.sh @@ -190,3 +190,7 @@ zip -g -r -l "${W32_ZIP_NAME}.zip" "$W32_ZIP_NAME/licenses" $W32_ZIP_NAME/*.md  zip -r "${W64_ZIP_NAME}.zip" "$W64_ZIP_NAME/bin" "$W64_ZIP_NAME/lib"  zip -g -r -l "${W64_ZIP_NAME}.zip" "$W64_ZIP_NAME/include"  zip -g -r -l "${W64_ZIP_NAME}.zip" "$W64_ZIP_NAME/licenses" $W64_ZIP_NAME/*.md + +############################# sign the packages ############################## +gpg -o "${W64_ZIP_NAME}.zip.asc" --detach-sign -a "${W64_ZIP_NAME}.zip" +gpg -o "${W32_ZIP_NAME}.zip.asc" --detach-sign -a "${W32_ZIP_NAME}.zip" | 
