]> asedeno.scripts.mit.edu Git - PuTTY.git/blob - release.pl
More post-release checklist updates, and a new script.
[PuTTY.git] / release.pl
1 #!/usr/bin/perl
2
3 # Script to automate some easy-to-mess-up parts of the PuTTY release
4 # procedure.
5
6 use strict;
7 use warnings;
8 use Getopt::Long;
9 use File::Temp qw/tempdir/;
10
11 my $version = undef; 
12 GetOptions("set-version=s" => \$version)
13     or &usage();
14
15 if (defined $version) {
16     0 == system "git", "diff-index", "--quiet", "--cached", "HEAD"
17         or die "index is dirty";
18     0 == system "git", "diff-files", "--quiet" or die "working tree is dirty";
19     -f "Makefile" and die "run 'make distclean' first";
20     my $builddir = tempdir(DIR => ".", CLEANUP => 1);
21     0 == system "./mkfiles.pl" or die;
22     0 == system "cd $builddir && ../configure" or die;
23     0 == system "cd $builddir && make pscp plink RELEASE=${version}" or die;
24     our $pscp_transcript = `cd $builddir && ./pscp --help`;
25     $pscp_transcript =~ s/^Unidentified build/Release ${version}/m or die;
26     $pscp_transcript =~ s/^/\\c /mg;
27     our $plink_transcript = `cd $builddir && ./plink --help`;
28     $plink_transcript =~ s/^Unidentified build/Release ${version}/m or die;
29     $plink_transcript =~ s/^/\\c /mg;
30     &transform("LATEST.VER", sub { s/^\d+\.\d+$/$version/ });
31     &transform("windows/putty.iss", sub {
32         s/^(AppVerName=PuTTY version |VersionInfoTextVersion=Release |AppVersion=|VersionInfoVersion=)\d+\.\d+/$1$version/ });
33     our $transforming = 0;
34     &transform("doc/pscp.but", sub {
35         if (/^\\c.*>pscp$/) { $transforming = 1; $_ .= $pscp_transcript; }
36         elsif (!/^\\c/) { $transforming = 0; }
37         elsif ($transforming) { $_=""; }
38     });
39     $transforming = 0;
40     &transform("doc/plink.but", sub {
41         if (/^\\c.*>plink$/) { $transforming = 1; $_ .= $plink_transcript; }
42         elsif (!/^\\c/) { $transforming = 0; }
43         elsif ($transforming) { $_=""; }
44     });
45     &transform("Buildscr", sub {
46         s!^(set Epoch )\d+!$1 . sprintf "%d", time/86400 - 1000!e });
47     0 == system ("git", "commit", "-a", "-m",
48                  "Update version number for ${version} release.") or die;
49     exit 0;
50 }
51
52 &usage();
53
54 sub transform {
55     my ($filename, $proc) = @_;
56     my $file;
57     open $file, "<", $filename or die "$file: open for read: $!\n";
58     my $data = "";
59     while (<$file>) {
60         $proc->();
61         $data .= $_;
62     }
63     close $file;
64     open $file, ">", $filename or die "$file: open for write: $!\n";
65     print $file $data;
66     close $file or die "$file: close after write: $!\n";;
67 }
68
69 sub usage {
70     die "usage: release.pl --set-version=X.YZ\n";
71 }