| #!/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')" |