blob: 7cc3a18c5a9634217e2ec6fd3c06427d0fb1079b [file] [log] [blame] [edit]
#!/bin/bash -e
#
# Written 2016 by Tim Ruehsen
app_name=$(grep "^PACKAGE_NAME='" configure|cut -d "'" -f2)
app_ver=$(grep "^PACKAGE_VERSION='" configure|cut -d "'" -f2)
# check if branch is 'master'
if [ "`git rev-parse --abbrev-ref HEAD`" != "master" ]; then
echo Please be sure to checkout master first
exit 1
fi
# check if latest commit has been tagged
tag=$(git describe --abbrev=0)
if [ "$tag" != `git describe` ]; then
echo "You have to add a signed tag for the *latest* commit"
echo Expected: $tag
echo Found: `git describe`
exit 1
fi
# make sure that the package version matches the current tag
if [ "$app_name-$app_ver" != "$tag" ]; then
echo "The current tag doesn't match the package version"
echo Expected tag: "$app_name-$app_ver"
echo Found: $tag
fi
# Find out the archive extensions
for archive in $(grep "^DIST_ARCHIVES =" Makefile|cut -d '=' -f2); do
extensions=$extensions" "$(echo $archive|cut -s -d'.' -f3)
done
echo "The following archive types will be created/uploaded: " $extensions
echo "Current version of $app_name is $app_ver"
echo
echo -n "Enter Y if that is OK, else enter N and edit configure.ac: "
read x
[ "$x" != "y" -a "$x" != "Y" ] && exit 0
echo
grep -i "Changes in $app_name" NEWS|head -1
echo -n "Did you edit the NEWS file ? [y/N] "
read x
[ "$x" != "y" -a "$x" != "Y" ] && exit 0
echo
while true; do
echo -n "Alpha or Regular release ? [r/A] "
read x
if test "$x" = "r" || test "$x" = "R"; then
directory="/incoming/ftp"
break
elif test "$x" = "a" || test "$x" = "A"; then
directory="/incoming/alpha"
break
fi
done
echo
export CFLAGS="-g -O2 -Wall"
echo "* Bootstrap"
./bootstrap >/dev/null
echo "* Configure"
./configure -q
echo "* Make"
make -s -j$(nproc) clean
make -s -j$(nproc)
echo "* Make distcheck"
make -s -j$(nproc) distcheck >/dev/null
echo "* Make dist"
for ext in $extensions; do
[[ $ext = 'gz' ]] && ext="gzip"
# [[ $ext = 'lz' ]] && ext="lzip"
make -s -j$(nproc) dist-$ext >/dev/null
done
x=$(gpg --list-secret-keys 2>/dev/null|grep ^sec|awk '{ print $2 }')
echo $x
if [ "$x" = "" ]; then
echo No signing key found - please check with 'gpg --list-secret-keys'
exit 1
fi
# arrays just work in Bash
keys=($x)
if [ ${#keys[@]} -eq 1 ]; then
IFS='/' arr=($x)
signing_key=${arr[1]}
else
for ((i=0; i < ${#keys[@]}; i++)); do
echo "$((i+1))) ${keys[i]}"
done
while true; do
echo -n "Enter 1-${#keys[@]}: "
read x
# check for digits only
if [ -n "${i//[0-9]/}" ]; then continue; fi
if test $x -ge 1 || test $x -le ${#keys[@]}; then
IFS='/' arr=(${keys[$((x-1))]})
signing_key=${arr[1]}
break
fi
done
fi
unset IFS
echo $signing_key
# fetch app_version again, just in case
app_ver=$(grep "^PACKAGE_VERSION='" configure|cut -d "'" -f2)
for ext in $extensions; do
app_tarball="${app_name}-${app_ver}.tar.$ext"
gpg --default-key $signing_key --yes -b $app_tarball
echo -e "version: 1.2\nfilename: ${app_tarball}\ndirectory: libtasn1\n" >${app_tarball}.directive
gpg --default-key $signing_key --yes --clearsign ${app_tarball}.directive
ftp -v -n -i -p ftp-upload.gnu.org <<EOF
user anonymous
cd $directory
put ${app_tarball}
put ${app_tarball}.sig
put ${app_tarball}.directive.asc
EOF
done
echo "Don't forget to mention the authors announcement. (list with 'contrib/mk_authors')"