Remove empty space :)
[gitmo/moose-dev-utils.git] / cpan-stable-smolder
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5 use CPAN;
6 use Cwd;
7 use File::chdir;
8 use File::Path qw( rmtree );
9
10
11 CPAN::HandleConfig->load();
12 CPAN::Shell::setup_output();
13 CPAN::Index->reload();
14
15 local $CPAN::Config->{tar_verbosity} = 'none';
16 local $CPAN::Config->{load_module_verbosity} = 'none';
17
18
19 my $LOGFILE = ( cwd . "/cpan-stable-smolder.log" );
20
21 if ( -f $LOGFILE ) {
22     unlink $LOGFILE;
23 }
24
25 open my $log, '>', $LOGFILE || die "Could not open $LOGFILE because $!";
26
27 test_all_modules(
28     qw[
29         Moose::Autobox
30         MooseX::Accessors::ReadWritePrivate
31         MooseX::App::Cmd
32         MooseX::Async
33         MooseX::Attribute::ENV
34         MooseX::AttributeHelpers
35         MooseX::Attribute::Prototype
36         MooseX::Attributes::Curried
37         MooseX::Blessed::Reconstruct
38         MooseX::ClassAttribute
39         MooseX::Clone
40         MooseX::ConfigFromFile
41         MooseX::Constructor::AllErrors
42         MooseX::Contract
43         MooseX::Control
44         MooseX::CurriedHandles
45         MooseX::Daemonize
46         MooseX::Declare
47         MooseX::DeepAccessors
48         MooseX::DOM
49         MooseX::Emulate::Class::Accessor::Fast
50         MooseX::FollowPBP
51         MooseX::Getopt
52         MooseX::GlobRef::Object
53         MooseX::InsideOut
54         MooseX::Iterator
55         MooseX::KeyedMutex
56         MooseX::LazyLogDispatch
57         MooseX::LogDispatch
58         MooseX::Log::Log4perl
59         MooseX::MakeImmutable
60         MooseX::Meta::TypeConstraint::ForceCoercion
61         MooseX::MetaDescription
62         MooseX::MethodAttributes
63         MooseX::Method::Signatures
64         MooseX::MultiInitArg
65         MooseX::MultiMethods
66         MooseX::MutatorAttributes
67         MooseX::NaturalKey
68         MooseX::NonMoose
69         MooseX::Object::Pluggable
70         MooseX::Param
71         MooseX::Params::Validate
72         MooseX::Plaggerize
73         MooseX::POE
74         MooseX::Policy::SemiAffordanceAccessor
75         MooseX::Q4MLog
76         MooseX::Role::Cmd
77         MooseX::Role::Matcher
78         MooseX::Role::Parameterized
79         MooseX::Role::TraitConstructor
80         MooseX::Role::XMLRPC::Client
81         MooseX::Scaffold
82         MooseX::SemiAffordanceAccessor
83         MooseX::SimpleConfig
84         MooseX::Singleton
85         MooseX::Storage
86         MooseX::Storage::Format::XML::Simple
87         MooseX::StrictConstructor
88         MooseX::Struct
89         MooseX::Templated
90         MooseX::Timestamp
91         MooseX::Traits
92         MooseX::Traits::Attribute::CascadeClear
93         MooseX::Types
94         MooseX::Types::Authen::Passphrase
95         MooseX::Types::Common
96         MooseX::Types::Data::GUID
97         MooseX::Types::DateTime
98         MooseX::Types::IO
99         MooseX::Types::Path::Class
100         MooseX::Types::Set::Object
101         MooseX::Types::Structured
102         MooseX::Types::URI
103         MooseX::Types::UUID
104         MooseX::Types::VariantTable
105         MooseX::WithCache
106         MooseX::Workers
107         MooseX::YAML
108         Fey::ORM
109         KiokuDB
110         Catalyst
111         ]
112 );
113
114 close $log;
115
116 exit;
117
118 sub test_all_modules {
119     foreach my $project (@_) {
120         my $dist = get_distro_from_cpan($project);
121
122         unless ($dist) {
123             print $log "UNKNOWN : $project (not on CPAN?)\n";
124             next;
125         }
126
127         my $passed = test_module( $dist->dir() );
128
129         my $msg = $passed ? 'SUCCESS' : 'FAIL';
130
131         print $log sprintf( '%7s : %s - %s', $msg, $project, $dist->base_id() );
132         print $log "\n";
133     }
134 }
135
136 sub get_distro_from_cpan {
137     my $project = shift;
138
139     ( my $module = $project ) =~ s/-/::/g;
140
141     my @mods = CPAN::Shell->expand( 'Module', $module );
142
143     die "Cannot resolve $project to a single module object"
144         if @mods > 1;
145
146     return unless @mods;
147
148     my $dist = $mods[0]->distribution();
149
150     $dist->get();
151
152     return $dist;
153 }
154
155 sub test_module {
156     my $dir = shift;
157
158     local $CWD = $dir;
159
160     local $ENV{PERL_AUTOINSTALL} = '--defaultdeps';
161     if ( -f "Build.PL" ) {
162         _run_commands(
163             [ $^X, 'Build.PL' ],
164             ['./Build'],
165             [qw( ./Build test )],
166         );
167     }
168     else {
169         _run_commands(
170             [ $^X, 'Makefile.PL' ],
171             ['make'],
172             [qw( make test )],
173         );
174     }
175 }
176
177 sub _run_commands {
178     for my $cmd (@_) {
179         if ( system( @{$cmd} ) ) {
180             warn "Failed to run @{$cmd}\n";
181             return;
182         }
183     }
184
185     return 1;
186 }
187
188 1;