#!/usr/bin/perl
# A simple system for making software releases
-# (c) 2003--2006 Martin Mares <mj@ucw.cz>
+# (c) 2003--2011 Martin Mares <mj@ucw.cz>
package UCW::Release;
use strict;
"archivedir" => "/home/mj/tmp/archives/$basename",
"uploads" => [
],
+ "testmake" => "make",
+ "testclean" => "make distclean",
# Options
"do_test" => 1,
"do_patch" => 1,
"diff_against" => "",
- "do_upload" => 1
+ "do_upload" => 1,
+ "do_sign" => 1,
};
bless $s;
return $s;
close I;
! -x $f or chmod(0755, "$dir/$f") or die "chmod($dir/$f): $!";
} else {
- `cp -a $f $dir/$f`; die if $?;
+ `cp -a "$f" "$dir/$f"`; die if $?;
}
}
`cd $dd && tar cz${tarvv}f $pkg.tar.gz $pkg >&2`; die if $?;
push @{$s->{"distfiles"}}, "$dd/$pkg.tar.gz";
+ if ($s->{'do_sign'}) {
+ print "Signing package\n";
+ system "gpg", "--armor", "--detach-sig", "$dd/$pkg.tar.gz";
+ die if $?;
+ rename "$dd/$pkg.tar.gz.asc", "$dd/$pkg.tar.gz.sign" or die "No signature produced!?\n";
+ push @{$s->{"distfiles"}}, "$dd/$pkg.tar.gz.sign";
+ }
+
my $adir = $s->{"archivedir"};
my $afile = "$adir/$pkg.tar.gz";
print "Archiving to $afile\n";
"test!" => \$s->{"do_test"},
"patch!" => \$s->{"do_patch"},
"diff-against=s" => \$s->{"diff_against"},
- "upload!" => \$s->{"do_upload"}
- ) || die "Syntax: release [--verbose] [--test] [--nopatch] [--diff-against=<version>] [--noupload]";
+ "upload!" => \$s->{"do_upload"},
+ "sign!" => \$s->{"do_sign"},
+ ) || die "Syntax: release [--verbose] [--test] [--nopatch] [--diff-against=<version>] [--noupload] [--nosign]";
}
sub Test($) {
my $dd = $s->{"DISTDIR"};
my $pkg = $s->{"PKG"};
my $log = "$dd/$pkg.log";
+ my $make = $s->{'testmake'};
+ my $clean = $s->{'testclean'};
print "Doing a test compilation\n";
- `( cd $dd/$pkg && make ) >$log 2>&1`;
+ `( cd $dd/$pkg && $make ) >$log 2>&1`;
die "There were errors. Please inspect $log" if $?;
`grep -q [Ww]arning $log`;
$? or print "There were warnings! Please inspect $log.\n";
print "Cleaning up\n";
- `cd $dd/$pkg && make distclean`; die if $?;
+ `cd $dd/$pkg && $clean`; die if $?;
}
sub MakePatch($) {