diff --git a/lib/Copr/Api.pm b/lib/Copr/Api.pm new file mode 100644 index 0000000..ac0bea6 --- /dev/null +++ b/lib/Copr/Api.pm @@ -0,0 +1,54 @@ +package Copr::Api; +use strict; +use warnings; +use LWP::Simple; +use JSON; +# this package is not available on Debian +use RPM::VersionCompare; + +my $copr_base_url = "https://copr.fedorainfracloud.org"; + +sub get_project_id { + my ( $user, $repo ) = @_; + my $project_json = get("$copr_base_url/api_2/projects?owner=$user&name=$repo"); + my $json = JSON->new->allow_nonref; + my $project_data = $json->decode($project_json); + return $project_data->{projects}[0]->{project}->{id}; +} + +sub get_project_builds { + my ( $user, $repo ) = @_; + my $project_id = get_project_id($user, $repo); + my $builds_json = get("$copr_base_url/api_2/builds?limit=0&project_id=$project_id"); + my $json = JSON->new->allow_nonref; + my $builds_data = $json->decode($builds_json); + return @{$builds_data->{builds}}; +} + +# gets all latest builds of each package +sub get_latest_packages { + my ( $user, $repo ) = @_; + my %latest_packages; + my @builds = get_project_builds($user, $repo); + foreach my $build (@builds) { + next if $build->{build}->{state} ne "succeeded"; + my $package_name = $build->{build}->{package_name}; + my $package_version = $build->{build}->{package_version}; + my $package_submitter = $build->{build}->{submitter}; + if(!(defined $latest_packages{$package_name})) { + $latest_packages{$package_name}{version} = $package_version; + $latest_packages{$package_name}{submitter} = $package_submitter; + } + elsif(RPM::VersionCompare::rpmvercmp($latest_packages{$package_name}{version}, $package_version) == 1) { + next; + } + else { + $latest_packages{$package_name}{version} = $package_version; + $latest_packages{$package_name}{submitter} = $package_submitter; + } + } + + return %latest_packages; +} + +1; -- libgit2 0.21.2