use strict; use warnings; package Dist::Zilla::App::Command::run; { $Dist::Zilla::App::Command::run::VERSION = '4.300030'; } # ABSTRACT: run stuff in a dir where your dist is built use Dist::Zilla::App -command; sub abstract { 'run stuff in a dir where your dist is built' } sub usage_desc { return '%c run %o [ run command [ arg1 arg2 ... ] ]'; } sub execute { my ($self, $opt, $args) = @_; unless (@$args) { my $envname = $^O eq 'MSWin32' ? 'COMSPEC' : 'SHELL'; unless ($ENV{$envname}) { $self->usage_error("no command supplied to run and no \$$envname set"); } $args = [ $ENV{$envname} ]; $self->log("no command supplied to run so using \$$envname: $args->[0]"); } $self->zilla->run_in_build($args); } 1; __END__ =pod =head1 NAME Dist::Zilla::App::Command::run - run stuff in a dir where your dist is built =head1 VERSION version 4.300030 =head1 SYNOPSIS $ dzil run ./bin/myscript $ dzil run prove -bv t/mytest.t $ dzil run bash =head1 DESCRIPTION This command will build your dist with Dist::Zilla, then build the distribution and then run a command in the build directory. It's something like doing this: dzil build rsync -avp My-Project-version/ .build/ cd .build perl Makefile.PL # or perl Build.PL make # or ./Build export PERL5LIB=$PWD/blib/lib:$PWD/blib/arch <your command as defined by rest of params> Except for the fact it's built directly in a subdir of .build (like F<.build/69105y2>). A command returning with an non-zero error code will left the build directory behind for analysis, and C<dzil> will exit with a non-zero status. Otherwise, the build directory will be removed and dzil will exit with status zero. If no run command is provided, a new default shell is invoked. This can be useful for testing your distribution as if it were installed. =head1 AUTHOR Ricardo SIGNES <rjbs@cpan.org> =head1 COPYRIGHT AND LICENSE This software is copyright (c) 2013 by Ricardo SIGNES. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut