Skip to content

Commit

Permalink
Fill stars, issues for modules on cpan
Browse files Browse the repository at this point in the history
  • Loading branch information
titsuki committed Apr 15, 2018
1 parent 43d5a15 commit 2b8e1b9
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 4 deletions.
49 changes: 49 additions & 0 deletions lib/ModulesPerl6/DbBuilder/Dist.pm
@@ -1,6 +1,9 @@
package ModulesPerl6::DbBuilder::Dist;

use ModulesPerl6::DbBuilder::Log;
use ModulesPerl6::DbBuilder::Dist::Source::GitHub;
use Mojo::File qw/path/;
use Mojo::Util qw/decode/;
use Mew;
use Module::Pluggable search_path => ['ModulesPerl6::DbBuilder::Dist::Source'],
sub_name => '_sources',
Expand All @@ -9,9 +12,19 @@ use Module::Pluggable search_path
=> ['ModulesPerl6::DbBuilder::Dist::PostProcessor'],
sub_name => '_postprocessors',
require => 1;
use Pithub;

has [qw/_build_id _logos_dir _meta_url/] => Str;
has _dist_db => InstanceOf['ModulesPerl6::Model::Dists'];
has _token => Str, (
is => 'lazy',
default => sub {
my $file = $ENV{MODULES_PERL6_GITHUB_TOKEN_FILE} // 'github-token';
-r $file or log fatal => "GitHub token file [$file] is missing "
. 'or has no read permissions';
return decode 'utf8', path($file)->slurp;
},
);

#########################

Expand Down Expand Up @@ -56,6 +69,7 @@ sub _load_from_source {
dist => $dist,
)->process;
}
$self->_fill_from_github($dist);

delete $dist->{_builder};
return $dist;
Expand All @@ -67,4 +81,39 @@ sub _load_from_source {
return;
}

sub _fill_from_github {
my ($self, $dist) = @_;
return unless ($dist->{dist_source} eq 'cpan');

if ($dist->{repo_url} =~ m#(?<protocol>[^/]+)://github.com/(?<user>[^/]+)/(?<repo>[^/]+).git#) {

my $pithub = Pithub->new(
user => $+{user},
repo => $+{repo},
token => $self->_token,
ua => LWP::UserAgent->new(
agent => 'Perl 6 Ecosystem Builder',
timeout => 20,
),
);

my $repo = $self->_repo($pithub->repos->get) or return;
$dist->{stars} = $repo->{stargazers_count};
$dist->{issues} = $repo->{open_issues_count};
$dist->{stargazer_url} = $repo->{html_url} . '/stargazers';
$dist->{issue_url} = $repo->{html_url} . '/issues';
}
}

sub _repo {
my ( $self, $res ) = @_;

unless ( $res->success ) {
log error => "Error accessing GitHub API. HTTP Code: " . $res->code;
return
}

return $res->content;
}

1;
2 changes: 2 additions & 0 deletions lib/ModulesPerl6/DbBuilder/Dist/Source/GitHub.pm
Expand Up @@ -78,6 +78,8 @@ sub load {
%$dist,
dist_source => 'github',
url => $repo->{html_url},
stargazer_url => $repo->{html_url} . '/stargazers',
issue_url => $repo->{html_url} . '/issues',
repo_url => $repo->{html_url},
issues => $repo->{open_issues_count} // 0,
stars => $repo->{stargazers_count} // 0,
Expand Down
4 changes: 3 additions & 1 deletion lib/ModulesPerl6/Model/Dists.pm
Expand Up @@ -77,6 +77,8 @@ sub add {
$dist->{date_updated} ||= 0;
$dist->{date_added} ||= 0;
$dist->{dist_source} ||= 'unknown';
$dist->{stargazer_url} ||= 'unknown';
$dist->{issue_url} ||= 'unknown';
$dist->{files} //= '{}';

my $res = $db->resultset('Dist')->update_or_create({
Expand All @@ -89,7 +91,7 @@ sub add {
dist_build_id => { id => $dist->{build_id} },
(map +( $_ => $dist->{$_} ),
qw/name meta_url url repo_url description stars issues
date_updated date_added appveyor_url files/,
date_updated date_added appveyor_url files stargazer_url issue_url/,
),
});

Expand Down
2 changes: 2 additions & 0 deletions lib/ModulesPerl6/Model/Dists/Schema/Result/Dist.pm
Expand Up @@ -11,6 +11,8 @@ column appveyor_status => { data_type => 'text', is_foreign_key => 1 };
column appveyor_url => { data_type => 'text', };
column url => { data_type => 'text' };
column repo_url => { data_type => 'text' };
column stargazer_url => { data_type => 'text' };
column issue_url => { data_type => 'text' };
column description => { data_type => 'text' };
column files => { data_type => 'text' };
column stars => { data_type => 'integer' };
Expand Down
6 changes: 3 additions & 3 deletions templates/root/search.html.ep
Expand Up @@ -51,13 +51,13 @@
><%= $dist->{name} %></a>
<b><%= $dist->{description} %></b></h2>
<ul>
% if ($dist->{dist_source} eq 'github') {
% if ($dist->{stargazer_url} ne 'unknown') {
<li title="Number of likes" data-toggle="tooltip"
><a href="<%= $dist->{url} . '/stargazers' %>"
><a href="<%= $dist->{stargazer_url} %>"
><i class="glyphicon glyphicon-star"></i>
<%= $dist->{stars} %></a></li>
<li title="Number of open Issues" data-toggle="tooltip"
><a href="<%= $dist->{url} . '/issues' %>"
><a href="<%= $dist->{issue_url} %>"
><i class="glyphicon glyphicon-info-sign"></i>
<%= $dist->{issues} %></a></li>
% } else {
Expand Down

0 comments on commit 2b8e1b9

Please sign in to comment.