package Dist::Zilla::Plugin::ScpDeploy; BEGIN { $Dist::Zilla::Plugin::ScpDeploy::VERSION = '1.20110709'; } # ABSTRACT: deploy via scp and ssh use Moose 2.0007; use Moose::Util::TypeConstraints; use namespace::autoclean; use constant HOSTSTYPE => __PACKAGE__ . '::Types::Hosts'; with 'Dist::Zilla::Role::Releaser'; subtype HOSTSTYPE, as 'ArrayRef[Str]'; coerce HOSTSTYPE, from 'Str', via { [ split /,\s*/, $_ ] }; has [qw( remote_dir command )], is => 'ro', required => 1; has 'hosts', isa => HOSTSTYPE, is => 'ro', required => 1, coerce => 1; sub release { my ($self, $archive) = @_; my $remote_dir = $self->remote_dir; my $command = $self->command; for my $host (@{ $self->hosts }) { system( 'scp', $archive, "${host}:${remote_dir}" ); system( 'ssh', $host, $command, "${remote_dir}/${archive}" ); } } __PACKAGE__->meta->make_immutable; __END__ =pod =head1 NAME Dist::Zilla::Plugin::ScpDeploy - deploy via scp and ssh =head1 VERSION version 1.20110709 =head1 DESCRIPTION This plugin can automatically deploy a release when you run C. It performs two actions for you: =over 4 =item * uses C to copy the released tarball to one or more hosts =item * uses C to run a deployment command on each of those hosts =back Configure this behavior in your F by setting three required arguments: [ScpDeploy] hosts = huey, dewey, louie command = release_me remote_dir = /home/cbarks/vault Note well that you may specify multiple hosts by separating them with commas and (optional) spaces. It is your responsibility to configure C and C on your machine such that hostnames and passwordless logins work correctly I that this module can find the appropriate binaries in your path. It is also your responsibility to configure the remote hosts such that the remote directory and the remote command to run are available. The remote command receives one argument: the path to the release tarball in the given remote directory. =head1 AUTHOR chromatic =head1 COPYRIGHT AND LICENSE This software is copyright (c) 2011 by chromatic@wgz.org. 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