-#!/usr/bin/perl
+#!/usr/bin/env perl
use strict;
use warnings;
use CPAN;
use Cwd;
use File::chdir;
-use File::Path qw( rmtree );
+use IPC::Run3 qw( run3 );
CPAN::HandleConfig->load();
open my $log, '>', $LOGFILE || die "Could not open $LOGFILE because $!";
-test_all_modules(
- qw[
- Moose::Autobox
- MooseX::Accessors::ReadWritePrivate
- MooseX::App::Cmd
- MooseX::Async
- MooseX::Attribute::ENV
- MooseX::AttributeHelpers
- MooseX::Attribute::Prototype
- MooseX::Attributes::Curried
- MooseX::Blessed::Reconstruct
- MooseX::ClassAttribute
- MooseX::Clone
- MooseX::ConfigFromFile
- MooseX::Constructor::AllErrors
- MooseX::Contract
- MooseX::Control
- MooseX::CurriedHandles
- MooseX::Daemonize
- MooseX::Declare
- MooseX::DeepAccessors
- MooseX::DOM
- MooseX::Emulate::Class::Accessor::Fast
- MooseX::FollowPBP
- MooseX::Getopt
- MooseX::GlobRef::Object
- MooseX::InsideOut
- MooseX::Iterator
- MooseX::KeyedMutex
- MooseX::LazyLogDispatch
- MooseX::LogDispatch
- MooseX::Log::Log4perl
- MooseX::MakeImmutable
- MooseX::Meta::TypeConstraint::ForceCoercion
- MooseX::MetaDescription
- MooseX::MethodAttributes
- MooseX::Method::Signatures
- MooseX::MultiInitArg
- MooseX::MultiMethods
- MooseX::MutatorAttributes
- MooseX::NaturalKey
- MooseX::NonMoose
- MooseX::Object::Pluggable
- MooseX::Param
- MooseX::Params::Validate
- MooseX::Plaggerize
- MooseX::POE
- MooseX::Policy::SemiAffordanceAccessor
- MooseX::Q4MLog
- MooseX::Role::Cmd
- MooseX::Role::Matcher
- MooseX::Role::Parameterized
- MooseX::Role::TraitConstructor
- MooseX::Role::XMLRPC::Client
- MooseX::Scaffold
- MooseX::SemiAffordanceAccessor
- MooseX::SimpleConfig
- MooseX::Singleton
- MooseX::Storage
- MooseX::Storage::Format::XML::Simple
- MooseX::StrictConstructor
- MooseX::Struct
- MooseX::Templated
- MooseX::Timestamp
- MooseX::Traits
- MooseX::Traits::Attribute::CascadeClear
- MooseX::Types
- MooseX::Types::Authen::Passphrase
- MooseX::Types::Common
- MooseX::Types::Data::GUID
- MooseX::Types::DateTime
- MooseX::Types::IO
- MooseX::Types::Path::Class
- MooseX::Types::Set::Object
- MooseX::Types::Structured
- MooseX::Types::URI
- MooseX::Types::UUID
- MooseX::Types::VariantTable
- MooseX::WithCache
- MooseX::Workers
- MooseX::YAML
- Fey::ORM
- KiokuDB
- Catalyst
- ]
-);
+my $MODULE_LIST_FILE = ( cwd . '/cpan-stable-modules' );
+
+my @modules;
+{
+ open my $fh, $MODULE_LIST_FILE or die "Can't open $MODULE_LIST_FILE: $!";
+ @modules = map { chomp; $_ } <$fh>;
+}
+
+test_all_modules(@modules);
close $log;
exit;
sub test_all_modules {
- foreach my $project (grep {$_ eq 'Fey::ORM'}@_) {
+ my @statuses;
+ my @details;
+
+ foreach my $project (@_) {
my $dist = get_distro_from_cpan($project);
unless ($dist) {
- print $log "UNKNOWN : $project (not on CPAN?)\n";
+ print {$log} "UNKNOWN : $project (not on CPAN?)\n";
next;
}
- my $passed = test_module( $dist->dir() );
+ my ( $passed, $warned, $output ) = test_module( $dist->dir() );
+
+ my $status = $passed && $warned ? 'WARN' : $passed ? 'PASS' : 'FAIL';
- my $msg = $passed ? 'SUCCESS' : 'FAIL';
+ my $summary = "$status: $project - " . $dist->base_id();
+ print {$log} "$summary\n";
- print $log sprintf( '%7s : %s - %s', $msg, $project, $dist->base_id() );
- print $log "\n";
+ push @details, [ $project, $output ]
+ if $warned || ! $passed;
+ }
+
+ if (@details) {
+ print {$log} "\n\n";
+
+ for my $detail (@details) {
+ print {$log} q{-} x 50;
+ print {$log} "\n";
+ print {$log} "$detail->[0]\n\n";
+ print {$log} "$detail->[1]\n\n";
+ }
}
}
local $ENV{PERL_AUTOINSTALL} = '--defaultdeps';
if ( -f "Build.PL" ) {
- _run_commands(
+ return
+ unless _run_commands(
[ $^X, 'Build.PL' ],
['./Build'],
- [qw( ./Build test )],
- );
+ );
}
else {
- _run_commands(
+ return
+ unless _run_commands(
[ $^X, 'Makefile.PL' ],
['make'],
- [qw( make test )],
- );
+ );
}
+
+ return _run_tests();
}
sub _run_commands {
for my $cmd (@_) {
- if ( system( @{$cmd} ) ) {
+ my $output;
+
+ unless ( run3 $cmd, \undef, \$output, \$output ) {
warn "Failed to run @{$cmd}\n";
- return;
+ return ( 0, $output );
}
}
+
+ return 1;
+}
+
+sub _run_tests {
+ my $output;
+
+ run3 [ qw( prove -br ) ], undef, \$output, \$output;
+
+ my $passed = $output =~ /Result: PASS/;
+ my $warned = $output =~ /at .+ line \d+/;
+
+ return ( $passed, $warned, $output );
}
-1;