| 1 |
|
|---|
| 2 |
use warnings; |
|---|
| 3 |
use strict; |
|---|
| 4 |
use File::Path; |
|---|
| 5 |
use LWP::Simple; |
|---|
| 6 |
|
|---|
| 7 |
my $version = shift @ARGV or die "Usage: release.pl version"; |
|---|
| 8 |
|
|---|
| 9 |
my $workdir = "$ENV{HOME}/tmp"; |
|---|
| 10 |
my $checkout = "plagger-$version"; |
|---|
| 11 |
|
|---|
| 12 |
chdir $workdir; |
|---|
| 13 |
|
|---|
| 14 |
if (-e $checkout) { |
|---|
| 15 |
die "$workdir/$checkout exists. Remove it first"; |
|---|
| 16 |
} |
|---|
| 17 |
|
|---|
| 18 |
system("svk co //mirror/plagger/trunk/plagger $checkout"); |
|---|
| 19 |
chdir $checkout; |
|---|
| 20 |
|
|---|
| 21 |
rewrite_version("lib/Plagger.pm", $version); |
|---|
| 22 |
|
|---|
| 23 |
system("perl Makefile.PL --skip"); |
|---|
| 24 |
system("make manifest"); |
|---|
| 25 |
|
|---|
| 26 |
my $url = "http://plagger.org/trac/wiki/PlaggerChangeLog?format=txt"; |
|---|
| 27 |
my $res = LWP::Simple::mirror($url, "Changes"); |
|---|
| 28 |
if ($res !~ /^[23]/) { |
|---|
| 29 |
die "GET $url failed: $res"; |
|---|
| 30 |
} |
|---|
| 31 |
|
|---|
| 32 |
check_version("Changes", $version); |
|---|
| 33 |
|
|---|
| 34 |
if (!system("make disttest")) { |
|---|
| 35 |
system("svk ci -m 'packaging $version'"); |
|---|
| 36 |
system("svk cp -m 'tag release $version' //mirror/plagger/trunk //mirror/plagger/tags/release-$version"); |
|---|
| 37 |
system("make dist"); |
|---|
| 38 |
system("cpan-upload -verbose Plagger-$version.tar.gz"); |
|---|
| 39 |
} else { |
|---|
| 40 |
warn "make disttest failed. Don't upload"; |
|---|
| 41 |
} |
|---|
| 42 |
|
|---|
| 43 |
chdir ".."; |
|---|
| 44 |
system("svk co --detach $checkout"); |
|---|
| 45 |
rmtree("$workdir/$checkout"); |
|---|
| 46 |
|
|---|
| 47 |
sub rewrite_version { |
|---|
| 48 |
my($file, $version) = @_; |
|---|
| 49 |
|
|---|
| 50 |
open my $fh, $file or die "$file: $!"; |
|---|
| 51 |
my $content = join '', <$fh>; |
|---|
| 52 |
close $fh; |
|---|
| 53 |
|
|---|
| 54 |
$content =~ s/^our \$VERSION = .*?;$/our \$VERSION = '$version';/m; |
|---|
| 55 |
|
|---|
| 56 |
open my $out, ">", "lib/Plagger.pm"; |
|---|
| 57 |
print $out $content; |
|---|
| 58 |
close $out; |
|---|
| 59 |
} |
|---|
| 60 |
|
|---|
| 61 |
sub check_version { |
|---|
| 62 |
my($file, $version) = @_; |
|---|
| 63 |
|
|---|
| 64 |
open my $fh, $file or die "$file: $!"; |
|---|
| 65 |
while (<$fh>) { |
|---|
| 66 |
/== \Q$version\E / and return 1; |
|---|
| 67 |
} |
|---|
| 68 |
|
|---|
| 69 |
die "$file doesn't contain log for $version"; |
|---|
| 70 |
} |
|---|