App-KGB

 view release on metacpan or  search on metacpan

script/kgb-ci-report  view on Meta::CPAN

#!/usr/bin/perl

use strict;
use warnings;

use DBD::Pg;
use DBI;
use Dpkg::Version;
use Getopt::Long;
use JSON::XS qw(decode_json);
use LWP::UserAgent;

my ( @opt_maintainer, $opt_kgb_config );
my $opt_verbose      = 1;
my $opt_distribution = 'debian';
my $opt_release      = 'sid';
my $opt_kgb_client   = 'kgb-client';

GetOptions(
    'm|maintainer=s' => \@opt_maintainer,
    'kgb-config=s'   => \$opt_kgb_config,
    'verbose+'       => \$opt_verbose,
    'quiet'          => sub { $opt_verbose = 0 },
    'distribution=s' => \$opt_distribution,
    'release=s'      => \$opt_release,
    'kgb-client=s'   => \$opt_kgb_client,
) or exit 1;

die "--maintainer is mandatory" unless @opt_maintainer;
$opt_verbose = 1 if not $opt_verbose and not $opt_kgb_client;

sub verbose {
    return unless $opt_verbose;

    warn @_, "\n";
}

my $db = DBI->connect( 'dbi:Pg:host=udd-mirror.debian.net;dbname=udd',
    'udd-mirror', 'udd-mirror', { RaiseError => 1 } );
verbose('Connected to UDD');
my $st
    = $db->prepare(
          "with a as (select distinct source, source_version\n"
        . 'from packages_summary where maintainer_email in ('
        . join( ', ', ( ('?') x scalar(@opt_maintainer) ) )
        . ") and distribution=? and release=?)\n"
        . 'select source, max(source_version) from a group by 1'
    );
$st->execute( @opt_maintainer, $opt_distribution, $opt_release );

my $rows = $st->fetchall_arrayref;
$db->disconnect;

verbose( scalar(@$rows) . ' packages found in UDD' );

my %wanted_packages =
    map { ( $_->[0] => Dpkg::Version->new( $_->[1] ) ) } @$rows;
my $maintained = scalar @$rows;

undef $rows; # free the memory

my $debci_status_url = 'https://ci.debian.net/data/status/unstable/amd64/packages.json';

my $ua = LWP::UserAgent->new( agent => "$0" );
my $res = $ua->get($debci_status_url);
unless ($res->is_success) {
    die "Error retrieving $debci_status_url: ".$res->status_line;
}

my $json = decode_json( ${$res->content_ref} );



( run in 0.607 second using v1.01-cache-2.11-cpan-13bb782fe5a )