add cpan-stable-smolder
[gitmo/moose-dev-utils.git] / cpan-stable-smolder
CommitLineData
aa815f88 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5use CPAN;
6use Cwd;
7use File::chdir;
8use File::Path qw( rmtree );
9
10
11CPAN::HandleConfig->load();
12CPAN::Shell::setup_output();
13CPAN::Index->reload();
14
15local $CPAN::Config->{tar_verbosity} = 'none';
16local $CPAN::Config->{load_module_verbosity} = 'none';
17
18
19my $LOGFILE = ( cwd . "/cpan-stable-smolder.log" );
20
21if ( -f $LOGFILE ) {
22 unlink $LOGFILE;
23}
24
25open my $log, '>', $LOGFILE || die "Could not open $LOGFILE because $!";
26
27test_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 ]
110);
111
112close $log;
113
114exit;
115
116sub get_distro_from_cpan {
117 my $project = shift;
118
119 ( my $module = $project ) =~ s/-/::/g;
120
121 my @mods = CPAN::Shell->expand( 'Module', $module );
122
123 die "Cannot resolve $project to a single module object"
124 if @mods > 1;
125
126 return unless @mods;
127
128 my $dist = $mods[0]->distribution();
129
130 $dist->get();
131
132 return $dist;
133}
134
135sub test_module {
136 my $dir = shift;
137
138 local $CWD = $dir;
139
140 local $ENV{PERL_AUTOINSTALL} = '--defaultdeps';
141 if ( -f "Makefile.PL" ) {
142 return ! system $^X . ' Makefile.PL && make && make test';
143 }
144 else {
145 return ! system $^X . ' Build.PL && ./Build && ./Build test';
146 }
147}
148
149sub test_all_modules {
150 foreach my $project (@_) {
151 my $dist = get_distro_from_cpan($project);
152
153 unless ($dist) {
154 print $log "UNKNOWN : $project (not on CPAN?)\n";
155 next;
156 }
157
158 my $passed = test_module( $dist->dir() );
159
160 my $msg = $passed ? 'SUCCESS' : 'FAIL';
161
162 print $log sprintf( '%7s : %s - %s', $msg, $project, $dist->base_id() );
163 print $log "\n";
164 }
165}
166
1671;