aboutsummaryrefslogtreecommitdiffstats
path: root/dist-tools/makerelease
diff options
context:
space:
mode:
authorGraham Wilson <graham@mknod.org>2004-08-30 01:34:48 +0000
committerGraham Wilson <graham@mknod.org>2004-08-30 01:34:48 +0000
commitc3a80da98846c21a5d3f32a91669d78774a0aa6a (patch)
tree72bee6836c468c8527560821cd65618f2c7b115d /dist-tools/makerelease
parentfd2543489b53fe34a18b7204d6803bf527c0d198 (diff)
downloadfetchmail-c3a80da98846c21a5d3f32a91669d78774a0aa6a.tar.gz
fetchmail-c3a80da98846c21a5d3f32a91669d78774a0aa6a.tar.bz2
fetchmail-c3a80da98846c21a5d3f32a91669d78774a0aa6a.zip
Move a handful of scripts (used for releases, testing, etc.) to dist-tools, so that they are not released in the tarball.
svn path=/trunk/; revision=3934
Diffstat (limited to 'dist-tools/makerelease')
-rwxr-xr-xdist-tools/makerelease176
1 files changed, 176 insertions, 0 deletions
diff --git a/dist-tools/makerelease b/dist-tools/makerelease
new file mode 100755
index 00000000..41ddf038
--- /dev/null
+++ b/dist-tools/makerelease
@@ -0,0 +1,176 @@
+#!/usr/bin/env perl
+#
+# Make a fetchmail release. Must be run as root, to make RPMs.
+# Dumps a release notice and diffs as a MIME multipart message
+# in RELEASE_NOTES
+#
+use POSIX qw(strftime);
+$timezone = strftime('%z', localtime) || "-0500";
+$tmp = $ENV{TMPDIR} || $ENV{TMP} || $ENV{TEMP} || "/tmp";
+
+$project = "fetchmail";
+$svnrepos = "svn://svn.berlios.de/$project";
+$website = "http://developer.berlios.de/projects/$project";
+$mailfrom = "<$project-devel-owner\@lists.berlios.de> (Fetchmail Development Team)";
+
+# parse options
+$diffs = 0;
+$verbose = 0;
+$null = ">/dev/null";
+$errnull = "2>/dev/null";
+while ($i = shift @ARGV)
+{
+ if ($i =~ /^(--diffs|-d)$/i)
+ {
+ $diffs = 1;
+ next;
+ }
+
+ if ($i =~ /^(--verbose|-v)$/i)
+ {
+ $verbose = 1;
+ $null = "";
+ next;
+ }
+
+ die "Error: Unknown option: $i\n";
+}
+
+# extract version from source
+$version=`grep 'AC_INIT' configure.in`;
+$version =~ /AC_INIT\([^,]*,\[?([0-9.]+)\]?\)/;
+$version = $1;
+die "cannot determine version" unless defined $1;
+$tag = "RELEASE_$version";
+$tag =~ tr/./-/;
+
+# extract existing tags
+open(ID, "svn ls $svnrepos/tags|");
+while (<ID>) {
+ if (m{^(RELEASE_.*)/}) {
+ unshift(@versions, $1);
+ }
+}
+close(ID);
+
+if ($versions[0] eq $tag) {
+ $tag = $versions[0];
+ $oldtag = $versions[1];
+} else {
+ $tag = '<workfile>';
+ $oldtag = $versions[0];
+}
+
+$ENV{PATH} .= ":./dist-tools:./dist-tools/shipper:.";
+
+print "Building $version release, tag $tag, previous tag $oldtag\n";
+
+if (-d autom4te.cache) {
+ system("rm -rf autom4te.cache")
+ and die "Failure in removing autom4te.cache";
+}
+
+if (system("autoreconf -isv")) {
+ die("Failure in regenerating autoconf files\n");
+}
+
+if (system("./configure && make clean && make -C po update-po && make clean")) {
+ die("Failure in translation-file rebuild\n");
+}
+
+print "### Test-building the software...\n";
+if (system("./configure && make clean && make all check")) {
+ die("Compilation failure\n");
+}
+
+print "### Building the distribution...\n";
+if (system("make dist $null")) {
+ die("Distribution-build failure\n");
+}
+
+print "### Building the RPMs...\n";
+if (system("buildrpms $project-${version}.tar.gz $null")) {
+ die("RPM-build failure\n");
+}
+
+open(REPORT, ">$tmp/$project.PREAMBLE.$$");
+
+print REPORT <<EOF;
+From: $mailfrom
+Subject: The $version release of $project is available
+
+The $version release of $project is now available at the usual locations,
+including <URL:$website>.
+
+The source archive is available at:
+<URL:$website/$project-${version}.tar.gz>
+
+Here are the release notes:
+
+EOF
+
+# Extract the current notes
+open(NEWS, "NEWS");
+while (<NEWS>) {
+ if (/^$project/) {
+ print REPORT $_;
+ last;
+ }
+}
+while (<NEWS>) {
+ if (/^$project/) {
+ last;
+ }
+ print REPORT $_;
+}
+
+$oldver = $oldtag;
+$oldver =~ tr/-/./;
+$oldver =~ s/^RELEASE_//;
+
+if ($diffs) {
+ print REPORT "Diffs from the previous ($oldver) release follow as a MIME attachment."
+} else {
+ print REPORT "By popular demand, diffs from the previous release have been omitted."
+}
+
+close(NEWS);
+
+close(REPORT);
+
+if ($tag eq '<workfile>') {
+ system("svn diff -r$oldtag $errnull >$tmp/$project.DIFFS.$$");
+} else {
+ system("svn diff -r$oldtag -r$tag $errnull >$tmp/$project.DIFFS.$$");
+}
+print "Diff size:";
+system("wc <$tmp/$project.DIFFS.$$");
+
+if ($diffs) {
+ system "metasend -b"
+ ." -D '$project-$tag announcement' -m 'text/plain' -e 7bit -f $tmp/$project.PREAMBLE.$$"
+ ." -n -D 'diff between $oldver and $version' -m 'text/plain' -e 7bit -f $tmp/$project.DIFFS.$$"
+ ." -o ANNOUNCE.EMAIL";
+} else {
+ rename("$tmp/$project.PREAMBLE.$$", "ANNOUNCE.EMAIL");
+}
+#system("chown esr ANNOUNCE.EMAIL");
+#chmod(0700, "ANNOUNCE.EMAIL");
+
+#unlink("$tmp/$project.PREAMBLE.$$");
+unlink("$tmp/$project.DIFFS.$$");
+
+print "Building index page...\n";
+system("rm -f index.html; indexgen.sh");
+
+if (-r "testsites") {
+ print "Building test server list...\n";
+ system("rm -f testservers.html; testservers-gen.sh >testservers.html");
+}
+
+print "Making activity graph...";
+system "growthplot";
+
+print "Done\n";
+
+# makerelease ends here