Dist-Zilla

 view release on metacpan or  search on metacpan

lib/Dist/Zilla/Plugin/UploadToCPAN.pm  view on Meta::CPAN

package Dist::Zilla::Plugin::UploadToCPAN 6.037;
# ABSTRACT: upload the dist to CPAN

use Moose;
with 'Dist::Zilla::Role::BeforeRelease',
     'Dist::Zilla::Role::Releaser';

use Dist::Zilla::Pragmas;

use File::Spec;
use Moose::Util::TypeConstraints;
use Scalar::Util qw(weaken);
use Dist::Zilla::Util;
use Try::Tiny;

use namespace::autoclean;

#pod =head1 SYNOPSIS
#pod
#pod If loaded, this plugin will allow the F<release> command to upload to the CPAN.
#pod
#pod =head1 DESCRIPTION
#pod
#pod This plugin looks for configuration in your C<dist.ini> or (more
#pod likely) C<~/.dzil/config.ini>:
#pod
#pod   [%PAUSE]
#pod   username = YOUR-PAUSE-ID
#pod   password = YOUR-PAUSE-PASSWORD
#pod
#pod If this configuration does not exist, it can read the configuration from
#pod C<~/.pause>, in the same format that L<cpan-upload> requires:
#pod
#pod   user YOUR-PAUSE-ID
#pod   password YOUR-PAUSE-PASSWORD
#pod
#pod If neither configuration exists, it will prompt you to enter your
#pod username and password during the BeforeRelease phase.  Entering a
#pod blank username or password will abort the release.
#pod
#pod You can't put your password in your F<dist.ini>.  C'mon now!
#pod
#pod =cut

{
  package
    Dist::Zilla::Plugin::UploadToCPAN::_Uploader;
  # CPAN::Uploader will be loaded later if used
  our @ISA = 'CPAN::Uploader';
  # Report CPAN::Uploader's version, not ours:
  sub _ua_string { CPAN::Uploader->_ua_string }

  sub log {
    my $self = shift;
    $self->{'Dist::Zilla'}{plugin}->log(@_);
  }
}

#pod =attr credentials_stash
#pod
#pod This attribute holds the name of a L<PAUSE stash|Dist::Zilla::Stash::Login>
#pod that will contain the credentials to be used for the upload.  By default,
#pod UploadToCPAN will look for a C<%PAUSE> stash.
#pod
#pod =cut

has credentials_stash => (
  is  => 'ro',
  isa => 'Str',
  default => '%PAUSE'
);

lib/Dist/Zilla/Plugin/UploadToCPAN.pm  view on Meta::CPAN

#pod
#pod =cut

has upload_uri => (
  is => 'ro',
  isa => 'Str',
  predicate => 'has_upload_uri',
);

#pod =attr retries
#pod
#pod The number of retries to perform on upload failure (5xx response). The default
#pod is set to 3 by this plugin. This option will be passed to L<CPAN::Uploader>.
#pod
#pod =cut

has retries => (
  is => 'ro',
  isa => 'Int',
  default => 3,
);

#pod =attr retry_delay
#pod
#pod The number of seconds to wait between retries. The default is set to 5 seconds
#pod by this plugin. This option will be passed to L<CPAN::Uploader>.
#pod
#pod =cut

has retry_delay => (
  is => 'ro',
  isa => 'Int',
  default => 5,
);

has uploader => (
  is   => 'ro',
  isa  => 'CPAN::Uploader',
  lazy => 1,
  default => sub {
    my ($self) = @_;

    # Load the module lazily
    require CPAN::Uploader;
    CPAN::Uploader->VERSION('0.103004');  # require HTTPS

    my $uploader = Dist::Zilla::Plugin::UploadToCPAN::_Uploader->new({
      user     => $self->username,
      password => $self->password,
      ($self->has_subdir
           ? (subdir => $self->subdir) : ()),
      ($self->has_upload_uri
           ? (upload_uri => $self->upload_uri) : ()),
      ($self->retries
           ? (retries => $self->retries) : ()),
      ($self->retry_delay
           ? (retry_delay => $self->retry_delay) : ()),
    });

    $uploader->{'Dist::Zilla'}{plugin} = $self;
    weaken $uploader->{'Dist::Zilla'}{plugin};

    return $uploader;
  }
);

sub before_release {
  my $self = shift;

  my $sentinel = [];

  for my $attr (qw(username password)) {
    my $value;
    my $ok = eval { $value = $self->$attr; 1 };

    unless ($ok) {
      $self->log_fatal([ "Couldn't figure out %s: %s", $attr, $@ ]);
    }

    unless (length $value) {
      $self->log_fatal([ "No $attr was provided" ]);
    }
  }

  return;
}

sub release {
  my ($self, $archive) = @_;

  $self->uploader->upload_file("$archive");
}

__PACKAGE__->meta->make_immutable;
1;

__END__

=pod

=encoding UTF-8

=head1 NAME

Dist::Zilla::Plugin::UploadToCPAN - upload the dist to CPAN

=head1 VERSION

version 6.037

=head1 SYNOPSIS

If loaded, this plugin will allow the F<release> command to upload to the CPAN.

=head1 DESCRIPTION

This plugin looks for configuration in your C<dist.ini> or (more
likely) C<~/.dzil/config.ini>:

  [%PAUSE]
  username = YOUR-PAUSE-ID



( run in 1.979 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )