The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#! perl

use strict;
use warnings FATAL => 'all';
use App::ModuleBuildTiny;

modulebuildtiny(@ARGV);

=head1 NAME

mbtiny - A standalone authoring script for Module::Build::Tiny

=head1 VERSION

version 0.006

=head1 SYNOPSIS

 mbtiny listdeps | cpanm
 mbtiny test --release
 mbtiny dist

=head1 OVERVIEW

Essentially C<mbtiny> does only one thing: generate the ancillary files of a distribution. To be more exact, it can generate:

=over 4

=item * Build.PL

This contain the code needed to build the dist using L<Module::Build::Tiny|Module::Build::Tiny>.

=item * MANIFEST

This contains the list of files in this distribution, and optionally descriptions.

=item * META.json

The file containing most meta information about this distributions. Useful for both presenting information to the user as for installing the distribution.

=item * META.yml

This is the legacy meta file. This is mainly useful for bootstrapping on CPAN clients too old to support META.json but recent enough to support configure_requires.

=back

The information for these files is gathered from various sources. The distribution name is taken from the local directory name. The version, abstract and author are taken from the main module of the distribution. Prerequisites are mostly taken from cpanfile, except when injected explicitly (e.g. a configure dependency on L<Module::Build::Tiny|Module::Build::Tiny>). A C<metamerge.json> or C<metamerge.yml> file can be used to merge any additional meta information you want (including dependencies).

=head1 WORKFLOWS

It supports two different workflows, which I call Feedback and Generator. In both cases, additional tools are used for various other authoring tasks such as perl-reversion, scan-prereqs-cpanfile and cpan-upload.

=head2 Feedback

In this workflow you're commiting the generated files to the filesystem/repository, in particular using the C<regenerate> command.

=head2 Generator

In this workflow the generated files aren't written back to the file system, instead they are generated on every mbtiny command.

=head1 SUBCOMMANDS

=over 4

=item * dist

This creates a distribution tarball.

=item * distdir

This creates a directory containing all of the files of the distribution.

=item * test

This runs all of the tests of a distribution. It takes two options that can both be negated:

=over 4

=item * release

Run release tests. Defaults to false.

=item * author

Run author tests. Defaults to true.

=back

=item * run

Run the specified command in a build distribution. It takes one boolean argument:

=over 4

=item * no-build

This will cause mbtiny not to build the distribution before running the command.

=back

=item * shell

Runs the C<$SHELL>, this is short for C<mbtiny run $SHELL>.

=item * listdeps

List all dependencies of this distribution. By default it prints a list of modules. If the C<json> option option is given, it's printed as JSON instead.

=item * regenerate <files>

This regenerates the given files. If no files are given, it defaults to the four files it can generate: C<Build.PL>, C<MANIFEST>, C<META.json>, and C<META.yml>. You usually want to do this after bumping the version of a module, adding a dependency or adding a file.

=back