Group
Extension

Dist-Zilla-PluginBundle-ARODLAND/lib/Dist/Zilla/PluginBundle/ARODLAND.pm

package Dist::Zilla::PluginBundle::ARODLAND;
# ABSTRACT: Use L<Dist::Zilla> like ARODLAND does
our $AUTHORITY = 'cpan:ARODLAND'; # AUTHORITY
our $VERSION = '0.15'; # VERSION

use 5.10.0;
use Moose;
no if $] >= 5.017011, warnings => 'experimental::smartmatch';

with 'Dist::Zilla::Role::PluginBundle';

use Dist::Zilla::PluginBundle::Basic;
use Dist::Zilla::PluginBundle::Git;
use Dist::Zilla::Plugin::Authority;
use Dist::Zilla::Plugin::MetaNoIndex;
use Dist::Zilla::Plugin::AutoVersion;
use Dist::Zilla::Plugin::Git::NextVersion;
#use Dist::Zilla::Plugin::CheckChangesHasContent;
use Dist::Zilla::Plugin::OurPkgVersion;
use Dist::Zilla::Plugin::CopyFilesFromBuild;
use Dist::Zilla::Plugin::ReadmeAnyFromPod;
use Dist::Zilla::Plugin::Prereqs::FromCPANfile;

sub bundle_config {
  my ($self, $section) = @_;

  my $config = $section->{payload};

  my $dist = $config->{dist} // die "You must supply a dist name\n";
  my $github_user = $config->{github_user} // "arodland";

  my $authority = $config->{authority};
  my $bugtracker = $config->{bugtracker} // "rt";
  my $homepage = $config->{homepage};
  my $repository_url = $config->{repository_url};
  my $repository_web = $config->{repository_web};

  my $prereqs = $config->{prereqs} // 'auto';
  $prereqs = 'manual' if $config->{no_AutoPrereqs};

  my $install_plugin = $config->{install_plugin} // "mbtiny";
  $install_plugin = lc $install_plugin;
  my $nextrelease_format = $config->{nextrelease_format} // "Version %v: %{yyyy-MM-dd}d";

  my $nextversion = $config->{nextversion} // "git"; # git, autoversion, manual
  my $tag_message = $config->{git_tag_message};
  my $version_regexp = $config->{git_version_regexp};
  my $autoversion_major = $config->{autoversion_major};

  my $readme_format = $config->{readme_format} // "pod";

  my $compat = $config->{compat} || $VERSION;

  my ($tracker, $tracker_mailto, $webpage, $repo_url, $repo_web);

  if ($bugtracker eq 'github') {
    $tracker = "http://github.com/$github_user/$dist/issues";
  } elsif ($bugtracker eq 'rt') {
    $tracker = "https://rt.cpan.org/Public/Dist/Display.html?Name=$dist";
    $tracker_mailto = "bug-${dist}\@rt.cpan.org";
  } else {
    $tracker = $bugtracker;
  }

  if (defined $repository_url) {
    $repo_web = $repository_web;
    $repo_url = $repository_url;
  } else {
    $repo_web = "http://github.com/$github_user/$dist";
    $repo_url = "git://github.com/$github_user/$dist.git";
  }

  if (defined $homepage) {
    $webpage = $homepage;
  } else {
    $webpage = "http://metacpan.org/release/$dist";
  }

  my @plugins = Dist::Zilla::PluginBundle::Basic->bundle_config({
      name => $section->{name} . '/@Basic',
      payload => { },
  });

  if ($install_plugin ne 'makemaker') {
    @plugins = grep { $_->[1] ne 'Dist::Zilla::Plugin::MakeMaker' } @plugins;
  }

  @plugins = grep { $_->[1] ne 'Dist::Zilla::Plugin::GatherDir' } @plugins;

  my @no_index_dirs = grep { -d $_ } qw( inc t xt utils example examples );

  my $prefix = 'Dist::Zilla::Plugin::';
  push @plugins, map {[ "$section->{name}/$_->[0]" => "$prefix$_->[0]" => $_->[1] ]}
  (
    ($prereqs eq 'cpanfile'
      ? ([ 'Prereqs::FromCPANfile' => { } ])
      : ()
    ),
    ($prereqs eq 'auto'
      ? ([ 'AutoPrereqs' => { } ])
      : ()
    ),
    ($compat <= 0.02
      ? ([ PkgVersion => { } ])
      : ([ OurPkgVersion => { } ])
    ),
    (@no_index_dirs
      ? ([ MetaNoIndex => { directory => [ @no_index_dirs ] } ])
      : ()
    ),
    [
      MetaResources => {
        homepage => $webpage,
        'bugtracker.web' => $tracker,
        'bugtracker.mailto' => $tracker_mailto,
        'repository.type' => 'git',
        'repository.url' => $repo_url,
        'repository.web' => $repo_web,
        license => 'http://dev.perl.org/licenses/',
      }
    ],
    [
      Authority => {
        (defined $authority
          ? (authority => $authority)
          : ()
        ),
        do_metadata => 1,
        do_munging => 1,
        ($compat <= 0.02
          ? ()
          : (locate_comment => 1)
        ),
      }
    ],
    [
      NextRelease => {
        format => $nextrelease_format,
      }
    ],
    [
      GatherDir => {
        exclude_filename => [
          'README',
          'README.pod',
          'Makefile.PL',
          'Build.PL',
          'META.json'
        ],
      }
    ],
    [
      ReadmeAnyFromPod => {
        location => 'root',
        ($readme_format eq 'pod'
          ? (type => 'pod', filename => 'README.pod')
          : ()
        ),
        ($readme_format eq 'text'
          ? (type => 'text', filename => 'README')
          : ()
        ),
      }
    ],
    [
      CopyFilesFromBuild => {
        copy => [
          (($install_plugin eq 'modulebuild_optionalxs' or $install_plugin eq 'mbtiny')
            ? ('Build.PL')
            : ()
          ),
          ($install_plugin eq 'makemaker'
            ? ('Makefile.PL')
            : ()
          ),
          'META.json',
        ],
      }
    ],
    ($install_plugin eq 'modulebuild_optionalxs'
      ? ([ 'ModuleBuild::OptionalXS' => { } ])
      : ()
    ),
    ($install_plugin eq 'mbtiny'
      ? ([ 'ModuleBuildTiny' => { } ])
      : ()
    ),
    [
      MetaJSON => { }
    ],
#    [ CheckChangesHasContent => { } ],
  );

  if ($nextversion eq 'git') {
    push @plugins, [ "$section->{name}/Git::NextVersion", "Dist::Zilla::Plugin::Git::NextVersion",
      {
        first_version => '0.01',
        ( $version_regexp
          ? (version_regexp => $version_regexp)
          : (version_regexp => '^(\d.*)$')
        ),
      }
    ];
  } elsif ($nextversion eq 'autoversion') {
    push @plugins, [ "$section->{name}/AutoVersion", "Dist::Zilla::Plugin::AutoVersion",
      {
        ( $autoversion_major
          ? (major => $autoversion_major)
          : (major => 0)
        ),
      }
    ];
  } elsif ($nextversion eq 'manual') {
    # Manual versioning
  } else {
    die "Unknown 'nextversion'\n";
  }

  push @plugins, Dist::Zilla::PluginBundle::Git->bundle_config({
      name    => "$section->{name}/\@Git",
      payload => {
        tag_format => '%v',
        ( $tag_message
          ? (tag_message => $tag_message)
          : ()
        ),
        allow_dirty => ['dist.ini', 'README', 'README.pod', 'META.json', 'Changes', 'Build.PL', 'Makefile.PL'],
        changelog => 'Changes',
        add_files_in => ['README', 'README.pod', 'META.json'],
        commit_msg => 'Release v%v%n%n%c',
        push_to => 'origin',
      },
  });

  return @plugins;
}

__PACKAGE__->meta->make_immutable;

__END__

=pod

=encoding UTF-8

=head1 NAME

Dist::Zilla::PluginBundle::ARODLAND - Use L<Dist::Zilla> like ARODLAND does

=head1 VERSION

version 0.15

=head1 DESCRIPTION

This is the plugin bundle that ARODLAND uses. Use it as:

    [@ARODLAND]

    ;; Same as 'name' earlier in the dist.ini
    dist = My-Dist
    ;; If you're not me
    github_user = joebloe
    ;; Bugtracker: github or rt (or URL)
    bugtracker = rt
    ;; custom homepage / repository
    homepage = http://www.myawesomeproject.com/
    repository = http://git.myawesomeproject.com/coolstuff.git
    ;; disable certain features so you can do it better on your own
    no_AutoPrereqs = 1
    ;; defaults to the username from your [%PAUSE] or ~/.pause
    authority = cpan:ARODLAND

It's equvalent to

    [@Basic]
    
    [AutoPrereqs] ;; Unless no_AutoPrereqs is set
    [OurPkgVersion]
    [MetaJSON]
    
    [MetaNoIndex]
    ;; Only added if these directories exist
    directory = inc
    directory = t
    directory = xt
    directory = utils
    directory = example
    directory = examples
     
    [MetaResources]
    ;; $github_user is 'arodland' by default
    homepage   = http://search.cpan.org/dist/$dist/
    bugtracker.mailto = bug-$dist@rt.cpan.org
    bugtracker.web = https://rt.cpan.org/Public/Dist/Display.html?Name=$dist
    repository.web = http://github.com/$github_user/$dist
    repository.url = git://github.com/$github_user/$dist.git
    repository.type = git
    license    = http://dev.perl.org/licenses/ 
    
    [Authority]
    authority = cpan:YOURNAME ; if provided
    do_metadata = 1
    do_munging = 1
    locate_comment = 1
    
    [NextRelease]
    format = Version %v: %{yyyy-MM-dd}d

    [CheckChangesHasContent]

    [Git::NextVersion] ;; if nextversion is set to 'git'
    
    [AutoVersion] ;; if nextversion is set to 'autoversion'

    [ModuleBuildTiny] ;; by default

    [MakeMaker] ;; if install_plugin is 'makemaker'

    [ModuleBuild::OptionalXS] ;; if install_plugin is 'modulebuild_optionalxs'

    [MetaJSON]

    [@Git]
    allow_dirty = dist.ini
    allow_dirty = README
    allow_dirty = Changes
    changelog = Changes
    commit_msg = Release v%v%n%n%c
    push_to = origin

=head1 AUTHOR

Andrew Rodland <arodland@cpan.org>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2021 by Andrew Rodland.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

=cut


Powered by Groonga
Maintained by Kenichi Ishigaki <ishigaki@cpan.org>. If you find anything, submit it on GitHub.