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) 2018, 2017, 2016, 2015, 2014, 2013, 2012, 2011 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.076-1-gc984c68
13             $Dist::Zilla::PluginBundle::RSRCHBOY::VERSION = '0.077';
14              
15             # ABSTRACT: Zilla your distributions like RSRCHBOY!
16              
17 1     1   78002 use utf8;
  1         19  
  1         5  
18 1     1   27 use v5.18;
  1         3  
19              
20 1     1   463 use Moose;
  1         370627  
  1         4  
21 1     1   6047 use namespace::autoclean;
  1         6480  
  1         4  
22 1     1   467 use MooseX::AttributeShortcuts;
  1         386526  
  1         5  
23 1     1   113540 use Moose::Util::TypeConstraints;
  1         3  
  1         8  
24              
25 1     1   2389 use autodie 0.20;
  1         11172  
  1         5  
26 1     1   5407 use autobox::Core;
  1         2  
  1         9  
27              
28 1     1   1122 use Dist::Zilla;
  1         826050  
  1         62  
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   437 use Config::MVP::Slicer 0.302;
  1         66914  
  1         33  
36 1     1   369 use Path::Class;
  1         29162  
  1         1043  
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.020000' } ],
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(qw{
243             CopyrightYearFromGit
244             ContributorsFromGit
245             });
246              
247 0               $self->add_bundle('Git::CheckFor');
248              
249 0 0             $self->add_plugins(
250                     [ 'Git::GatherDir' => { exclude_filename => $self->_copy_from_build } ],
251                     [
252                         PromptIfStale => {
253                             phase => 'build',
254                             modules => [ qw{
255             Dist::Zilla
256             Dist::Zilla::PluginBundle::RSRCHBOY
257             }],
258                         },
259                     ],
260              
261             # this will be added by another plugin to the build
262                     [ PruneCruft => { except => '\.travis\.yml' } ],
263              
264                     qw{
265             Git::Describe
266             ExecDir
267             ShareDir
268             MakeMaker
269             Manifest
270             SurgicalPkgVersion
271             MinimumPerl
272             Test::ReportPrereqs
273             },
274                     [ AutoPrereqs => $autoprereq_opts ],
275                     [ Prepender => $prepender_opts ],
276              
277             # These are requirements that will be inserted on the generated dist,
278             # that indicate that for develop phase (e.g. author/release testing)
279             # certain additional packages are required for full exercise of xt/
280                     [ Prereqs => AuthorBundleDevelopRequires => {
281                         -phase => 'develop',
282                         -relationship => 'requires',
283              
284             # TODO: drop when this is merged and released:
285             # https://github.com/marcel-maint/Dist-Zilla-Plugin-HasVersionTests/pull/2
286                         'Test::HasVersion' => 0,
287              
288             # TODO: drop when this is merged and released:
289             # https://github.com/doherty/Dist-Zilla-Plugin-Test-MinimumVersion/pull/7
290                         'Test::MinimumVersion' => 0,
291              
292                         'Test::ConsistentVersion' => 0,
293                     } ],
294              
295                     $self->author_tests,
296                     $self->meta_provider_plugins,
297                     $self->release_plugins,
298              
299                     'License',
300                     'CPANFile',
301              
302                     [ ReadmeAnyFromPod => ReadmeMarkdownInRoot => {
303                         type => 'markdown',
304                         filename => 'README.mkdn',
305                         location => 'root',
306                     }],
307                     [ ReadmeAnyFromPod => ReadmeTxt => {
308                         type => 'text',
309                         filename => 'README',
310                     }],
311                     [ CopyFilesFromBuild => { copy => $self->_copy_from_build } ],
312              
313                     [ 'GitHubREADME::Badge' => { badges => [ qw{ travis cpants coveralls } ] } ],
314              
315                     ($self->is_task ? 'TaskWeaver' : $podweaver),
316                 );
317              
318 0               return;
319             }
320              
321              
322             sub stopwords {
323              
324 0     0 1       return qw{
325             ABEND
326             AFAICT
327             Formattable
328             Gratipay
329             PayPal
330             RSRCHBOY
331             RSRCHBOY's
332             codebase
333             coderef
334             formattable
335             gpg
336             implementers
337             ini
338             metaclass
339             metaclasses
340             parameterization
341             parameterized
342             subclasses
343             };
344             }
345              
346             __PACKAGE__->meta->make_immutable;
347             !!42;
348              
349             __END__
350            
351             =pod
352            
353             =encoding UTF-8
354            
355             =for :stopwords Chris Weyl Bowers Neil Romanov Sergey
356            
357             =head1 NAME
358            
359             Dist::Zilla::PluginBundle::RSRCHBOY - Zilla your distributions like RSRCHBOY!
360            
361             =head1 VERSION
362            
363             This document describes version 0.077 of Dist::Zilla::PluginBundle::RSRCHBOY - released March 05, 2018 as part of Dist-Zilla-PluginBundle-RSRCHBOY.
364            
365             =head1 SYNOPSIS
366            
367             # in your dist.ini...
368             [@RSRCHBOY]
369            
370             =head1 DESCRIPTION
371            
372             This is RSRCHBOY's current L<Dist::Zilla> C<dist.ini> config for his packages.
373             He's still figuring this all out. It's like vim, you never really know all
374             the things.
375            
376             If you'd like to see what this does without digging into the guts, I recommend
377             you install the most excellent L<Dist::Zilla::App::Command::dumpphases>
378             package. This will give you a new dzil command, allowing you to see a
379             sensible dump of what plugins are going to be used, etc.
380            
381             =head1 METHODS
382            
383             =head2 release_plugins
384            
385             Plugin configuration for public release.
386            
387             =head2 author_tests
388            
389             =head2 meta_provider_plugins
390            
391             Plugins that mess about with what goes into META.*.
392            
393             =head2 configure
394            
395             Preps plugin lists / config; see L<Dist::Zilla::Role::PluginBundle::Easy>.
396            
397             =head2 stopwords
398            
399             A list of words our POD spell checker should ignore.
400            
401             =for Pod::Coverage configure
402            
403             =head1 OPTIONS
404            
405             =head2 sign (boolean; default: true)
406            
407             On release, use your gpg key to sign the version tag created (if you're using
408             git) and also generate a SIGNATURE file.
409            
410             See also L<Dist::Zilla::Plugin::Signature>.
411            
412             =head2 tweet (boolean; default: true)
413            
414             If set to a true value, we'll use L<Dist::Zilla::Plugin::Twitter> to tweet
415             when a release occurs.
416            
417             =head2 github (boolean; default: true)
418            
419             This enables various GitHub related plugins to update distribution and GitHub
420             metadata automatically.
421            
422             =head2 install_on_release (boolean; default: true)
423            
424             After a release, install the distribution locally. Our default install command
425             is (from inside the built release directory):
426            
427             cpanm .
428            
429             You can change this by setting the C<InstallRelease.install_command> option.
430            
431             =head1 BUNDLED PLUGIN OPTIONS
432            
433             It's possible to pass options to our bundled plugins directly:
434            
435             ; format is Plugin::Name.option
436             [@RSRCHBOY]
437             GatherDir.exclude_filename = cpanfile
438            
439             For information on specific plugins and their options, you should refer to the
440             documentation of L<Dist::Zilla::Role::PluginBundle::Config::Slicer>.
441            
442             =head1 SEE ALSO
443            
444             Please see those modules/websites for more information related to this module.
445            
446             =over 4
447            
448             =item *
449            
450             L<Dist::Zilla::App::Command::dumpphases|Dist::Zilla::App::Command::dumpphases>
451            
452             =item *
453            
454             L<Dist::Zilla::Role::PluginBundle::PluginRemover|Dist::Zilla::Role::PluginBundle::PluginRemover>
455            
456             =item *
457            
458             L<Dist::Zilla::Role::PluginBundle::Config::Slicer|Dist::Zilla::Role::PluginBundle::Config::Slicer>
459            
460             =item *
461            
462             L<Config::MVP::Slicer|Config::MVP::Slicer>
463            
464             =back
465            
466             =head1 BUGS
467            
468             Please report any bugs or feature requests on the bugtracker website
469             L<https://github.com/rsrchboy/dist-zilla-pluginbundle-rsrchboy/issues>
470            
471             When submitting a bug or request, please include a test-file or a
472             patch to an existing test-file that illustrates the bug or desired
473             feature.
474            
475             =head1 AUTHOR
476            
477             Chris Weyl <cweyl@alumni.drew.edu>
478            
479             =head1 CONTRIBUTORS
480            
481             =for stopwords Neil Bowers Sergey Romanov
482            
483             =over 4
484            
485             =item *
486            
487             Neil Bowers <neil@bowers.com>
488            
489             =item *
490            
491             Sergey Romanov <complefor@rambler.ru>
492            
493             =back
494            
495             =head1 COPYRIGHT AND LICENSE
496            
497             This software is Copyright (c) 2018, 2017, 2016, 2015, 2014, 2013, 2012, 2011 by Chris Weyl.
498            
499             This is free software, licensed under:
500            
501             The GNU Lesser General Public License, Version 2.1, February 1999
502            
503             =cut
504