File Coverage

blib/lib/Dist/Zilla/PluginBundle/Author/CCM.pm
Criterion Covered Total %
statement 20 42 47.6
branch 0 12 0.0
condition n/a
subroutine 7 8 87.5
pod 1 1 100.0
total 28 63 44.4


line stmt bran cond sub pod time code
1             # ABSTRACT: A plugin bundle for distributions built by CCM
2             # KEYWORDS: dzil author bundle distribution tool
3              
4              
5             use 5.014;
6 1     1   648 use warnings;
  1         4  
7 1     1   4 use strict;
  1         2  
  1         23  
8 1     1   4  
  1         2  
  1         27  
9             our $VERSION = '0.011'; # VERSION
10              
11             use Dist::Zilla::Util;
12 1     1   360 use Moose;
  1         42231  
  1         28  
13 1     1   388 use Perl::Version;
  1         334511  
  1         6  
14 1     1   5722 use namespace::autoclean;
  1         2100  
  1         24  
15 1     1   5  
  1         2  
  1         6  
16              
17             has max_target_perl => (
18             is => 'ro',
19             isa => 'Str',
20             lazy => 1,
21             default => sub {
22             my $self = shift;
23             $self->payload->{'Test::MinimumVersion.max_target_perl'}
24             // $self->payload->{max_target_perl}
25             // '5.10.1';
26             },
27             );
28              
29              
30             has no_index => (
31             is => 'ro',
32             isa => 'ArrayRef',
33             lazy => 1,
34             default => sub {
35             my $self = shift;
36             [split(/\s+/, $self->payload->{'MetaNoIndex.directories'}
37             // $self->payload->{no_index}
38             // 'eg share shares t xt')];
39             },
40             );
41              
42              
43             has authority => (
44             is => 'ro',
45             isa => 'Str',
46             lazy => 1,
47             default => sub {
48             my $self = shift;
49             $self->payload->{'Authority.authority'} // $self->payload->{authority} // 'cpan:CCM';
50             },
51             );
52              
53              
54             has installer => (
55             is => 'ro',
56             isa => 'Str',
57             lazy => 1,
58             default => sub { shift->payload->{installer} // 'MakeMaker' },
59             );
60              
61              
62             has airplane => (
63             is => 'ro',
64             isa => 'Bool',
65             lazy => 1,
66             default => sub { $ENV{DZIL_AIRPLANE} // shift->payload->{airplane} // 0 },
67             );
68              
69              
70             has no_upload => (
71             is => 'ro',
72             isa => 'Bool',
73             lazy => 1,
74             default => sub { $ENV{DZIL_NO_UPLOAD} // shift->payload->{no_upload} // 0 },
75             );
76              
77              
78             my $self = shift;
79              
80 0     0 1   my @copy_from_build = qw(LICENSE);
81             my @network_plugins = qw(Git::Push Test::Pod::No404s UploadToCPAN);
82 0           my @gather_exclude = (@copy_from_build, qw(README.md));
83 0           my @gather_prune = qw(dist.ini);
84 0           my @no_index = @{$self->no_index};
85 0           my @allow_dirty = (@copy_from_build, qw(Changes LICENSE README.md));
86 0           my @git_remotes = qw(github origin);
  0            
87 0           my @check_files = qw(:InstallModules :ExecFiles :TestFiles :ExtraTestFiles);
88 0           my $perl_version_target = $self->max_target_perl;
89 0            
90 0           if ($self->no_upload) {
91             say '[@Author::CCM] WARNING! WARNING! WARNING! *** You are in no_upload mode!! ***';
92 0 0         }
93 0            
94             my @plugins = (
95              
96 0 0         # VERSION
    0          
    0          
97             ['Git::NextVersion'],
98              
99             # GATHER
100             ['Git::GatherDir' => {exclude_filename => [@gather_exclude]}],
101             ['PruneCruft'],
102             ['PruneFiles' => {filename => [@gather_prune]}],
103              
104             ['CopyFilesFromBuild' => {copy => [@copy_from_build]}],
105             ['ExecDir'],
106              
107             # PREREQS
108             ['AutoPrereqs'],
109             -f 'cpanfile' ? ['Prereqs::FromCPANfile'] : (),
110             ['Prereqs::AuthorDeps'],
111              
112             # TESTS
113             ['MetaTests'],
114             ['Test::CPAN::Changes'],
115             ['PodCoverageTests'],
116             ['PodSyntaxTests'],
117             ['Test::Pod::No404s'],
118             ['Test::Compile'],
119             ['Test::MinimumVersion' => {max_target_perl => $perl_version_target}],
120             ['Test::EOL' => {finder => [@check_files]}],
121             ['Test::NoTabs' => {finder => [@check_files]}],
122             ['Test::Perl::Critic'],
123             ['Test::Portability'],
124             ['Test::CleanNamespaces'],
125             ['Test::ReportPrereqs'],
126              
127             # METADATA
128             ['Authority' => {authority => $self->authority, do_munging => 0}],
129             ['MetaJSON'],
130             ['MetaYAML'],
131             ['MetaNoIndex' => {directory => [@no_index]}],
132             ['MetaProvides::Package'],
133             ['Keywords'],
134             ['Git::Contributors' => {order_by => 'commits'}],
135             ['GithubMeta' => {remote => [@git_remotes], issues => 1}],
136              
137             # MUNGE
138             ['PodWeaver' => {config_plugin => '@Author::CCM'}],
139             ['OverridePkgVersion'],
140              
141             # GENERATE FILES
142             ['License'],
143             ['ReadmeAnyFromPod' => 'RepoReadme' => {filename => 'README.md', location => 'root', type => 'markdown', phase => 'release'}],
144             ['ReadmeAnyFromPod' => 'DistReadme' => {filename => 'README', location => 'build', type => 'text'}],
145             ['Manifest'],
146             ['ManifestSkip'],
147              
148             $self->installer, # e.g. MakeMaker
149              
150             # RELEASE
151             ['NextRelease' => {format => '%-9v %{yyyy-MM-dd HH:mm:ssZZZ}d%{ (TRIAL RELEASE)}T'}],
152             ['CheckChangesHasContent'],
153             ['Git::Check' => {allow_dirty => [@allow_dirty], untracked_files => 'ignore'}],
154             ['RunExtraTests'],
155             ['TestRelease'],
156             # ['ConfirmRelease'],
157             $self->no_upload ? ['FakeRelease'] : ['UploadToCPAN'],
158             ['Git::Commit' => {allow_dirty => [@allow_dirty], commit_msg => 'Release %N %v%t%n%n%c'}],
159             ['Git::CommitBuild' => {branch => '', release_branch => 'dist', release_message => 'Version %v%t'}],
160             ['Git::Tag' => {tag_message => 'Version %v%t%n%n%c'}],
161             $self->no_upload ? () : ['Git::Push' => {push_to => 'origin master +master:refs/heads/release +dist', remotes_must_exist => 0}],
162              
163             );
164              
165             if ($self->airplane) {
166             my %network_plugins = map { Dist::Zilla::Util->expand_config_package_name($_) => 1 } @network_plugins;
167 0 0          
168 0           @plugins = grep { !$network_plugins{Dist::Zilla::Util->expand_config_package_name(ref eq 'ARRAY' ? $_->[0] : $_)} } @plugins;
  0            
169             push @plugins, 'BlockRelease';
170 0 0         }
  0            
171 0            
172             push @plugins, 'ConfirmRelease';
173              
174 0           $self->add_plugins(@plugins);
175             }
176 0            
177             with 'Dist::Zilla::Role::PluginBundle::Easy';
178             with 'Dist::Zilla::Role::PluginBundle::PluginRemover';
179             with 'Dist::Zilla::Role::PluginBundle::Config::Slicer';
180              
181             __PACKAGE__->meta->make_immutable;
182             1;
183              
184              
185             =pod
186              
187             =encoding UTF-8
188              
189             =head1 NAME
190              
191             Dist::Zilla::PluginBundle::Author::CCM - A plugin bundle for distributions built by CCM
192              
193             =head1 VERSION
194              
195             version 0.011
196              
197             =head1 SYNOPSIS
198              
199             # In your dist.ini file:
200             [@Author::CCM]
201              
202             =head1 DESCRIPTION
203              
204             You probably don't want to use this.
205              
206             ; VERSION
207             [Git::NextVersion]
208              
209             ; GATHER
210             [Git::GatherDir]
211             exclude_filename = LICENSE
212             exclude_filename = README.md
213             [PruneCruft]
214             [PruneFiles]
215             filename = dist.ini
216              
217             [CopyFilesFromBuild]
218             copy = LICENSE
219             [ExecDir]
220              
221             ; PREREQS
222             [AutoPrereqs]
223             [Prereqs::FromCPANfile] ; if a cpanfile exists in root
224             [Prereqs::AuthorDeps]
225              
226             ; TESTS
227             [MetaTests]
228             [Test::CPAN::Changes]
229             [PodCoverageTests]
230             [PodSyntaxTests]
231             [Test::Pod::No404s]
232             [Test::Compile]
233             [Test::MinimumVersion]
234             max_target_perl = 5.10.1
235             [Test::EOL]
236             [Test::NoTabs]
237             [Test::Perl::Critic]
238             [Test::Portability]
239             [Test::CleanNamespaces]
240             [Test::ReportPrereqs]
241              
242             ; METADATA
243             [Authority]
244             do_munging = 0
245             [MetaJSON]
246             [MetaYAML]
247             [MetaNoIndex]
248             directory = eg
249             directory = share
250             directory = shares
251             directory = t
252             directory = xt
253             [MetaProvides::Package]
254             [Keywords]
255             [Git::Contributors]
256             order_by = commits
257             [GithubMeta]
258             issues = 1
259              
260             ; MUNGE
261             [PodWeaver]
262             config_plugin = @Author::CCM
263             [OverridePkgVersion]
264              
265             ; GENERATE FILES
266             [License]
267             [ReadmeAnyFromPod]
268             filename = README.md
269             locaton = root
270             type = markdown
271             phase = release
272             [ReadmeAnyFromPod]
273             filename = README
274             location = build
275             type = text
276             [Manifest]
277             [ManifestSkip]
278              
279             [MakeMaker] ; override with the "installer" attribute
280              
281             ; RELEASE
282             [NextRelease]
283             [CheckChangesHasContent]
284             [Git::Check]
285             [RunExtraTests]
286             [TestRelease]
287             [ConfirmRelease]
288             [UploadToCPAN] ; disable with the "no_upload" attribute
289             [Git::Commit]
290             commit_msg = Release %N %v%t%n%n%c
291             [Git::CommitBuild]
292             branch =
293             release_branch = dist
294             release_message = Version %v%t
295             [Git::Tag]
296             tag_message = Version %v%t%n%n%c
297             [Git::Push]
298             push_to = origin master +master:refs/heads/release +dist
299             remotes_must_exist = 0
300              
301             =head1 ATTRIBUTES
302              
303             =head2 max_target_perl
304              
305             Specify the minimum perl version. Defaults to C<5.10.1>.
306              
307             =head2 no_index
308              
309             Set directories to not index.
310              
311             Default:
312              
313             =head2 authority
314              
315             Specify the release authority. Defaults to C<cpan:CCM>.
316              
317             =head2 installer
318              
319             Specify which installer to use, such as:
320              
321             =over 4
322              
323             =item *
324              
325             C<MakeMaker> (default)
326              
327             =item *
328              
329             C<MakeMaker::Custom>
330              
331             =back
332              
333             =head2 airplane
334              
335             Disable plugins that use the network, and prevent releasing.
336              
337             =head2 no_upload
338              
339             Do not upload to CPAN or git push.
340              
341             =head1 METHODS
342              
343             =head2 configure
344              
345             Required by L<Dist::Zilla::Role::PluginBundle::Easy>.
346              
347             =head1 SEE ALSO
348              
349             =over 4
350              
351             =item *
352              
353             L<Dist::Zilla>
354              
355             =item *
356              
357             L<Dist::Zilla::PluginBundle::Author::ETHER>
358              
359             =back
360              
361             =head1 BUGS
362              
363             Please report any bugs or feature requests on the bugtracker website
364             L<https://github.com/chazmcgarvey/Dist-Zilla-PluginBundle-Author-CCM/issues>
365              
366             When submitting a bug or request, please include a test-file or a
367             patch to an existing test-file that illustrates the bug or desired
368             feature.
369              
370             =head1 AUTHOR
371              
372             Charles McGarvey <ccm@cpan.org>
373              
374             =head1 COPYRIGHT AND LICENSE
375              
376             This software is copyright (c) 2016 by Charles McGarvey.
377              
378             This is free software; you can redistribute it and/or modify it under
379             the same terms as the Perl 5 programming language system itself.
380              
381             =cut