Perl Toolchain Summit 2018

The Perl Toolchain Summit (PTS) is a yearly event that gathers the maintainers and contributors to the Perl Toolchain for four days in one room. Having all the people with both the knowledge and access to work on this critical corner of Perl all together in one place always leads to progress which is much more than the sum of those individual contributions. What is the Perl Toolchain? It is any part of Perl which is involved with modules, from creating, authoring, testing, uploading, distributing, loading, reporting on tests and test coverage, etc, etc. Projects like CPAN clients (cpanm, cpm), aggregation sites like MetaCPAN, CPANTesters, cpancover, and critical infrastructure like PAUSE and modules like Test::More/Test2 and many others are represented.

This year’s event was hosted in Oslo, by the indomitable Salve Nilsen, who first started this event in 2008 ten years ago, back when it was called Perl Quality Assurance Hackathon (QAH). Together with local organizers Stig Palmquist and other members, as well as remote organizers Philippe Bruhat, Neil Bowers, and Laurent Boivin, (and others as well, I’m sure) it was again a wonderful event!

This was my third year in attendance. The first two years I attended, I had been vaguely a part of several projects and was useful as a “floating helper” to projects that had need during the summit. However at the end of last year, Paul Johnson (PJCJ), author and maintainer of Devel::Cover asked if I could help with moving to being backed by a job queue. The site periodically grabs the recent releases from CPAN, runs their tests, and then displays their test coverage reports. While I was happy to give it a look, it had been too late in the event to really make a reasonable effort.

This year, I came with that goal, to help Paul improve the site to both be more responsive to uploads and handle more load using the Minion job queue. Honestly I think the biggest joy I got this year was seeing how happy Paul was that several people had volunteered to help with Devel::Cover related bits. Paul does great work and too often is left to do it alone. I was happy to help put that smile on his face.

I won’t break it down by day as others have, since this was the majority of what I worked on, however I can give the highlights. The first few days were finding and separating the code that actually runs the coverage reports for an individual release from the code that watched for releases and iterated through them. Once these were detangled, writing the job queue wrappers were fairly straightforward.

The next block of time was spent trying to get a reliable real-time-ish feed of CPAN uploads. While I think I know where that will be available, it isn’t working right yet, so in a funny turn of fate, I also implemented what had basically been the site’s existing polling algorithm. Since it is queue backed, it at least has a little added robustness and will make the switch over to a push-feed a matter of a few lines of code change.

Finally we did some proof of concept deployments and identified some edge cases that I still need to address. Once those are done and a bit of documentation written, I hope that Paul can flip his site over to the queue backed version fairly seamlessly.

Of course, some other cross-pollination work does happen in a group like this, so I didn’t only do cpancover. I did a little work with the MetaCPAN team, especially Mickey Nasriachi, on updating their version of Minion and testing their developer vagrant system. Mickey especially seemed to like the new admin console. I helped kick off some work by Marcus Ramberg on a project of generating CPAN River statistics using Neo4j. I even started to write a bit of OpenAPI spec for some of the high-level MetaCPAN api endpoints, which will be a work-in-progress for all but the easiest bits.

I also discussed the state of boolean objects Tina Mueller and Kenichi Ishigaki. These objects are important for interoperability of data serializers like JSON and YAML. Interestingly since the inclusion of JSON::PP into the Perl core, the CPAN serializers have been standardizing around using its JSON::PP::Boolean class, however that seems like an awkward thing to call an interoperable boolean (especially once you get away from JSON) and we are hoping that there might be something better in the (near?) future.

Thank you, sponsors!

This is always an amazingly productive event and in my opinion, if your company is looking to help Perl, there are very few better ways to do so than sponsoring this event. This years sponsors are:

NUUG Foundation, Teknologihuset,, cPanel, FastMail, Elastic, ZipRecruiter, MaxMind, MongoDB, SureVoIP, Campus Explorer, Bytemark, Infinity Interactive, OpusVL, Eligo, Perl Services, Oetiker+Partner.

I also want to thank my employed ServerCentral for sponsoring my time and travel costs!

Leave a comment

About Joel Berger

user-pic As I delve into the deeper Perl magic I like to share what I can.