| 280 | | file: tools/release.pl |
| 281 | | chmod: 0744 |
| 282 | | template: | |
| 283 | | #!/usr/bin/perl |
| 284 | | use warnings; |
| 285 | | use strict; |
| 286 | | use File::Path; |
| 287 | | use LWP::Simple; |
| 288 | | use ExtUtils::MakeMaker qw(prompt); |
| 289 | | |
| 290 | | my $version = shift @ARGV or die "Usage: release.pl version"; |
| 291 | | |
| 292 | | my @pkg = split /::/, '[% module %]'; |
| 293 | | my $dist = join "-", @pkg; |
| 294 | | my $path = join("/", @pkg) . ".pm"; |
| 295 | | |
| 296 | | my $workdir = "[% config.workdir %]"; |
| 297 | | my $checkout = "$dist-$version"; |
| 298 | | |
| 299 | | chdir $workdir; |
| 300 | | |
| 301 | | if (-e $checkout) { |
| 302 | | die "$workdir/$checkout exists. Remove it first"; |
| 303 | | } |
| 304 | | |
| 305 | | system("svk co [% config.mirror_repos %]/$dist/trunk $checkout"); |
| 306 | | sleep(2); |
| 307 | | |
| 308 | | if (-e $checkout) { |
| 309 | | chdir $checkout; |
| 310 | | |
| 311 | | rewrite_version("lib/$path", $version); |
| 312 | | |
| 313 | | system("perl Makefile.PL --skip"); |
| 314 | | system("make manifest"); |
| 315 | | |
| 316 | | check_version("Changes", $version); |
| 317 | | |
| 318 | | if (!system("make disttest")) { |
| 319 | | system("svk ci -m 'packaging $version'"); |
| 320 | | system("svk cp -m 'tag release $version' [% config.mirror_repos %]/$dist/trunk [% config.mirror_repos %]/$dist/tags/release-$version"); |
| 321 | | system("make dist"); |
| 322 | | if (prompt("upload to CPAN?: [yN]", 'n') =~ /[yY]/) { |
| 323 | | system("cpan-upload -verbose $dist-$version.tar.gz"); |
| 324 | | } else { |
| 325 | | rename "$dist-$version.tar.gz", "../$dist-$version.tar.gz"; |
| 326 | | } |
| 327 | | } else { |
| 328 | | warn "make disttest failed. Don't upload"; |
| 329 | | } |
| 330 | | |
| 331 | | chdir ".."; |
| 332 | | system("svk co --detach $checkout"); |
| 333 | | } |
| 334 | | |
| 335 | | rmtree("$workdir/$checkout"); |
| 336 | | |
| 337 | | sub rewrite_version { |
| 338 | | my($file, $version) = @_; |
| 339 | | |
| 340 | | open my $fh, $file or die "$file: $!"; |
| 341 | | my $content = join '', <$fh>; |
| 342 | | close $fh; |
| 343 | | |
| 344 | | $content =~ s/^our \$VERSION = .*?;$/our \$VERSION = '$version';/m; |
| 345 | | |
| 346 | | open my $out, ">", "lib/$path"; |
| 347 | | print $out $content; |
| 348 | | close $out; |
| 349 | | } |
| 350 | | |
| 351 | | sub check_version { |
| 352 | | my($file, $version) = @_; |
| 353 | | |
| 354 | | open my $fh, $file or die "$file: $!"; |
| 355 | | while (<$fh>) { |
| 356 | | /^\Q$version\E / and return 1; |
| 357 | | } |
| 358 | | |
| 359 | | die "$file doesn't contain log for $version"; |
| 360 | | } |
| | 280 | file: .shipit |
| | 281 | chmod: 0644 |
| | 282 | template: | |
| | 283 | steps = FindVersion, ChangeVersion, CheckChangeLog, DistTest, Commit, Tag, MakeDist, UploadCPAN |
| | 284 | svk.tagpattern = release-%v |