From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

use strict;
# use raw ES filter on a { match_all => {} } query
# find 'latest' status releases with at least 700 failing tests
# which consist at least 50% of their overall number of tests.
my $release = MetaCPAN::Client->new->all(
'releases',
{
es_filter => {
and => [
{ range => { 'tests.fail' => { gte => 700 } } },
{ term => { 'status' => 'latest' } }
]
},
fields => [qw/ name tests /],
}
);
while ( my $r = $release->next ) {
my $fail = $r->tests->{fail};
my $all = 0; $all += $_ for @{ $r->tests }{qw/pass fail na unknown/};
($fail / $all) >= 0.5 and printf "%4d/%4d: %s\n", $fail, $all, $r->name;
}