File Coverage

blib/lib/Dist/Zilla/PluginBundle/PERLSRVDE.pm
Criterion Covered Total %
statement 83 128 64.8
branch 0 32 0.0
condition 0 8 0.0
subroutine 28 30 93.3
pod 0 1 0.0
total 111 199 55.7


line stmt bran cond sub pod time code
1             package Dist::Zilla::PluginBundle::PERLSRVDE;
2              
3 1     1   841 use v5.24;
  1         3  
4              
5             # ABSTRACT: The plugin bundle we use at Perl-Services.de
6              
7 1     1   5 use strict;
  1         3  
  1         19  
8 1     1   4 use warnings;
  1         3  
  1         36  
9              
10             our $VERSION = '1.1.1'; # VERSION
11              
12 1     1   520 use namespace::autoclean;
  1         18642  
  1         4  
13              
14 1     1   764 use Dist::Zilla 6.0;
  1         1851994  
  1         77  
15              
16 1     1   716 use Dist::Zilla::PluginBundle::Git;
  1         678746  
  1         52  
17 1     1   747 use Dist::Zilla::PluginBundle::Basic;
  1         66655  
  1         48  
18 1     1   800 use Dist::Zilla::PluginBundle::Filter ();
  1         15397  
  1         46  
19              
20 1     1   513 use Dist::Zilla::Plugin::ContributorsFile;
  1         245960  
  1         43  
21 1     1   478 use Dist::Zilla::Plugin::CheckChangesHasContent;
  1         69846  
  1         34  
22 1     1   525 use Dist::Zilla::Plugin::NextRelease;
  1         93463  
  1         64  
23 1     1   748 use Dist::Zilla::Plugin::SyncCPANfile;
  1         44445  
  1         39  
24 1     1   537 use Dist::Zilla::Plugin::OurPkgVersion;
  1         344193  
  1         63  
25 1     1   838 use Dist::Zilla::Plugin::PodWeaver;
  1         1181993  
  1         51  
26 1     1   770 use Dist::Zilla::Plugin::Git::Contributors;
  1         143463  
  1         54  
27 1     1   775 use Dist::Zilla::Plugin::PodSyntaxTests;
  1         70706  
  1         75  
28 1     1   880 use Dist::Zilla::Plugin::Test::Pod::Coverage::Configurable;
  1         76082  
  1         57  
29 1     1   763 use Dist::Zilla::Plugin::Test::NoTabs;
  1         108493  
  1         85  
30 1     1   752 use Dist::Zilla::Plugin::Test::NoBOM;
  1         126383  
  1         51  
31 1     1   901 use Dist::Zilla::Plugin::Test::Perl::Critic;
  1         58665  
  1         50  
32 1     1   631 use Dist::Zilla::Plugin::ExecDir;
  1         57217  
  1         47  
33 1     1   613 use Dist::Zilla::Plugin::MetaJSON;
  1         47862  
  1         78  
34 1     1   922 use Dist::Zilla::Plugin::MetaProvides::Package;
  1         383961  
  1         51  
35 1     1   718 use Dist::Zilla::Plugin::ReadmeAnyFromPod;
  1         111210  
  1         49  
36 1     1   647 use Dist::Zilla::Plugin::ReadmeAddDevInfo;
  1         53732  
  1         51  
37 1     1   724 use Dist::Zilla::Plugin::GitHubREADME::Badge;
  1         56646  
  1         59  
38 1     1   732 use Dist::Zilla::Plugin::MetaResources;
  1         35374  
  1         49  
39              
40 1     1   12 use Moose;
  1         2  
  1         9  
41              
42             with qw(
43             Dist::Zilla::Role::PluginBundle::Easy
44             Dist::Zilla::Role::PluginBundle::Config::Slicer
45             Dist::Zilla::Role::PluginBundle::PluginRemover
46             );
47              
48             has 'is_cpan' => (
49             is => 'ro',
50             isa => 'Bool',
51             lazy => 1,
52             default => sub {
53             my $pl = $_[0]->payload;
54             exists $pl->{is_cpan} ? $pl->{is_cpan} : 0;
55             },
56             );
57              
58             has 'repository_type' => (
59             is => 'ro',
60             isa => 'Str',
61             lazy => 1,
62             default => sub {
63             my $pl = $_[0]->payload;
64             exists $pl->{repository_type} ? $pl->{repository_type} : 'github';
65             },
66             );
67              
68             has 'repository_path' => (
69             is => 'ro',
70             isa => 'Str',
71             lazy => 1,
72             default => sub {
73             my $pl = $_[0]->payload;
74             exists $pl->{repository_path} ? $pl->{repository_path} : '';
75             },
76             );
77              
78             has 'internal_type' => (
79             is => 'ro',
80             isa => 'Str',
81             lazy => 1,
82             default => sub {
83             my $pl = $_[0]->payload;
84             exists $pl->{internal_type} ? $pl->{internal_type} : 'git';
85             },
86             );
87              
88             has 'internal_url' => (
89             is => 'ro',
90             isa => 'Str',
91             lazy => 1,
92             default => sub {
93             my $pl = $_[0]->payload;
94             exists $pl->{internal_url} ? $pl->{internal_url} : '';
95             },
96             );
97              
98             has 'internal_web' => (
99             is => 'ro',
100             isa => 'Str',
101             lazy => 1,
102             default => sub {
103             my $pl = $_[0]->payload;
104             exists $pl->{internal_web} ? $pl->{internal_web} : '';
105             },
106             );
107              
108             has 'bugtracker' => (
109             is => 'ro',
110             isa => 'Str',
111             lazy => 1,
112             default => sub {
113             my $pl = $_[0]->payload;
114             exists $pl->{bugtracker} ? $pl->{bugtracker} : '';
115             },
116             );
117              
118             has 'pod_class' => (
119             is => 'ro',
120             isa => 'Str',
121             default => sub {
122             my $pl = $_[0]->payload;
123             exists $pl->{pod_class} ? $pl->{pod_class} : 'Pod::Coverage::TrustPod';
124             },
125             );
126              
127             has 'pod_skip' => (
128             is => 'ro',
129             isa => 'ArrayRef',
130             default => sub {
131             my $pl = $_[0]->payload;
132             exists $pl->{pod_skip} ?
133             ref $pl->{pod_skip} ? $pl->{pod_skip} : [ $pl->{pod_skip} ]
134             : [];
135             },
136             );
137              
138             has 'pod_trustme' => (
139             is => 'ro',
140             isa => 'ArrayRef',
141             default => sub {
142             my $pl = $_[0]->payload;
143             exists $pl->{pod_trustme} ?
144             ref $pl->{pod_trustme} ? $pl->{pod_trustme} : [ $pl->{pod_trustme} ]
145             : [];
146             },
147             );
148              
149             has 'pod_also_private' => (
150             is => 'ro',
151             isa => 'ArrayRef',
152             default => sub {
153             my $pl = $_[0]->payload;
154             exists $pl->{pod_also_private} ?
155             ref $pl->{pod_also_private} ? $pl->{pod_also_private} : [ $pl->{pod_also_private} ]
156             : [];
157             },
158             );
159              
160             has 'fake_release' => (
161             is => 'ro',
162             isa => 'Bool',
163             lazy => 1,
164             default => sub {
165             my $pl = $_[0]->payload;
166             if ( $pl->{is_cpan} ) {
167             $pl->{fake_release} = 0;
168             }
169             exists $pl->{fake_release} ? $pl->{fake_release} : 1;
170             },
171             );
172              
173             has exclude_from_basic => (
174             is => 'ro',
175             isa => 'ArrayRef[Str]',
176             lazy => 1,
177             default => sub {
178             my $pl = $_[0]->payload;
179             my $exclude = $pl->{exclude_from_basic};
180             $exclude ?
181             ref $exclude ? $exclude : [ $exclude ]
182             : []
183             },
184             );
185              
186             sub mvp_multivalue_args {
187             return qw( pod_skip pod_trustme pod_also_private exclude_from_basic );
188             }
189              
190             sub configure {
191 0     0 0   my ($self) = @_;
192              
193 0           my %remove_from_basic;
194 0 0         if ( $self->fake_release ) {
195 0           $remove_from_basic{UploadToCPAN}++;
196             }
197              
198 0 0         for my $exclude ( @{ $self->exclude_from_basic || [] } ) {
  0            
199 0           $remove_from_basic{$exclude}++;
200             }
201              
202 0           my %pod_coverage_opts;
203 0           for my $opt_name ( qw/class skip trustme also_private/ ) {
204 0           my $method = $self->can('pod_' . $opt_name);
205 0 0         next if !$method;
206              
207 0           my $value = $self->$method();
208 0 0         next if !$value;
209 0 0 0       next if ref $value && !@{ $value };
  0            
210              
211 0           $pod_coverage_opts{$opt_name} = $value;
212             }
213              
214             $self->add_plugins(
215             [
216 0           'ContributorsFile' => {
217             filename => 'CONTRIBUTORS',
218             },
219             ],
220             'CheckChangesHasContent',
221             [
222             'NextRelease' => {
223             format => '%-9v%T %{yyyy-MM-dd HH:mm:ss VVVV}d',
224             },
225             ],
226             qw/
227             SyncCPANfile
228             OurPkgVersion
229             PodWeaver
230             /,
231             [
232             'Git::Contributors' => {
233             include_authors => 1,
234             },
235             ],
236             [
237             'Test::Pod::Coverage::Configurable' => \%pod_coverage_opts,
238             ],
239             qw/
240             PodSyntaxTests
241              
242             Test::NoTabs
243             Test::NoBOM
244             Test::Perl::Critic
245              
246             MetaJSON
247             MetaProvides::Package
248              
249             ExecDir
250             /,
251             );
252              
253 0           $self->add_bundle(
254             '@Filter' => {
255             '-bundle' => '@Basic',
256             '-remove' => [ 'Readme', 'PodCoverageTest', sort keys %remove_from_basic ],
257             },
258             );
259              
260 0           $self->_meta_resources;
261 0           $self->add_bundle('@Git');
262              
263 0 0         if ( $self->is_cpan ) {
264 0           $self->add_plugins(
265             [
266             'ReadmeAnyFromPod' => 'GfmInRoot' => {
267             phase => 'build',
268             },
269             ],
270             [
271             'ReadmeAnyFromPod' => 'TextInBuild' => {
272             phase => 'build',
273             },
274             ],
275             [
276             'ReadmeAddDevInfo' => {
277             phase => 'build',
278             before => '# AUTHOR',
279             add_contribution_file => 1,
280             },
281             ],
282             [
283             'GitHubREADME::Badge' => {
284             badges => [ qw/cpants issues cpancover license/ ],
285             phase => 'build',
286             place => 'top',
287             },
288             ],
289             );
290             }
291             }
292              
293             sub _meta_resources {
294 0     0     my ($self) = @_;
295              
296 0           my %meta_resources;
297              
298 0 0         $meta_resources{'bugtracker.web'} = $self->bugtracker if $self->bugtracker;
299              
300 0           my $type = $self->repository_type;
301              
302 0 0 0       return if !$type && !%meta_resources;
303              
304 0           my $name = $self->repository_path;
305              
306 0 0         if ( $type eq 'github' ) {
    0          
    0          
307             $meta_resources{'homepage'} =
308 0           $meta_resources{'repository.web'} =
309             sprintf "https://github.com/%s",
310             $name
311             ;
312 0           $meta_resources{'repository.url'} =
313             sprintf "git://github.com/%s.git",
314             $name
315             ;
316 0           $meta_resources{'repository.type'} = 'git';
317              
318 0 0         if ( !$self->bugtracker ) {
319 0           $meta_resources{'bugtracker.web'} =
320             sprintf "https://github.com/%s/issues",
321             $name
322             ;
323             }
324             }
325             elsif ( $type eq 'gitlab' ) {
326             $meta_resources{'homepage'} =
327 0           $meta_resources{'repository.web'} =
328             sprintf "https://gitlab.com/%s",
329             $name
330             ;
331 0           $meta_resources{'repository.url'} =
332             sprintf "git://gitlab.com/%s.git",
333             $name
334             ;
335 0           $meta_resources{'repository.type'} = 'git';
336              
337 0 0         if ( !$self->bugtracker ) {
338 0           $meta_resources{'bugtracker.web'} =
339             sprintf "https://gitlab.com/%s/-/issues",
340             $name
341             ;
342             }
343             }
344             elsif ( $type eq 'internal' ) {
345             $meta_resources{'homepage'} =
346 0 0         $meta_resources{'repository.web'} =
347             $self->internal_web if $self->internal_web;
348 0 0         $meta_resources{'repository.url'} =
349             $self->internal_url if $self->internal_url;
350 0   0       $meta_resources{'repository.type'} =
351             $self->internal_type || 'git';
352             }
353              
354 0 0         return if !%meta_resources;
355              
356 0           $self->add_plugins(
357             [ 'MetaResources' => \%meta_resources ],
358             );
359              
360 0           return 1;
361             }
362              
363             __PACKAGE__->meta->make_immutable;
364              
365             1;
366              
367             __END__
368              
369             =pod
370              
371             =encoding UTF-8
372              
373             =head1 NAME
374              
375             Dist::Zilla::PluginBundle::PERLSRVDE - The plugin bundle we use at Perl-Services.de
376              
377             =head1 VERSION
378              
379             version 1.1.1
380              
381             =head1 SYNOPSIS
382              
383             ; in dist.ini
384             [@PERLSRVDE]
385              
386             Using L</Options>:
387              
388             ; in dist.ini
389             [@PERLSRVDE]
390             ; we are using an internal git repository
391             repository_type = internal
392             internal_type = git
393             internal_url = git://git.internal.example/test.git
394             internal_web = https://git.internal.example/test
395             ; but the bugtracker is an other tool
396             bugtracker = https://our.bugtracker.example
397             ; and it's a CPAN module, so we want to include more
398             ; dist::zilla plugins
399             is_cpan = 1
400             ; but we do not want to upload it ;-)
401             fake_release = 1
402              
403             =head1 DESCRIPTION
404              
405             This is a L<Dist::Zilla> PluginBundle. It lists the plugins we use at L<Perl-Services.de|https://perl-services.de>.
406             It is roughly equivalent to the following dist.ini:
407              
408             [ContributorsFile]
409             filename = CONTRIBUTORS
410            
411             [CheckChangesHasContent]
412            
413             [NextRelease]
414             format=%-9v%T %{yyyy-MM-dd HH:mm:ss VVVV}d
415            
416             [SyncCPANfile]
417             [PkgVersion]
418             [PodWeaver]
419            
420             [@Filter]
421             -bundle = @Basic
422             -remove = Readme
423             -remove = UploadToCPAN
424            
425             [Git::Contributors]
426             include_authors = 1
427            
428             [PodSyntaxTests]
429             [Test::Pod::Coverage::Configurable]
430             [Test::NoTabs]
431             [Test::NoBOM]
432             [Test::Perl::Critic]
433            
434             [MetaProvides::Package]
435             [MetaJSON]
436            
437             [ExecDir]
438            
439             [@Git]
440            
441             [PerlTidy]
442             perltidyrc = .perltidyrc
443              
444             =for Pod::Coverage configure
445              
446             =head1 OPTIONS
447              
448             These options can be used:
449              
450             =over 4
451              
452             =item * is_cpan
453              
454             =item * repository_type
455              
456             This is used to generate the links to the repository and bugtracker (if bugtracker isn't set).
457              
458             Valid values:
459              
460             =over 4
461              
462             =item * github
463              
464             If you host your project on github.com
465              
466             =item * gitlab
467              
468             If you host your project on gitlab.com
469              
470             =item * internal
471              
472             If you host your project somewhere else.
473              
474             =back
475              
476             =item * repository_path
477              
478             The path of the repository. For this project it is I<perlservices/Dist-Zilla-PERLSRVDE>. The path is used
479             to generate the links to the repository and bugtracker.
480              
481             =item * internal_type
482              
483             =item * internal_url
484              
485             =item * bugtracker
486              
487             =item * fake_release
488              
489             =item * exclude_from_basic
490              
491             List plugins that should be removed from the L<Dist::Zilla::PluginBundle::Basic|@Basic> plugin bundle.
492              
493             =back
494              
495             These options are used to configure L<Dist::Zilla::Plugin::Test::Pod::Coverage::Configurable>:
496              
497             =over 4
498              
499             =item * pod_class
500              
501             (see L<Dist::Zilla::Plugin::Test::Pod::Coverage::Configurable/class>)
502              
503             =item * pod_skip
504              
505             (see L<Dist::Zilla::Plugin::Test::Pod::Coverage::Configurable/skip>)
506              
507             =item * pod_trustme
508              
509             (see L<Dist::Zilla::Plugin::Test::Pod::Coverage::Configurable/trustme>)
510              
511             =item * pod_also_private
512              
513             (see L<Dist::Zilla::Plugin::Test::Pod::Coverage::Configurable/also_private>)
514              
515             =back
516              
517             =head1 AUTHOR
518              
519             Renee Baecker <reneeb@cpan.org>
520              
521             =head1 COPYRIGHT AND LICENSE
522              
523             This software is Copyright (c) 2022 by Renee Baecker.
524              
525             This is free software, licensed under:
526              
527             The Artistic License 2.0 (GPL Compatible)
528              
529             =cut