Minilla - CPAN module authoring tool
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
Minilla is a CPAN module authoring tool. Minilla provides minil command for authorizing a CPAN distribution.
(M::I - inc) + shipit + (dzil - plugins)
THIS IS A DEVELOPMENT RELEASE. API MAY CHANGE WITHOUT NOTICE.
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.
- 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
- Your module has a Changes file
# 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, Module::Build, Dist::Zilla or ShipIt? Migrating is also trivial. See "MIGRATING" in Minilla::Tutorial for more details.
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 only few small libraries. You can install Minilla without a huge list of dependencies to heavy modules.
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
Minilla uses Convention over Configuration.
But, you can write configurations to minil.toml file in 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 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 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.
-
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, the sister project of Minilla. 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.
-
And why...
Yes. You can use 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's rule. -
How to switch from Module::Install/Module::Build/Dist::Zilla?
You can use experimental `minil migrate` sub-command. See Minilla::CLI::Migrate for more details.
Tokuhiro Matsuno < tokuhirom@gmail.com >
Tatsuhiko Miyagawa
RJBS, the author of Dist::Zilla. Dist::Zilla points CPAN authorizing tool.
Copyright (C) Tokuhiro Matsuno
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.