#!/usr/bin/env perl
my
$dir
= dirname(__FILE__);
my
$root
= abs2rel(abs_path(catfile(
$dir
, updir)));
my
$new_version
= strftime
'%Y%m%d'
,
gmtime
;
my
$release_changes
;
{
my
$infile
= canonpath(
"$root/Changes"
);
my
$outfile
=
"$infile.update.$$"
;
open
my
$in
,
'<'
,
$infile
or
die
"can't read $infile: $!"
;
open
my
$out
,
'>'
,
$outfile
or
die
"can't write $outfile: $!"
;
my
$found_version
;
my
$head
=
''
;
while
(
my
$line
= <
$in
>) {
if
(
$found_version
) {
print
{
$out
}
$line
;
}
elsif
(
$line
=~ /^v?([\d.]+)\b/) {
my
$prev_version
= $1;
$found_version
++;
(
my
$prelude
,
$release_changes
)
=
$head
=~ /\A(.*?)((?:^[ \t]+-.*)?)\z/ms;
my
$date
= strftime
'%Y-%m-%d'
,
gmtime
;
$release_changes
=~ s{\n+\z}{};
$release_changes
.=
"\n"
if
length
$release_changes
;
my
$cert_diff
= `
"$^X"
"$root/maint/cacert-diff"
"v$prev_version"
`;
if
(
length
$cert_diff
) {
$release_changes
.=
" - Update from Mozilla repository to $date\n"
;
$release_changes
.=
$cert_diff
;
}
if
(!
length
$release_changes
) {
close
$out
;
unlink
$outfile
;
die
"No entries in Changes - stopping release!\n"
;
}
if
(
int
$new_version
==
int
$prev_version
) {
$new_version
=
$prev_version
+ 0.1;
}
print
{
$out
}
$prelude
;
print
{
$out
}
"$new_version\n"
;
print
{
$out
}
$release_changes
;
print
{
$out
}
"\n"
;
print
{
$out
}
$line
;
}
else
{
$head
.=
$line
;
}
}
print
"Updating Changes file.\n"
;
rename
$outfile
,
$infile
or
die
"can't replace $infile with $outfile: $!"
;
}
{
my
$infile
= canonpath(
"$root/lib/Mozilla/CA.pm"
);
my
$outfile
=
"$infile.update.$$"
;
open
my
$in
,
'<'
,
$infile
or
die
"can't read $infile: $!"
;
open
my
$out
,
'>'
,
$outfile
or
die
"can't write $outfile: $!"
;
my
$found_version
;
while
(
my
$line
= <
$in
>) {
if
(!
$found_version
) {
$line
=~ s{(^
our
\
$VERSION
= )
'\d+(?:\.\d+)?'
}{$1
'$new_version'
}
and
$found_version
++;
}
print
{
$out
}
$line
;
}
close
$in
;
close
$out
or
die
$!;
print
"Updating version in $infile to $new_version.\n"
;
rename
$outfile
,
$infile
or
die
"can't replace $infile with $outfile: $!"
;
}
{
system
'git'
,
'-C'
,
$root
,
'add'
,
'Changes'
;
system
'git'
,
'-C'
,
$root
,
'add'
,
'lib/Mozilla/CA.pm'
;
system
'git'
,
'-C'
,
$root
,
'commit'
,
'-m'
,
"release $new_version"
;
my
$pid
=
open
my
$fh
,
'|-'
,
'git'
,
'tag'
,
'-a'
,
'-F'
,
'-'
,
"v$new_version"
;
print
{
$fh
}
"release $new_version\n\n"
;
print
{
$fh
}
$release_changes
;
close
$fh
;
waitpid
$pid
, 0;
}
if
(
defined
$ENV
{GITHUB_OUTPUT}) {
open
my
$fh
,
'>>'
,
$ENV
{GITHUB_OUTPUT}
or
die
"can't append to $ENV{GITHUB_OUTPUT}: $!"
;
print
{
$fh
}
"tag-name=v$new_version\n"
;
close
$fh
;
}