App-ModuleBuildTiny
view release on metacpan or search on metacpan
- Allow -j as synonym for --jobs
0.041 2023-04-29 16:31:04+0200
- Depend on new ExtUtils::Manifest #include behavior
- Add help subcommand
0.040 2023-04-13 23:40:33+0200
- Create .gitignore when minting
- Add -I option to test subcommand
- Run more release tests on upload
- Make upload prompt default to false
0.039 2023-04-06 16:08:17+0200
- Don't autocommit/autobump on partial regenerate
0.038 2023-03-30 17:07:59+0200
- Add --jobs argument to mbtiny test
- Also allow module name as mint argument
- mkdir 't' during mint
0.037 2023-03-24 12:45:52+0100
- Add documentation for --commit, --tag and --push
0.032 2023-02-03 20:16:39+0100
- Correctly run author and release tests on upload.
- Update Changes file on regenerate --bump
- Add a --commit option to regenerate
- Add --tag and --push to upload
0.031 Thu Feb 2 02:35:19 PM CET 2023
- Make configuration optional for minting
- Add prompt before release
- Remove VERSION section from template
- Make "configure all" default to current values
- Allow for removing configure values
0.030 Mon Jan 16 12:16:05 AM CET 2023
- Allow for multiple prereq files
- Add scan command for prereqs
- Add --bump option to regenerate subcommand
- Add list action to configure subcommand
lib/App/ModuleBuildTiny.pm view on Meta::CPAN
use JSON::MaybeXS qw/decode_json/;
use Module::Runtime 'require_module';
use Text::Template;
use App::ModuleBuildTiny::Dist;
use Env qw/$AUTHOR_TESTING $RELEASE_TESTING $AUTOMATED_TESTING $EXTENDED_TESTING $NONINTERACTIVE_TESTING $SHELL $HOME $USERPROFILE/;
Getopt::Long::Configure(qw/require_order gnu_compat bundling/);
sub prompt {
my($mess, $def) = @_;
my $dispdef = defined $def ? " [$def]" : "";
local $|=1;
local $\;
print "$mess$dispdef ";
my $ans = <STDIN> // '';
chomp $ans;
return $ans ne '' ? decode_utf8($ans) : $def // '';
}
sub prompt_yn {
my ($description, $default) = @_;
my $result;
do {
$result = prompt("$description [y/n]", $default ? 'y' : 'n');
} while (length $result and $result !~ /^(y|n|-)/i);
return lc(substr $result, 0 , 1) eq 'y';
}
sub create_license_for {
my ($license_name, $author) = @_;
my $module = "Software::License::$license_name";
require_module($module);
return $module->new({ holder => $author });
}
lib/App/ModuleBuildTiny.pm view on Meta::CPAN
my @changes = $dist->get_changes;
my $version = 'v' . $dist->version;
my $message = $opts{message} || ($opts{bump} ? join '', $version, "\n\n", @changes : 'Regenerate');
$git->commit({ m => $message }, @dirty);
} else {
say "No modifications to commit";
}
}
}
my %prompt_for = (
open => \&prompt,
yn => \&prompt_yn,
);
my @config_items = (
[ 'author' , 'What is the author\'s name?', 'open' ],
[ 'email' , 'What is the author\'s email?', 'open', ],
[ 'license' , 'What license do you want to use?', 'open', 'Perl_5' ],
[ 'write_buildpl' , 'Do you want to write your Build.PL file to your filesystem?', 'yn', !!1],
[ 'write_meta' , 'Do you want to write your meta files to your filesystem?', 'yn', !!1],
[ 'write_manifest', 'Do you want to write your manifest files to your filesystem?', 'yn', !!1],
lib/App/ModuleBuildTiny.pm view on Meta::CPAN
'write_buildpl' => 'write_build',
'write_meta' => 'write_build',
'write_manifest' => 'write_build',
);
my @delete_config = qw/write_build/;
sub ask {
my ($config, $item, $local_default) = @_;
my ($key, $description, $type, $global_default) = @{$item};
my $value = $prompt_for{$type}->($description, $local_default // $global_default);
if ($value ne '-') {
$config->{$key} = $type eq 'open' ? $value : $value ? JSON::MaybeXS::true : JSON::MaybeXS::false;
}
else {
delete $config->{$key};
}
}
sub show_item {
lib/App/ModuleBuildTiny.pm view on Meta::CPAN
insert_options(\%opts, get_config);
my $dist = App::ModuleBuildTiny::Dist->new;
$dist->preflight_check(%opts);
local ($AUTHOR_TESTING, $RELEASE_TESTING) = (1, 1);
my @commands = ([ './Build', 'test' ]);
my @extra_tests = extra_tests;
push @commands, [ 'prove', '-br', @extra_tests ] if @extra_tests;
$dist->run(commands => \@commands, build => 1, verbose => !$opts{silent}) or return 1;
my $sure = prompt_yn('Do you want to continue the release process?', !!0);
if ($sure) {
my $file = $dist->write_tarball($dist->archivename);
require CPAN::Upload::Tiny;
CPAN::Upload::Tiny->VERSION('0.009');
my $uploader = CPAN::Upload::Tiny->new_from_config_or_stdin($opts{config});
$uploader->upload_file($file);
print "Successfully uploaded $file\n" if not $opts{silent};
if ($opts{tag}) {
require Git::Wrapper;
lib/App/ModuleBuildTiny.pm view on Meta::CPAN
my %config;
my @options = qw/version=s abstract=s dirname=s init_git|init-git/;
for my $config_item (@config_items) {
my $entry = $config_item->[0] =~ s{^(\w+_\w+)\K$}{ '|' . $1 =~ tr/_/-/r }er;
push @options, $entry . ($config_item->[2] eq 'yn' ? '!' : '=s');
}
GetOptionsFromArray(\@arguments, \%args, @options) or return 2;
for my $item (@config_items) {
my ($key, $description, $type, $default) = @{$item};
if ($type eq 'open') {
$args{$key} //= prompt($description, $default);
}
else {
$config{$key} = $args{$key} // $settings->{$key} // prompt_yn($description, $default);
}
}
my $license = create_license_for(delete $args{license}, $args{author});
die "Directory $args{dirname} already exists\n" if -e $args{dirname};
mkdir $args{dirname};
chdir $args{dirname};
$args{module_name} = $distname =~ s/-/::/gr;
( run in 0.657 second using v1.01-cache-2.11-cpan-6aa56a78535 )