Api.pm
1.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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;