Commit | Line | Data |
aa815f88 |
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 |
81b7b406 |
108 | Fey::ORM |
109 | KiokuDB |
855340bc |
110 | Catalyst |
aa815f88 |
111 | ] |
112 | ); |
113 | |
114 | close $log; |
115 | |
116 | exit; |
117 | |
81b7b406 |
118 | sub test_all_modules { |
2873d006 |
119 | foreach my $project (@_) { |
81b7b406 |
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 | |
aa815f88 |
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'; |
81b7b406 |
161 | if ( -f "Build.PL" ) { |
162 | _run_commands( |
163 | [ $^X, 'Build.PL' ], |
164 | ['./Build'], |
165 | [qw( ./Build test )], |
166 | ); |
aa815f88 |
167 | } |
168 | else { |
81b7b406 |
169 | _run_commands( |
170 | [ $^X, 'Makefile.PL' ], |
171 | ['make'], |
172 | [qw( make test )], |
173 | ); |
aa815f88 |
174 | } |
175 | } |
176 | |
81b7b406 |
177 | sub _run_commands { |
178 | for my $cmd (@_) { |
179 | if ( system( @{$cmd} ) ) { |
180 | warn "Failed to run @{$cmd}\n"; |
181 | return; |
aa815f88 |
182 | } |
aa815f88 |
183 | } |
181b2270 |
184 | |
185 | return 1; |
aa815f88 |
186 | } |
187 | |
188 | 1; |