blob: c7f8deae48c50aa308d3bde7fae08de28e8ce47a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
#!/bin/sh
set -e
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}"
export GIT_DIR="${srcdir}/.git"
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 / Since Version /p; };")"
old_tag="$(git tag --sort=-creatordate | sed -n '2{p;q;}')"
# Empty tree SHA-1 hash:
[ -z "${old_tag}" ] && old_tag='4b825dc642cb6eb9a060e54bf8d69288fbee4904'
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${old_version}")
${shortlog}
$(heading "Diffstat of Changes${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}
Organization: Libiquity LLC
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
|