# NAME

Minilla - CPAN module authoring tool

# SYNOPSIS

   minil new     - Create a new dist
   minil test    - Run test cases
   minil dist    - Make your dist tarball
   minil install - Install your dist
   minil release - Release your dist to CPAN

# DESCRIPTION

Minilla is a CPAN module authoring tool. Minilla provides [minil](http://search.cpan.org/perldoc?minil) command for authorizing a CPAN distribution.

   (M::I - inc) + shipit + (dzil - plugins)

__THIS IS A DEVELOPMENT RELEASE. API MAY CHANGE WITHOUT NOTICE__.

# MOTIVATION

# CONVENTION

As stated above, Minilla is opinionated. Minilla has a bold assumption and convention like the followings, which are almost compatible to the sister project [Dist::Milla](http://search.cpan.org/perldoc?Dist::Milla).

- Your module written in Pure Perl are located in _lib/_.
- Your executable file is in _script/_ directory, if any
- Your module is maintained with __Git__ and `git ls-files` matches with what you will release
- Your module has a static list of prerequisites that can be described in [cpanfile](http://search.cpan.org/perldoc?cpanfile)
- Your module has a Changes file

# GETTING STARTED

   # First time only
   % cpanm Minilla
   # Minilla has only a few deps. It should be very quick

   # Make a new distribution
   % minil new Dist-Name
   % cd Dist-Name/

   # Git commit
   % git commit -m "initial commit"

   # Hack your code!
   % $EDITOR lib/Dist/Name.pm t/dist-name.t cpanfile

   # Done? Test and release it!
   % minil release

It's that easy.

You already have distributions with [Module::Install](http://search.cpan.org/perldoc?Module::Install), [Module::Build](http://search.cpan.org/perldoc?Module::Build), [Dist::Zilla](http://search.cpan.org/perldoc?Dist::Zilla) or [ShipIt](http://search.cpan.org/perldoc?ShipIt)? Migrating is also trivial. See "MIGRATING" in [Minilla::Tutorial](http://search.cpan.org/perldoc?Minilla::Tutorial) for more details.

# WHY MINILLA?

## Repository managed by Minilla is git install ready.

The repository created and managed by Minilla is git install ready.
You can install the library by `cpanm git://...`.

Of course, you can install Minilla from `cpanm git://github.com/tokuhirom/Minilla.git`.

## Minilla is built on small libraries.

Minilla is built on only few small libraries. You can install Minilla without a huge list of dependencies to heavy modules.

## And, what is Minilla?

   Minilla is a Kaiju (Japanese giant monster) from the Godzilla series of films and is the first of several young Godzillas.
   http://en.wikipedia.org/wiki/Minilla

# CONFIGURATION

Minilla uses __Convention over Configuration__.

But, you can write configurations to _minil.toml_ file in [TOML](https://github.com/mojombo/toml) format. Minilla reads the _minil.toml_ file in the root directory of your project.

- name

   You can write 'name' instead of automatically detecting project name out of the directory name.

- readme\_from

       readme_from="lib/My/Foo.pod"

   You can specify the file to generate the README.md. This is a main module path by default.

- abstract\_from

       abstract_from="lib/My/Foo.pod"

   Grab abstract information from the file contains pod.

- authors\_from

       authors_from="lib/My/Foo.pod"

   Grab authors information from the file contains pod.

- allow\_pureperl

       allow_pureperl=1

   A bool indicating the module is still functional without its XS parts.  When an XS module is build
   with `--pureperl_only`, it will otherwise fail.

   It affects to [Module::Build](http://search.cpan.org/perldoc?Module::Build) 0.4005+ only.

- no\_github\_issues

       no_github_issues=true

   Minilla sets bugtracker as github issues by default. But if you want to use RT, you can set this variable.

- no\_index

       [no_index]
       directory=['t', 'xt', 'tools']

   Minilla sets META.json's no\_index as `directory => ['t', 'xt', 'inc', 'share', 'eg', 'examples', 'author']`
   by default. But if you want to change them, you can set this section variable. If this section is set,
   specified variables are only used, in fact default settings are not merged.

- script\_files

       script_files = ['bin/foo', 'script/*']

   Minilla sets install script files as `['script/*', 'bin/*']` by default.

- build.build\_class

   Specify a custom Module::Build subclass.

       [build]
       build_class = builder::MyBuilder

- FileGatherer.exclude\_match

       [FileGatherer]
       exclude_match=['^author_tools/.*']

   Nothing by default. To exclude certain files from being gathered into dist, use the
   `exclude_match` option. Files matching the patterns are not gathered.

- FileGatherer.include\_dotfiles

       [FileGatherer]
       include_dotfiles=false

   By default, files will not be included in dist if they begin with a dot. This goes
   both for files and for directories.

   In almost all cases, the default value (false) is correct.

- release.pause\_config

       [release]
       pause_config="/path/to/some/.pause"

   By setting this value to another PAUSE configuration file (see
   ["CONFIGURATION" in cpan\_upload](http://search.cpan.org/perldoc?cpan\_upload#CONFIGURATION) for the details), it is possible to use another
   PAUSE server (or anything good enough to mimick its upload process) for the
   release step.

   To do so, simply add a `upload_uri` entry in your file to the alternate PAUSE
   server, i.e :

       upload_uri http://127.0.0.1:5000/pause/authenquery

   Note that this feature is not officially documented in [CPAN::Uploader](http://search.cpan.org/perldoc?CPAN::Uploader).

# FAQ

- Why don't you provide plug-in support?

   If you want to pluggable thing, it's already exist dzil :P
   And if you like a behavior like Minilla, you can use [Dist::Milla](http://search.cpan.org/perldoc?Dist::Milla), the sister project of Minilla.
   [Dist::Milla](http://search.cpan.org/perldoc?Dist::Milla)'s behavior is mostly like Minilla.

- Why minil only supports git?

   I think git is a best VC for CPAN modules, for now.

   If you want to use another version control system, you can probably use [Dist::Milla](http://search.cpan.org/perldoc?Dist::Milla).

- And why...

   Yes. You can use [Dist::Milla](http://search.cpan.org/perldoc?Dist::Milla).

- Should I add (META.json|Build.PL) to repository?

   Yes. You need to add it to make your git repo installable via cpanm.

- How do I manage ppport.h?

   Is there a reason to remove ppport.h from repo?

- How can I install script files?

   Your executables must be in `script/`. It's [Module::Build::Tiny](http://search.cpan.org/perldoc?Module::Build::Tiny)'s rule.

- How to switch from Module::Install/Module::Build/Dist::Zilla?

   You can use experimental \`minil migrate\` sub-command.
   See [Minilla::CLI::Migrate](http://search.cpan.org/perldoc?Minilla::CLI::Migrate) for more details.

# AUTHORS

Tokuhiro Matsuno < [email protected] >

Tatsuhiko Miyagawa

# THANKS TO

RJBS, the author of [Dist::Zilla](http://search.cpan.org/perldoc?Dist::Zilla). [Dist::Zilla](http://search.cpan.org/perldoc?Dist::Zilla) points CPAN authorizing tool.

# SEE ALSO

# LICENSE

Copyright (C) Tokuhiro Matsuno

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