#!/pro/bin/perl
use
5.014002;
our
$VERSION
=
"0.031"
;
our
$CMD
= $0 =~ s{.*/}{}r;
sub
usage {
my
$err
=
shift
and
select
STDERR;
say
"usage: $CMD [-r] [-d] [-jN] [local [remote]]"
;
say
" -r --skip-repo Skip repository check"
;
say
" -d --skip-debug Print extra debugging information"
;
say
" -jN --jobs=N Enable parallel tests"
;
exit
$err
;
}
my
%opts
=
map
{
$_
=> 1 }
qw( t a k m p C D )
;
GetOptions (
"help|?"
=>
sub
{ usage (0); },
"V|version"
=>
sub
{
say
"$CMD [$VERSION]"
;
exit
0; },
"r|skip-repo!"
=> \
my
$opt_r
,
"d|skip-debug!"
=> \
$opts
{d},
"j|jobs:0"
=> \
$opts
{j},
"v|verbose:1"
=> \(
my
$opt_v
= 0),
) or usage (1);
my
$class
=
"Module::Release"
;
my
%params
;
@ARGV
and
$params
{
local
} =
shift
;
if
(
@ARGV
) {
$params
{remote} =
shift
;
}
elsif
(
$params
{
local
}) {
$params
{remote} =
$params
{
local
};
}
$opts
{d} and
$params
{debug} = 1;
my
$release
=
$class
->new (
%params
);
$release
->_debug (
"$CMD $VERSION, using $class "
.
$class
->VERSION .
"\n"
);
unless
(
$opt_r
) {
my
@vcs
= (
[
".git"
=>
"Module::Release::Git"
],
[
".gitignore"
=>
"Module::Release::Git"
],
[
".svn"
=>
"Module::Release::SVN"
],
[
"CVS"
=>
"Module::Release::CVS"
],
);
foreach
my
$vcs
(
@vcs
) {
-e
$vcs
->[0] or
next
;
my
$module
=
$vcs
->[1];
$release
->_debug (
"I see an $vcs->[0] directory, so I'm loading $module\n"
);
$release
->load_mixin (
$module
);
$@ and
$release
->_die (
"Could not load $module: $@\n"
);
last
;
}
if
(
$release
->can (
"is_allowed_branch"
)) {
$release
->_print (
"============ Checking for allowed branch\n"
);
my
$branch
=
$release
->vcs_branch;
$release
->is_allowed_branch or
$release
->_die (
"Configuration blocks release from branch <$branch>\n"
);
$release
->_print (
"Branch <$branch> is allowed to release\n"
);
}
}
my
$required
=
$release
->config->required //
""
;
$ENV
{AUTOMATED_TESTING} = 1;
my
$test_jobs
=
$opts
{j} //
$release
->config->test_jobs;
if
(
defined
$test_jobs
) {
$test_jobs
||=
eval
{
System::Info->new->get_core_count;
} || 9;
$ENV
{HARNESS_OPTIONS} =
join
":"
=>
grep
{
length
}
(
split
m/:/ => (
$ENV
{HARNESS_OPTIONS} //
""
)),
"j$test_jobs"
;
$release
->_debug (
"Will use HARNESS_OPTIONS '$ENV{HARNESS_OPTIONS}' during tests\n"
);
}
unless
(
$opt_r
) {
$release
->_print (
"============ Checking source repository\n"
);
$release
->check_vcs;
}
my
$old_perl
=
$release
->get_perl;
my
@perls
=
$release
->perls;
my
(
$n
,
$N
) = (1,
scalar
@perls
);
PERL:
foreach
my
$perl
(
@perls
) {
$release
->_print (
"============ Testing with $perl ("
,
$n
++,
"/$N)\n"
);
$release
->set_perl (
$perl
) or
next
;
$release
->clean;
foreach
my
$mod
(
grep
m/\S/ =>
split
m/\s*,\s*/ =>
$required
) {
$mod
=~ m/^\w+(::\w+)*$/ or
next
;
system
"$perl -M$mod -e1 >/dev/null 2>&1"
;
if
($?) {
warn
"Prereq $mod not available\n"
;
next
PERL;
}
}
$release
->build_makefile;
$release
->make;
$release
->test;
}
$release
->set_perl (
$old_perl
);
$release
->_print (
"============ Cleaning up\n"
);
$release
->distclean;
unlink
glob
"*.tar *.tgz *.tar.gz *.tar.bz *.tar.bz2 *.tbz *.zip"
;
$release
->_print (
"============ DONE!\n"
);