Add KiokuDB to smoke list.
[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         ]
111 );
112
113 close $log;
114
115 exit;
116
117 sub test_all_modules {
118     foreach my $project (grep {$_ eq 'Fey::ORM'}@_) {
119         my $dist = get_distro_from_cpan($project);
120
121         unless ($dist) {
122             print $log "UNKNOWN : $project (not on CPAN?)\n";
123             next;
124         }
125
126         my $passed = test_module( $dist->dir() );
127
128         my $msg = $passed ? 'SUCCESS' : 'FAIL';
129
130         print $log sprintf( '%7s : %s - %s', $msg, $project, $dist->base_id() );
131         print $log "\n";
132     }
133 }
134
135 sub get_distro_from_cpan {
136     my $project = shift;
137
138     ( my $module = $project ) =~ s/-/::/g;
139
140     my @mods = CPAN::Shell->expand( 'Module', $module );
141
142     die "Cannot resolve $project to a single module object"
143         if @mods > 1;
144
145     return unless @mods;
146
147     my $dist = $mods[0]->distribution();
148
149     $dist->get();
150
151     return $dist;
152 }
153
154 sub test_module {
155     my $dir = shift;
156
157     local $CWD = $dir;
158
159     local $ENV{PERL_AUTOINSTALL} = '--defaultdeps';
160     if ( -f "Build.PL" ) {
161         _run_commands(
162             [ $^X, 'Build.PL' ],
163             ['./Build'],
164             [qw( ./Build test )],
165         );
166     }
167     else {
168         _run_commands(
169             [ $^X, 'Makefile.PL' ],
170             ['make'],
171             [qw( make test )],
172         );
173     }
174 }
175
176 sub _run_commands {
177     for my $cmd (@_) {
178         if ( system( @{$cmd} ) ) {
179             warn "Failed to run @{$cmd}\n";
180             return;
181         }
182     }
183 }
184
185 1;