Dist-Zilla-Plugin-GitHub-CreateRelease

 view release on metacpan or  search on metacpan

bin/createrelease.pl  view on Meta::CPAN

        };

        #FIXME there must be a better way...
        my $basename = URI::Escape::uri_unescape( File::Basename::basename(URI->new( $url[0])->path));
        $basename =~ s/.git//;
        $self->log("Release will be created using $basename");

        return $basename;
    }

    method get_releases ($repo = '') {
        my %identity = $self->get_identity ($org_id);
        my $r = Pithub::Repos::Releases->new(
            user  => $identity{login},
            repo  => $self->get_repo_name(),
            #token => $identity{token},
        );
        use DDP;
        my $result = $r->list(
        );
        #p $result;
        print $result->count, "\n\n\n";
        use JSON::MaybeXS;
        my $json_with_args = JSON::MaybeXS->new(utf8 => 1);
        my $json = $json_with_args->decode_json($result->_json);
        #my $list = $result->list;
        print "==================================================\n";
        #my @content = $list->raw_content;
        #print $content[0], "\n";
        #print "==================================================\n";
        #foreach my $rel (@list) {
        #    p $rel;
        #    p $json;
        #
        #}

    }

    method create_release ($repo = '') {
        my %identity = $self->get_identity ($org_id);
        my $releases = Pithub::Repos::Releases->new(
            user  => $identity{login},
            repo  => $self->get_repo_name(),
            token => $identity{token},
        );

        require JSON::MaybeXS;
        my $response = $releases->create(
            data => {
            tag_name         => $self->get_version(),
            target_commitish => $branch,
            name             => $self->get_title(),
            body             => $self->get_notes(),
            draft            => $draft ? JSON::MaybeXS::true : JSON::MaybeXS::false,
            prerelease       => $trial ? JSON::MaybeXS::true : JSON::MaybeXS::false,
            generate_release_notes => $github_notes,
            }
        );

        die "Unable to create release for $identity{login}\\$releases->{repo}" if  ($response->code eq '404');
        #die "Validation failed, or the endpoint has been spammed." if  ($response->code eq '422');
        die "login or token invalid for the specified repository: $identity{login}\\$releases->{repo}\n"
            if  ($response->code eq '403');

        if ($response->code ne '201') {
            my $message = $response->raw_content();
            print "message", $message, "\n";
            $message =~ s/\n/ /gm;
            my $error_message  = decode_json $message;
            for my $error (@{$error_message->{errors}}) {
                print "Field: ", $error->{message}, " - ", $error->{code}, "\n";
            }
            die "See information at ", $error_message->{documentation_url}, "\n";
        }

        if (! defined $response->content->{id}) {
            die "Unable to create GitHub release\n";
        }
        $self->log("Release created at $releases->{repo} for $identity{login}");

        $filename = $self->get_dist_filename($self->get_version()) if ! $filename;

        my $release_results;
        if (! -e $filename) {
            use MetaCPAN::Client;
            my $mcpan  = MetaCPAN::Client->new();
            my $dist = Config::INI::Reader->read_file('dist.ini');
            $release_results = $mcpan->release(
            {
                all => [
                        {
                            distribution => $dist->{'_'}{name},
                        },
                    ]
            }
        );

        while ( my $release = $release_results->next ) {
            if ($release->{data}->{version} eq $self->get_version()) {
                use LWP::Simple;
                $filename = $release->{data}->{archive};
                getstore($release->{data}->{download_url}, $filename);

            }
        }
            die "Let's download the file from pause" if ( ! -e $filename);
        }
        my $cpan_tar  = File::Slurper::read_binary($filename);

        my $asset = $releases->assets->create(
                        release_id   => $response->content->{id},
                        name         => $filename,
                        data         => $cpan_tar,
                        content_type => 'application/gzip',
                    );

        my $tag = $self->get_version();
        if ($asset->code eq '201') {
            $self->log("CPAN archive appended to GitHub release: $tag");
        } else {
            $self->log("Unable to append CPAN archive GitHub release: $tag");



( run in 2.447 seconds using v1.01-cache-2.11-cpan-524268b4103 )