Handle betas in do-release.pl
[archaic-openssl.git] / do-release.pl
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 my $tmpdir = $ENV{"OPENSSL_TMP_DIR"} // glob("~" . getlogin ) . "/tmpdist";
7 my $srcdir = $ENV{"OPENSSL_SRC_DIR"} // "/e/openssl/web/source";
8 my $ftpdir = $ENV{"OPENSSL_FTP_DIR"} // "/e/openssl/ftp/source";
9 my $mail = $ENV{"OPENSSL_MAIL"} // "mutt -s SUBJECT RECIP < BODY";
10
11 my $do_mail = 0;
12 my $do_copy = 0;
13 my $mail_only = 0;
14
15 foreach(@ARGV)
16         {
17         if (/--tmpdir=(.*)$/)
18                 {
19                 $tmpdir = $1;
20                 }
21         elsif (/^--copy$/)
22                 {
23                 $do_copy = 1;
24                 }
25         elsif (/^--mail$/)
26                 {
27                 $do_mail = 1;
28                 }
29         elsif (/^--mail-only$/)
30                 {
31                 $mail_only = 1;
32                 $do_mail = 1;
33                 }
34         elsif (/^--full-release$/)
35                 {
36                 $do_mail = 1;
37                 $do_copy = 1;
38                 }
39         else
40                 {
41                 print STDERR "Unknown command line argument $_";
42                 exit 1;
43                 }
44         }
45
46 die "Can't find distrubution directory $tmpdir" unless -d $tmpdir;
47 die "Can't find source directory $srcdir" unless -d $srcdir;
48 die "Can't find ftp directory $ftpdir" unless -d $ftpdir;
49
50 my @files = <$tmpdir/*>;
51 my $version = $files[0];
52
53 if ($version =~ /beta/)
54         {
55         $version =~ s/^.*\/openssl-(\d+\.\d+\.\d+[a-z]*-beta\d+)\..*$/$1/;
56         }
57 else
58         {
59         $version =~ s/^.*\/openssl-(\d+\.\d+\.\d+[a-z]*)\..*$/$1/;
60         }
61
62 my $announce = "$tmpdir/openssl-$version.txt.asc";
63
64 my @distfiles = (
65         "openssl-$version.tar.gz",
66         "openssl-$version.tar.gz.md5",
67         "openssl-$version.tar.gz.sha1",
68         "openssl-$version.tar.gz.asc",
69 );
70
71 die "Unexpected files in temp directory" if (scalar @files > 5);
72
73 die "Announcement file $announce not found!" unless -f "$announce";
74
75 $do_copy = 0 if $mail_only;
76
77 my $bad = 0;
78 foreach (@distfiles)
79         {
80         if (! -f "$tmpdir/$_")
81                 {
82                 print STDERR "File $_ not found in temp directory!\n";
83                 $bad = 1;
84                 }
85         if (-e "$srcdir/$_" && !$mail_only)
86                 {
87                 print STDERR "File $_ already present in source directory!\n";
88                 $bad = 1;
89                 }
90         if (-e "$ftpdir/$_" && !$mail_only)
91                 {
92                 print STDERR "File $_ already present in ftp directory!\n";
93                 $bad = 1;
94                 }
95         }
96
97 exit 1 if $bad;
98
99 print "Directory sanity check OK\n";
100
101 my $annversion = $version;
102
103 $annversion =~ s/-beta(\d+$)/ beta $1/;
104         
105 print "Starting release for OpenSSL $annversion\n";
106
107 if ($do_copy)
108         {
109         foreach(@distfiles)
110                 {
111                 system("cp $tmpdir/$_ $srcdir/$_");
112                 die "Error copying $_ to source directory!" if $?;
113                 system("cp $tmpdir/$_ $ftpdir/$_");
114                 die "Error linking $_ to ftp directory!" if $?;
115                 }
116         print "Copied distributions files to source and ftp directories\n";
117         }
118 else
119         {
120         print "Test mode: no files copied\n";
121         }
122
123 $mail =~ s/SUBJECT/"OpenSSL version $annversion released"/;
124 $mail =~ s/RECIP/openssl-dev openssl-users openssl-announce/;
125 $mail =~ s/BODY/$announce/;
126
127 if ($do_mail) 
128         {
129
130         print "Sending announcement email...\n";
131
132         system("$mail");
133         die "Error sending announcement email!" if $?;
134         print "Don't forget to authorise the openssl-announce email.\n";
135
136         }
137 else
138         {
139         print "Announcement email not sent automatically\n";
140         print "\nSend announcement mail manually with command:\n\n$mail\n\n";
141         }
142
143 print "Release successful!\n";
144