Ranking CPAN dists for the PR Challenge

CPAN Lotteryranking Mon 19 January 2015

A key part of the Pull Request challenge is deciding which CPAN distributions to hand out each month. In this post I'll describe the way I rank distributions, with the highest-ranking previously-unassigned dists handed out each month. You can browse the list of ranked distributions. This is still very much a work-in-progress — I'm looking for input on the criteria used to 'score' distributions.

Here's the general approach:

The rest of this post will go into each step in a bit more detail.

CPAN distributions that have a github repo

First I build a list of all CPAN distributions which have metadata giving a github repo. I wrote a perladvent article on how to do that using the MetaCPAN API.

But it turns out that there are a good few (roughly 300) dists which list a github repo that is no longer there. So then I use URL::Exists (which I wrote because I couldn't find it on CPAN) to check whether each repo exists. If it doesn't, then the dist is excluded from assignment, but I'll publish a list of those dists, since they're possibly candidates for getting back on github.

Finally, if the dist has the x_deprecated field in its metadata, marking it as deprecated, then it is also excluded from the list.

Calculating a score for each dist

There are two types of factor considered: (1) is it a worthy dist to assign (e.g. used by other dists)? (2) are there things that could be usefully done? For now both types of factors are mashed together to produce a single score.

Here are the factors used to currently calculate the score:

Used by other CPAN dists1
Has issues on RT1 - 3
Has CPAN Testers fails1
CPANTS warnings1-2
Has test.pl in topdir1
Author encourages PRs1
Module uses Any::Moose (which is deprecated)1
Partially deprecated1

Notes on the above:

Thoughts on additional things to score a dist on. These aren't definite, just thoughts, which I'm looking for feedback on:

When sending people their assigned dists, the email will list known specific issues, essentially giving them pointers on things to do in a pull request.

Please: add comments with lots of ideas for additional ranking factors.

Assigning dists

When assigning dists to participants, the following rules apply:

comments powered by Disqus