#!/usr/bin/perl use strict; use warnings; use CPAN; use Cwd; use File::chdir; use File::Path qw( rmtree ); CPAN::HandleConfig->load(); CPAN::Shell::setup_output(); CPAN::Index->reload(); local $CPAN::Config->{tar_verbosity} = 'none'; local $CPAN::Config->{load_module_verbosity} = 'none'; my $LOGFILE = ( cwd . "/cpan-stable-smolder.log" ); if ( -f $LOGFILE ) { unlink $LOGFILE; } open my $log, '>', $LOGFILE || die "Could not open $LOGFILE because $!"; test_all_modules( qw[ Moose-Autobox Moose-Policy Moose-Test Moose-Tiny MooseX-App-Cmd MooseX-ArrayInstance MooseX-Async MooseX-Attribute-Cached MooseX-Attribute-ENV MooseX-AttributeHelpers MooseX-Attribute-Restricted MooseX-AutoDoc MooseX-Cache MooseX-ClassAttribute MooseX-Clone MooseX-ConfigFromFile MooseX-Coro MooseX-Daemonize MooseX-Emulate-Class-Accessor-Fast MooseX-Getopt MooseX-Getopt-DBI MooseX-GlobRef-Object MooseX-InsideOut MooseX-Iterator MooseX-JobControl MooseX-LazyLogDispatch MooseX-Literals MooseX-LogDispatch MooseX-MetaDescription MooseX-Method MooseX-Method-Signature MooseX-MultiInitArg MooseX-Object-Pluggable MooseX-Params-Validate MooseX-Patterns-GOF MooseX-POE MooseX-Role-TraitConstructor MooseX-SemiAffordanceAccessor MooseX-Service MooseX-SimpleConfig MooseX-Singleton MooseX-StdDaemon MooseX-Storage MooseX-Storage-Directory MooseX-StrictConstructor MooseX-TypeLibrary MooseX-Types-BigInt MooseX-Types-Data-GUID MooseX-Types-DateTime MooseX-Types-Path-Class MooseX-Types-Structured MooseX-Types-URI MooseX-Types-VariantTable MooseX-Workers Fey-ORM ] ); close $log; exit; sub get_distro_from_cpan { my $project = shift; ( my $module = $project ) =~ s/-/::/g; my @mods = CPAN::Shell->expand( 'Module', $module ); die "Cannot resolve $project to a single module object" if @mods > 1; return unless @mods; my $dist = $mods[0]->distribution(); $dist->get(); return $dist; } sub test_module { my $dir = shift; local $CWD = $dir; local $ENV{PERL_AUTOINSTALL} = '--defaultdeps'; if ( -f "Makefile.PL" ) { return ! system 'perl Makefile.PL && make && make test'; } else { return ! system 'perl Build.PL && ./Build && ./Build test'; } } sub test_all_modules { foreach my $project (@_) { my $dist = get_distro_from_cpan($project); unless ($dist) { print $log "UNKNOWN : $project (not on CPAN?)\n"; next; } my $passed = test_module( $dist->dir() ); my $msg = $passed ? 'SUCCESS' : 'FAIL'; print $log sprintf( '%7s : %s - %s', $msg, $project, $dist->base_id() ); print $log "\n"; } } 1;