The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.


Dist::Zilla::PluginBundle::Author::AMON - dzil config choices by AMON


    # in dist.ini
    github = example-user/example-repo
    autogenerate_file = Build.PL
    ; github_issues = 1
    ; exclude_author_deps = inc::Example
    ; gather_exclude_file = TODO.txt
    ; gather_exclude_match = ^scripts/
    ; ppport = src/ppport.h


This module contains a starting point for AMON's dist.ini. There are a couple of more or less sensible defaults (like pointing metadata at Github, or only gathering files tracked by Git) and a number of valuable checks so that I mess up fewer CPAN releases (like checking that the Changes file was updated.) There are also a few convenience features (like not gathering files that will be generated by the build process.)

Decisions not currently made by this module:

Which build system to use (e.g. Module::Build vs. MakeMaker).

How the version number is managed (e.g. taken from the module with [VersionFromMainModule]).

How prereqs are found. Simply using [AutoPrereqs] is likely to be correct.

All this may change in a future release without prior notice, and will not be seen as a backwards-incompatible change.



The name of a GitHub repository in the format <user>/<repo>. This is used to set the repo and user fields in [GithubMeta].

Required string.


Whether Github Issues should be used as the bugtracker. If not, bugtracker info needs to be added manually.

Optional boolean. Defaults to true.


Exclude authordeps prereqs. This module will add your "dzil authordeps" via [Prereqs::AuthorDeps]. List any modules that should not be required, e.g. because they are bundled as "inc/" modules.

Optional string. Can be specified multiple times. Defaults to empty list.


Filenames that should not be gathered. Use gather_exclude_match to exclude all files matching a pattern, e.g. a whole directory. Use autogenerate_file to exclude files that will be copied from the built dist.

Optional string. Can be specified multiple times. Defaults to empty list.


A regex to match filenames that should not be gathered. Use gather_exclude_file to exclude single files. Use autogenerate_file to exclude files that will be copied from the built dist.

Optional string. Can be specified multiple times. Defaults to empty list.


Files that should be copied from the built dist. These won't be gathered. After the build phase, they will be copied into your source tree. Use gather_exclude_file or gather_exclude_match to exclude files, without copying them from the built dist.

The following files will be copied or autogenerated without having to add them to this configuration option:

  • LICENSE as generated by the [License] plugin.

  • cpanfile as generated by the [CPANFile] plugin.

  • as generated by the [ReadmeAnyFromPod] plugin.

  • ppport.h if specified (see the ppport option).

Optional string. Can be specified multiple times. Defaults to empty list.


Add a ppport.h file under the specified path. The value of this option is the path/filename where the ppport.h should be placed. E.g.:

    ppport = src/ppport.h

Optional string or undef. Defaults to undef.


The plugins are configured in thematic groups. Each group is a method that can be overridden in subclasses of this bundle.


Add metadata.

    user = {{github.user}}
    repo = {{github.repo}}
    issues = {{github_issues}}

Plugins: GithubMeta.

Configuration options: github, github_issues.


Specify prerequisites.

    ; exclude = {{exclude_author_deps}}

Plugins: Prereqs::AuthorDeps.

Configuration options: exclude_author_deps.


Gather files to be included in the dist.

    ; exclude_match = {{gather_exclude_match}}
    ; exclude_filename = {{gather_exclude_file}}
    ; exclude_filename = {{autogenerate_file}}
    ; exclude_filename = {{ppport}}

Plugins: Git::GatherDir, PruneCruft.

Configuration options: gather_exclude_file, gather_exclude_match, autogenerate_file, ppport.


Autogenerate certain files in the dist.

    ; [NextRelease]
    ; [PPPort]
    ; filename = {{ppport}}

Plugins: [CPANFile], [MetaYAML], [MetaJSON], [MetaProvides::Package], [Manifest], [License], [Readme], [PPPort].

Configuration options: ppport.


Add extra tests, particularly author tests focussed on release quality.


Plugins: [Test::Perl::Critic], [PodSyntaxTests], [PodCoverageTests], [Test::Kwalitee::Extra], [RunExtraTests].


Post-build actions, such as copying generated files into the source tree.

    copy = {{autogenerate_file}}
    ; copy = {{ppport}}
    type = markdown
    filename =
    location = root
    phase = build

Plugins: [CopyFilesFromBuild], [ReadmeAnyFromPod].

Configuration options: autogenerate_file, ppport.


Run pre-release checks.


Plugins: [Git::CheckFor::CorrectBranch], [Git::Check], [CheckChangesHasContent], [CheckVersionIncrement].


Perform post-release bookkeeping.

    time_zone = UTC
    commit_msg  = release-%v
    tag_format  = release-%v
    tag_message = release-%v

Plugins: [NextRelease], [Git::Commit], [Git::Tag], [Git::Push].





amon - Lukas Atkinson (cpan: AMON) <>


Copyright 2017 Lukas Atkinson

This library is free software and may be distributed under the same terms as perl itself. See