File Coverage

blib/lib/Dist/Zilla/PluginBundle/RSRCHBOY.pm
Criterion Covered Total %
statement 32 67 47.7
branch 0 24 0.0
condition 0 2 0.0
subroutine 11 26 42.3
pod 5 5 100.0
total 48 124 38.7


line stmt bran cond sub pod time code
1             #
2             # This file is part of Dist-Zilla-PluginBundle-RSRCHBOY
3             #
4             # This software is Copyright (c) 2013 by Chris Weyl.
5             #
6             # This is free software, licensed under:
7             #
8             # The GNU Lesser General Public License, Version 2.1, February 1999
9             #
10             package Dist::Zilla::PluginBundle::RSRCHBOY;
11             our $AUTHORITY = 'cpan:RSRCHBOY';
12             # git description: 0.073-5-gd31da0b
13             $Dist::Zilla::PluginBundle::RSRCHBOY::VERSION = '0.074';
14              
15             # ABSTRACT: Zilla your distributions like RSRCHBOY!
16              
17 1     1   47325 use utf8;
  1         9  
  1         3  
18 1     1   28 use v5.20;
  1         2  
19              
20 1     1   404 use Moose;
  1         289378  
  1         4  
21 1     1   4829 use namespace::autoclean;
  1         6039  
  1         3  
22 1     1   480 use MooseX::AttributeShortcuts;
  1         243037  
  1         4  
23 1     1   24161 use Moose::Util::TypeConstraints;
  1         2  
  1         8  
24              
25 1     1   1658 use autodie 0.20;
  1         11406  
  1         4  
26 1     1   4425 use autobox::Core;
  1         13925  
  1         7  
27              
28 1     1   786 use Dist::Zilla;
  1         670929  
  1         69  
29             with
30                 'Dist::Zilla::Role::PluginBundle::Easy',
31                 'Dist::Zilla::Role::PluginBundle::PluginRemover' => { -version => '0.102' },
32                 'Dist::Zilla::Role::PluginBundle::Config::Slicer',
33                 ;
34              
35 1     1   575 use Config::MVP::Slicer 0.302;
  1         58274  
  1         38  
36 1     1   524 use Path::Class;
  1         27071  
  1         1044  
37              
38 0     0     has github_user => (is => 'lazy', isa => 'Str', builder => sub { 'RsrchBoy' });
39 0     0     has set_github_user => (is => 'lazy', isa => 'Str', builder => sub { 1 } );
40              
41             # FIXME this next section is kinda... ugly
42              
43             has is_app => (is => 'lazy', isa => 'Bool');
44             has is_private => (is => 'lazy', isa => 'Bool');
45              
46 0 0   0     sub _build_is_app { $_[0]->payload->{cat_app} || $_[0]->payload->{app} }
47 0     0     sub _build_is_private { $_[0]->payload->{private} }
48              
49             {
50 0   0 0         my $_builder_for = sub { my $key = shift; sub { shift->payload->{$key} // 1 } };
        0      
        0      
        0      
51              
52                 has $_ => (
53                     traits => ['Bool'],
54                     is => 'lazy',
55                     isa => 'Bool',
56                     builder => $_builder_for->($_),
57                     handles => { "no_$_" => 'not' },
58                 )
59                 for qw{ sign tweet github install_on_release }
60                 ;
61             }
62              
63             has is_task => (
64                 traits => ['Bool'],
65                 is => 'lazy',
66                 isa => 'Bool',
67 0     0         builder => sub { shift->payload->{task} },
68                 handles => { is_not_task => 'not' },
69             );
70              
71             has _copy_from_build => (
72                 is => 'lazy',
73                 isa => 'ArrayRef[Str]',
74                 builder => sub {
75 0     0             my ($self) = @_;
76              
77 0                   my @copy = (qw{ LICENSE });
78 0 0                 push @copy, 'Makefile.PL'
79                         if $self->is_app;
80              
81 0                   return [ @copy ];
82                 },
83             );
84              
85              
86             sub release_plugins {
87 0     0 1       my $self = shift @_;
88              
89 0               my @allow_dirty = qw{
90             .gitignore
91             .travis.yml
92             Changes
93             README.mkdn
94             dist.ini
95             weaver.ini
96             };
97 0               push @allow_dirty, $self->_copy_from_build->flatten;
98              
99              
100                 my @plugins = (
101                     qw{
102             TestRelease
103             CheckChangesHasContent
104             CheckPrereqsIndexed
105             },
106                     [ 'Git::Remote::Update' => GitFetchOrigin => {
107                         remote_name => 'origin',
108                         do_update => 1,
109                     } ],
110                     [ 'Git::Remote::Check' => GitCheckReleaseBranchSync => {
111                         remote_name => 'origin',
112                         do_update => 0,
113                         branch => 'release/cpan',
114                         remote_branch => 'release/cpan',
115                     } ],
116                     [ 'Git::Remote::Check' => GitCheckMasterBranchSync => {
117                         remote_name => 'origin',
118                         do_update => 0,
119                         branch => 'master',
120                         remote_branch => 'master',
121                     } ],
122                     [ 'Git::Check' => { allow_dirty => [ @allow_dirty ] } ],
123                     [ 'Git::Commit' => { allow_dirty => [ @allow_dirty ] } ],
124              
125                     [ 'Test::CheckDeps' => { ':version' => '0.007', fatal => 1, level => 'suggests' } ],
126                     'CheckSelfDependency',
127                     'Travis::ConfigForReleaseBranch',
128                     'SchwartzRatio',
129              
130                     [ 'Git::Tag' => { tag_format => '%v', signed => $self->sign } ],
131              
132 0 0                 $ENV{TRAVIS} ? () : (
    0          
    0          
    0          
    0          
    0          
133                         [ 'Git::CommitBuild' => 'Git::CommitBuild::Build' => { } ],
134                         [ 'Git::CommitBuild' => 'Git::CommitBuild::Release' => {
135                             release_branch => 'release/cpan',
136                             release_message => 'Full build of CPAN release %v%t',
137                             multiple_inheritance => 1,
138                         }],
139                     ),
140              
141                     [ 'Git::Push' => {
142                         push_to => [
143                             'origin',
144                             'origin refs/heads/release/cpan:refs/heads/release/cpan',
145                         ],
146                     }],
147              
148                     $self->no_tweet ? () : [
149                         Twitter => {
150                             hash_tags => '#perl #cpan',
151             # TODO: remove the next line when resolved:
152             # https://github.com/dagolden/dist-zilla-plugin-twitter/issues/11
153                             tweet_url => 'https://metacpan.org/release/{{$AUTHOR_UC}}/{{$DIST}}-{{$VERSION}}{{$TRIAL}}/',
154                         },
155                     ],
156              
157                     $self->is_private ? () : 'UploadToCPAN',
158                     $self->no_sign ? () : 'Signature',
159                     $self->no_install_on_release ? () : [ InstallRelease => { install_command => 'cpanm .' } ],
160                     $self->no_github ? () : [ 'GitHub::Update' => { metacpan => 1 } ],
161              
162                     [ 'Run::AfterRelease' => { run => 'mkdir -p releases ; mv %s releases/' } ],
163              
164                     'ConfirmRelease',
165                 );
166              
167 0               return @plugins;
168             }
169              
170              
171             sub author_tests {
172 0     0 1       my ($self) = @_;
173              
174                 return (
175 0                   [ 'Test::PodSpelling' => { stopwords => [ $self->stopwords ] } ],
176                     qw{
177             ConsistentVersionTest
178             PodCoverageTests
179             PodSyntaxTests
180             Test::NoTabs
181             Test::EOL
182             HasVersionTests
183             Test::Compile
184             NoSmartCommentsTests
185             Test::Pod::LinkCheck
186             RunExtraTests
187             },
188                     [ 'Test::MinimumVersion' => { max_target_perl => '5.008008' } ],
189                 );
190             }
191              
192              
193             sub meta_provider_plugins {
194 0     0 1       my ($self) = @_;
195              
196 0               my @plugins = (
197                     [ Authority => { authority => 'cpan:RSRCHBOY' } ],
198                     qw{ MetaConfig MetaJSON MetaYAML },
199                     [ MetaNoIndex => { directory => [ qw{ corpus t } ] } ],
200                     'MetaProvides::Package',
201              
202                     'MetaData::BuiltWith',
203                 );
204              
205 0 0             if ($self->github) {
206              
207 0                   my $opts = { issues => 1 };
208              
209 0 0                 $opts->{user} = $self->github_user
210                         if $self->set_github_user;
211              
212 0                   push @plugins, [ GithubMeta => $opts ]
213                 }
214              
215 0               return @plugins;
216             }
217              
218              
219             sub configure {
220 0     0 1       my $self = shift @_;
221              
222 0               my $autoprereq_opts = $self->config_slice({ autoprereqs_skip => 'skip' });
223 0               my $prepender_opts = $self->config_slice({ prepender_skip => 'skip' });
224              
225             # if we have a weaver.ini, use that; otherwise use our bundle
226 0 0             my $podweaver
227                     = file('weaver.ini')->stat
228                     ? 'PodWeaver'
229                     : [ PodWeaver => { config_plugin => '@RSRCHBOY' } ]
230                     ;
231              
232 0               $self->add_plugins(
233                     [ NextRelease => { format => '%-8V %{yyyy-MM-dd HH:mm:ss ZZZZ}d' }],
234                 );
235              
236 0               $self->add_plugins([ 'Git::NextVersion' =>
237             #;first_version = 0.001 ; this is the default
238             #;version_regexp = ^v(.+)$ ; this is the default
239                     { version_regexp => '^(\d.\d+(_\d\d)?)(-TRIAL|)$' },
240                 ]);
241              
242 0               $self->add_plugins('ContributorsFromGit');
243              
244 0               $self->add_bundle('Git::CheckFor');
245              
246 0 0             $self->add_plugins(
247                     [ 'Git::GatherDir' => { exclude_filename => $self->_copy_from_build } ],
248                     [
249                         PromptIfStale => {
250                             phase => 'build',
251                             modules => [ qw{
252             Dist::Zilla
253             Dist::Zilla::PluginBundle::RSRCHBOY
254             }],
255                         },
256                     ],
257              
258             # this will be added by another plugin to the build
259                     [ PruneCruft => { except => '\.travis\.yml' } ],
260              
261                     qw{
262             Git::Describe
263             ExecDir
264             ShareDir
265             MakeMaker
266             Manifest
267             SurgicalPkgVersion
268             MinimumPerl
269             Test::ReportPrereqs
270             },
271                     [ AutoPrereqs => $autoprereq_opts ],
272                     [ Prepender => $prepender_opts ],
273              
274             # These are requirements that will be inserted on the generated dist,
275             # that indicate that for develop phase (e.g. author/release testing)
276             # certain additional packages are required for full exercise of xt/
277                     [ Prereqs => AuthorBundleDevelopRequires => {
278                         -phase => 'develop',
279                         -relationship => 'requires',
280              
281             # TODO: drop when this is merged and released:
282             # https://github.com/marcel-maint/Dist-Zilla-Plugin-HasVersionTests/pull/2
283                         'Test::HasVersion' => 0,
284              
285             # TODO: drop when this is merged and released:
286             # https://github.com/doherty/Dist-Zilla-Plugin-Test-MinimumVersion/pull/7
287                         'Test::MinimumVersion' => 0,
288              
289                         'Test::ConsistentVersion' => 0,
290                     } ],
291              
292                     $self->author_tests,
293                     $self->meta_provider_plugins,
294                     $self->release_plugins,
295              
296                     'License',
297                     'CPANFile',
298              
299                     [ ReadmeAnyFromPod => ReadmeMarkdownInRoot => {
300                         type => 'markdown',
301                         filename => 'README.mkdn',
302                         location => 'root',
303                     }],
304                     [ ReadmeAnyFromPod => ReadmeTxt => {
305                         type => 'text',
306                         filename => 'README',
307                     }],
308                     [ CopyFilesFromBuild => { copy => $self->_copy_from_build } ],
309              
310                     [ 'GitHubREADME::Badge' => { badges => [ qw{ travis cpants coveralls } ] } ],
311              
312                     ($self->is_task ? 'TaskWeaver' : $podweaver),
313                 );
314              
315 0               return;
316             }
317              
318              
319             sub stopwords {
320              
321 0     0 1       return qw{
322             ABEND
323             AFAICT
324             Formattable
325             Gratipay
326             PayPal
327             RSRCHBOY
328             RSRCHBOY's
329             codebase
330             coderef
331             formattable
332             gpg
333             implementers
334             ini
335             metaclass
336             metaclasses
337             parameterization
338             parameterized
339             subclasses
340             };
341             }
342              
343             __PACKAGE__->meta->make_immutable;
344             !!42;
345              
346             __END__
347            
348             =pod
349            
350             =encoding UTF-8
351            
352             =for :stopwords Chris Weyl Bowers Neil Romanov Sergey
353            
354             =head1 NAME
355            
356             Dist::Zilla::PluginBundle::RSRCHBOY - Zilla your distributions like RSRCHBOY!
357            
358             =head1 VERSION
359            
360             This document describes version 0.074 of Dist::Zilla::PluginBundle::RSRCHBOY - released April 15, 2017 as part of Dist-Zilla-PluginBundle-RSRCHBOY.
361            
362             =head1 SYNOPSIS
363            
364             # in your dist.ini...
365             [@RSRCHBOY]
366            
367             =head1 DESCRIPTION
368            
369             This is RSRCHBOY's current L<Dist::Zilla> C<dist.ini> config for his packages.
370             He's still figuring this all out. It's like vim, you never really know all
371             the things.
372            
373             If you'd like to see what this does without digging into the guts, I recommend
374             you install the most excellent L<Dist::Zilla::App::Command::dumpphases>
375             package. This will give you a new dzil command, allowing you to see a
376             sensible dump of what plugins are going to be used, etc.
377            
378             =head1 METHODS
379            
380             =head2 release_plugins
381            
382             Plugin configuration for public release.
383            
384             =head2 author_tests
385            
386             =head2 meta_provider_plugins
387            
388             Plugins that mess about with what goes into META.*.
389            
390             =head2 configure
391            
392             Preps plugin lists / config; see L<Dist::Zilla::Role::PluginBundle::Easy>.
393            
394             =head2 stopwords
395            
396             A list of words our POD spell checker should ignore.
397            
398             =for Pod::Coverage configure
399            
400             =head1 OPTIONS
401            
402             =head2 sign (boolean; default: true)
403            
404             On release, use your gpg key to sign the version tag created (if you're using
405             git) and also generate a SIGNATURE file.
406            
407             See also L<Dist::Zilla::Plugin::Signature>.
408            
409             =head2 tweet (boolean; default: true)
410            
411             If set to a true value, we'll use L<Dist::Zilla::Plugin::Twitter> to tweet
412             when a release occurs.
413            
414             =head2 github (boolean; default: true)
415            
416             This enables various GitHub related plugins to update distribution and GitHub
417             metadata automatically.
418            
419             =head2 install_on_release (boolean; default: true)
420            
421             After a release, install the distribution locally. Our default install command
422             is (from inside the built release directory):
423            
424             cpanm .
425            
426             You can change this by setting the C<InstallRelease.install_command> option.
427            
428             =head1 BUNDLED PLUGIN OPTIONS
429            
430             It's possible to pass options to our bundled plugins directly:
431            
432             ; format is Plugin::Name.option
433             [@RSRCHBOY]
434             GatherDir.exclude_filename = cpanfile
435            
436             For information on specific plugins and their options, you should refer to the
437             documentation of L<Dist::Zilla::Role::PluginBundle::Config::Slicer>.
438            
439             =head1 SEE ALSO
440            
441             Please see those modules/websites for more information related to this module.
442            
443             =over 4
444            
445             =item *
446            
447             L<Dist::Zilla::App::Command::dumpphases|Dist::Zilla::App::Command::dumpphases>
448            
449             =item *
450            
451             L<Dist::Zilla::Role::PluginBundle::PluginRemover|Dist::Zilla::Role::PluginBundle::PluginRemover>
452            
453             =item *
454            
455             L<Dist::Zilla::Role::PluginBundle::Config::Slicer|Dist::Zilla::Role::PluginBundle::Config::Slicer>
456            
457             =item *
458            
459             L<Config::MVP::Slicer|Config::MVP::Slicer>
460            
461             =back
462            
463             =head1 BUGS
464            
465             Please report any bugs or feature requests on the bugtracker website
466             L<https://github.com/RsrchBoy/dist-zilla-pluginbundle-rsrchboy/issues>
467            
468             When submitting a bug or request, please include a test-file or a
469             patch to an existing test-file that illustrates the bug or desired
470             feature.
471            
472             =head1 AUTHOR
473            
474             Chris Weyl <cweyl@alumni.drew.edu>
475            
476             =head1 CONTRIBUTORS
477            
478             =for stopwords Neil Bowers Sergey Romanov
479            
480             =over 4
481            
482             =item *
483            
484             Neil Bowers <neil@bowers.com>
485            
486             =item *
487            
488             Sergey Romanov <complefor@rambler.ru>
489            
490             =back
491            
492             =head1 COPYRIGHT AND LICENSE
493            
494             This software is Copyright (c) 2013 by Chris Weyl.
495            
496             This is free software, licensed under:
497            
498             The GNU Lesser General Public License, Version 2.1, February 1999
499            
500             =cut
501