8 use File::Path qw( rmtree );
9 use IPC::Run3 qw( run3 );
12 CPAN::HandleConfig->load();
13 CPAN::Shell::setup_output();
14 CPAN::Index->reload();
16 local $CPAN::Config->{tar_verbosity} = 'none';
17 local $CPAN::Config->{load_module_verbosity} = 'none';
20 my $LOGFILE = ( cwd . "/cpan-stable-smolder.log" );
26 open my $log, '>', $LOGFILE || die "Could not open $LOGFILE because $!";
31 MooseX::Accessors::ReadWritePrivate
34 MooseX::Attribute::ENV
35 MooseX::AttributeHelpers
36 MooseX::Attribute::Prototype
37 MooseX::Attributes::Curried
38 MooseX::Blessed::Reconstruct
39 MooseX::ClassAttribute
41 MooseX::ConfigFromFile
42 MooseX::Constructor::AllErrors
45 MooseX::CurriedHandles
50 MooseX::Emulate::Class::Accessor::Fast
53 MooseX::GlobRef::Object
57 MooseX::LazyLogDispatch
61 MooseX::Meta::TypeConstraint::ForceCoercion
62 MooseX::MetaDescription
63 MooseX::MethodAttributes
64 MooseX::Method::Signatures
67 MooseX::MutatorAttributes
70 MooseX::Object::Pluggable
72 MooseX::Params::Validate
75 MooseX::Policy::SemiAffordanceAccessor
79 MooseX::Role::Parameterized
80 MooseX::Role::TraitConstructor
81 MooseX::Role::XMLRPC::Client
83 MooseX::SemiAffordanceAccessor
87 MooseX::Storage::Format::XML::Simple
88 MooseX::StrictConstructor
93 MooseX::Traits::Attribute::CascadeClear
95 MooseX::Types::Authen::Passphrase
97 MooseX::Types::Data::GUID
98 MooseX::Types::DateTime
100 MooseX::Types::Path::Class
101 MooseX::Types::Set::Object
102 MooseX::Types::Structured
105 MooseX::Types::VariantTable
119 sub test_all_modules {
123 foreach my $project (@_) {
124 my $dist = get_distro_from_cpan($project);
127 print {$log} "UNKNOWN : $project (not on CPAN?)\n";
131 my ( $passed, $warned, $output ) = test_module( $dist->dir() );
133 my $status = $passed && $warned ? 'WARN' : $passed ? 'PASS' : 'FAIL';
135 push @statuses, "$status: $project - " . $dist->base_id();
137 push @details, [ $project, $output ]
138 if $warned || ! $passed;
141 for my $status (@statuses) {
142 print {$log} "$status\n";
148 for my $detail (@details) {
149 print {$log} q{-} x 50;
151 print {$log} "$detail->[0]\n\n";
152 print {$log} "$detail->[1]\n\n";
157 sub get_distro_from_cpan {
160 ( my $module = $project ) =~ s/-/::/g;
162 my @mods = CPAN::Shell->expand( 'Module', $module );
164 die "Cannot resolve $project to a single module object"
169 my $dist = $mods[0]->distribution();
181 local $ENV{PERL_AUTOINSTALL} = '--defaultdeps';
182 if ( -f "Build.PL" ) {
184 unless _run_commands(
191 unless _run_commands(
192 [ $^X, 'Makefile.PL' ],
204 unless ( run3 $cmd, \undef, \$output, \$output ) {
205 warn "Failed to run @{$cmd}\n";
206 return ( 0, $output );
216 run3 [ qw( prove -b ) ], undef, \$output, \$output;
218 my $passed = $output =~ /Result: PASS/;
219 my $warned = $output =~ /at .+ line \d+/;
221 return ( $passed, $warned, $output );