#!/bin/sh FROM_NAME='Patrick McDermott' FROM_EMAIL='patrick.mcdermott@libiquity.com' SIG="$(cat <<-EOF Patrick McDermott, CEO Libiquity Putting customers in control of high-quality technologies https://www.libiquity.com/ EOF )" KEY='2250 31F0 47FF E516 63ED 516F 1A45 9ECD E4D6 04BE' TO_EMAIL='proteanos-dev@lists.proteanos.com' package="${1}" version="${2}" package_name="${3}" srcdir="${0%/scripts/announce-release.sh}" heading() { local name="${1}" shift 1 printf '%s\n' "${name}" printf '%s\n' "${name}" | sed 's/./=/g' } about="$(sed -n ' H; ${ g; s/^\n*[^\n][^\n]*\n[=-][=-]*\n\n*//; s/\n*[^\n][^\n]*\n[=-][=-]*\n.*$//; p; }; ' "${srcdir}/README")" news="$(sed -n ' H; ${ g; s/^\n*[^\n][^\n]*\n[=-][=-]*\n\n*//; s/^Released: [^\n]*\n\n*//; s/\n*[^\n][^\n]*\n[=-][=-]*\n.*$//; p; }; ' "${srcdir}/NEWS")" old_version="$(sed -n "/^${package_name} version /p;" "${srcdir}/NEWS" | \ sed -n "2{ s/^${package_name} version //p; };")" old_tag="$(git tag --sort=creatordate | tail -n 2 | head -n 1)" export GIT_DIR="${srcdir}/.git" shortlog="$(git shortlog "${old_tag}..HEAD" | \ sed '/^..*$/s/^//')" if [ $(printf '%s\n' "${shortlog}" | wc -l) -gt 100 ]; then shortlog="$(git shortlog -s "${old_tag}..HEAD"; cat <<-EOF Commit descriptions suppressed for brevity. To see a log summary with descriptions, run: \$ git shortlog ${old_tag}..${package}/${version} EOF )" fi diffstat="$(git diff --stat=72 --color=never --find-renames=50% \ "${old_tag}..HEAD")" if [ $(printf '%s\n' "${diffstat}" | wc -l) -gt 50 ]; then diffstat="$(printf '%s\n' "${diffstat}" | tail -n 1; cat <<-EOF Difference statistics truncated for brevity. To see full statistics, run: \$ git diff --stat --find-renames=50% \\ > ${old_tag}..${package}/${version} EOF )" fi message="$({ cat | sed 's/=/=3D/g; s/ $/=20/; s/\t$/=09/;'; } <<-EOF Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable $(heading 'About') ${about} $(heading 'Downloading') Source archives are available from the files site by HTTP or FTP: http://files.proteanos.com/pub/${package}/${version}/ ftp://files.proteanos.com/pub/${package}/${version}/ Here are the MD5 checksums: $(sed 's/^/ /' MD5SUMS) Here are the SHA-256 checksums: $(sed 's/^/ /' SHA256SUMS) The sources are maintained in a Git repository: http://git.proteanos.com/${package}/${package}.git/ git://git.proteanos.com/${package}/${package}.git/ This release is marked by the "${package}/${version}" tag. $(heading "NEWS for Version ${version}") ${news} $(heading "Shortlog of Changes Since Version ${old_version}") ${shortlog} $(heading "Diffstat of Changes Since Version ${old_version}") ${diffstat} -- ${SIG} EOF )" { sed 's/$/\r/' | /usr/sbin/sendmail -f "${FROM_EMAIL}" \ "${TO_EMAIL}"; } <<-EOF Date: $(LC_ALL='POSIX' date '+%a, %d %b %Y %H:%M:%S %z') From: ${FROM_NAME} <${FROM_EMAIL}> To: ${TO_EMAIL} Subject: ${package_name} ${version} released Message-ID: $(LC_ALL='POSIX' date \ '+%Y%m%d%H%M%S').${FROM_EMAIL} MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; boundary="=-=-="; protocol="application/pgp-signature" --=-=-= ${message} --=-=-= Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature $(printf '%s\n' "${message}" | sed 's/$/\r/' | \ gpg --local-user "${KEY}" --armor --output - \ --digest-algo SHA256 --detach-sign) --=-=-=-- EOF