Recently I wrote a small Dist::Zilla plugin to help with the problem of dependencies being old in modules I author.
I use update-cpanfile to check dependencies in projects I write using a cpanfile (and carton); I wanted a tool to do the same thing with libraries I write.
It was pretty simple to do over a couple of evenings; and worked really well; a trial version is on Cpan now at Dist::Zilla::Plugin::Test::Prereqs::Latest.
Using it is really simple you just add [Test::Prereqs::Latest]
in your dist.ini and then when you run dzil test
it will add and run a test file (xt/author/prereqs-latest.t
) which checks the version of each module in the [Prereqs]
secion of the dist.ini and fail if the version you have specified is lower than the latest CPAN.
The code is pretty simple, using existing work by HITODE whose update-cpanfile I use regularly to help keep dependencies up to date in projects I have that use cpanfile and carton.
use strict;
use warnings;
use App::UpdateCPANfile::PackageDetails;
use Dist::Zilla::Util::ParsePrereqsFromDistIni qw(parse_prereqs_from_dist_ini);
use Test::More;
my $prereqs = parse_prereqs_from_dist_ini(path => 'dist.ini');
my $checker = App::UpdateCPANfile::PackageDetails->new;
for my $key (sort keys %$prereqs) {
for my $req (sort keys %{$prereqs->{$key}->{requires}}) {
my $current_version = $prereqs->{$key}->{requires}->{$req};
$current_version =~ s/v//g;
my $latest_version = $checker->latest_version_for_package($req) || '0';
my $out_of_date = ($latest_version <= $current_version);
ok( $out_of_date,"$req: Current:$current_version, Latest:$latest_version");
}
}
It's simplistic, but works well. If the version in the dist.ini is lower than the version on CPAN it fails the test and tells you as much.
Once written, I was easily able to test it against a couple of modules I maintain by installing the package with dzil install
then in the other module I add [Test::Prereqs::Latest]
to the dist.ini and ran dzil test
and it worked.
Once I had done basic testing locally; was able to create a trial release and upload to CPAN with dizil release --trial
which built and uploaded the distribution.
Of course CPAN is amazing, so shortly afterwards the cpan testers started discovering the module and testing that it built on a variety of versions of Perl and a variety of platforms. People love GitHub actions but cpan testeers was first and I did literally nothing to get all this amazing testing without any configuration work, nothing... it just happens. It's amazing, seriously amazing.
The module is not ready for a proper release, but it's been nice to "scratch my own itch" so to speak.
Top comments (0)