Various updates.
[archaic-openssl.git] / mkrelease.pl
1 # OpenSSL release generation script.
2
3 # Add script directory to search list.
4
5 use strict;
6
7 use File::Basename;
8 use lib dirname (__FILE__);
9
10 require "release-check.pl";
11 require "release-date.pl";
12 require "release-git.pl";
13 require "release-update.pl";
14 require "release-version.pl";
15
16 our $debug = 0;
17 our $verbose = 0;
18 my @openssl_branches;
19 my ($revert, $beta, $info_only, $branch_info_only, $no_update);
20 my $major_branch;
21 my $ok;
22
23 sub print_git_info
24         {
25         my ($major, $s) = @_;
26         my $version = openssl_git_expected_version($major);
27         my $last = openssl_last_release($major, 1);
28         my $next = openssl_version_next($version, $beta);
29
30         print "${s}Major version:    $major\n";
31         print "${s}Last release:     $last\n";
32         print "${s}Current version:  $version\n";
33         print "${s}Next release:     $next\n";
34         }
35
36 sub print_branch_info
37         {
38         print "All Branch details:\n";
39         foreach (@openssl_branches)
40                 {
41                 print "\n";
42                 print_git_info($_, "\t");
43                 }
44         print "\n";
45         }
46
47 # Initialise git version tables
48 @openssl_branches = openssl_git_releases();
49
50 foreach (@ARGV) {
51         if (/^--git-info$/) {
52                 $info_only = 1;
53         } elsif (/^--major-version=(.*)$/) {
54                 $major_branch = $1;
55         } elsif (/^--git-branch-info/) {
56                 $branch_info_only = 1;
57         } elsif (/^--no-update/) {
58                 $no_update = 1;
59         } elsif (/^--revert/) {
60                 $revert = 1;
61         } elsif (/^--beta/) {
62                 $beta = 1;
63         } elsif (/^--debug/) {
64                 $debug = 1;
65                 $verbose = 1;
66         } elsif (/^--verbose/) {
67                 $verbose = 1;
68         }
69 }
70
71 $major_branch = openssl_git_major_version() unless defined $major_branch;
72
73 if ($info_only)
74         {
75         print_git_info($major_branch, "");
76         exit 0;
77         }
78
79 if ($branch_info_only)
80         {
81         print_branch_info();
82         exit 0;
83         }
84
85 if ($revert)
86         {
87         my $_ = openssl_git_current_branch();
88         print "Reverting to repository version for $_\n";
89         system ("git reset --hard origin/$_");
90         die "Error reverting!!" if $?;
91         exit 0;
92         }
93
94 my $current_major = openssl_git_major_version();
95 my $expected_version = openssl_git_expected_version($current_major);
96 my $last_version = openssl_last_release($current_major);
97 my $last_branch_release = openssl_last_release($current_major, 1);
98 my $next_version = openssl_version_next($expected_version, $beta);
99
100 print "Current branch major version $current_major\n";
101 print "Last release on this branch: $last_branch_release\n";
102 print "Current branch version $expected_version\n";
103 print "Next release version $next_version\n";
104
105 $ok = openssl_check_all($expected_version, $last_version);
106
107 print "Branch sanity check: " . ($ok ? "OK" : "NOT OK") . "\n";
108
109 if ($ok == 0)
110         {
111         print "Sanity check failed, cannot continue\n";
112         exit 1;
113         }
114
115 openssl_git_make_update() unless $no_update;
116
117 my $date = openssl_current_date();
118
119 $expected_version = openssl_version_next($expected_version, $beta);
120
121 print "Updating versions to $expected_version\n";
122
123 openssl_update_all($expected_version, $date);
124
125 $ok = openssl_check_all($expected_version, $last_version, $date);
126
127 print "Changes sanity check: " . ($ok ? "OK" : "NOT OK") . "\n";
128
129 if ($ok == 0)
130         {
131         print "Release sanity check failed, cannot continue\n";
132         exit 1;
133         }
134
135 print "Committing changes:\n";
136
137 system("git commit -a -m \"Prepare for $expected_version release\"");
138 die "Error comitting release changes!" if $?;
139
140 my $tag = "OpenSSL_$expected_version";
141
142 $tag =~ tr/\./_/;
143
144 print "Tagging release with tag $tag\n";
145
146 system("git tag -m \"OpenSSL $expected_version release tag\" $tag");
147 die "Error tagging release!" if $?;
148
149 $last_version = $expected_version;
150 $expected_version = openssl_version_next($expected_version, $beta);
151
152 print "Updating versions to $expected_version\n";
153
154 openssl_update_all($expected_version);
155
156 $ok = openssl_check_all($expected_version, $last_version);
157
158 print "Sanity check: " . ($ok ? "OK" : "NOT OK") . "\n";
159
160 if ($ok == 0)
161         {
162         print "Sanity check failed, cannot continue\n";
163         exit 1;
164         }
165
166 system("git commit -a -m \"Prepare for $expected_version\"");
167 die "Error comitting release changes!" if $?;