When I saw the CPAN PR Challenge come up in my feed, I signed up immediately. I love giving back to FOSS and this challenge would push me to make contributions that are outside of the usual software that I contribute to.
For January, I was assigned Clone. I looked at the reverse dependencies and saw 181 packages. I immediately thought to myself, "I'd better be careful. I don't want to break things.". This means that testing is very important for this package.
I e-mailed the maintainer of Clone, Breno G. de Oliveira (garu), about my assignment and he shot me back an lengthy e-mail with all the things I could do. Some of them were easy, such as:
- fix typos,
- add continuous integration with Travis-CI, code coverage with Coveralls, and adding badges for each of those.
Others were a bit more involved:
- benchmarking against other packages such as Clone::PP and Storable,
- adding more tests for different types of Perl variables,
- go through the bug queue and fixing the open tickets.
I went for the easy ones first. I knew that adding the Travis-CI integration
was just a matter of creating a .travis.yml
file, but what actually goes in
that file can vary quite a deal. I had noticed that haarg
had created a set of helper scripts
that can grab various pre-built Perl versions
and run tests against them all.
I cloned the Clone repository and copied over the example .travis.yml
:
language: perl
perl:
- "5.8" # normal preinstalled perl
- "5.8.4" # installs perl 5.8.4
- "5.8.4-thr" # installs perl 5.8.4 with threading
- "5.20" # installs latest perl 5.20 (if not already available)
- "blead" # install perl from git
matrix:
include:
- perl: 5.18
env: COVERAGE=1 # enables coverage+coveralls reporting
allow_failures:
- perl: "blead" # ignore failures for blead perl
before_install:
- git clone git://github.com/travis-perl/helpers ~/travis-perl-helpers
- source ~/travis-perl-helpers/init
- build-perl
- perl -V
- build-dist
- cd $BUILD_DIR # $BUILD_DIR is set by the build-dist command
install:
- cpan-install --deps # installs prereqs, including recommends
- cpan-install --coverage # installs converage prereqs, if enabled
before_script:
- coverage-setup
script:
- prove -l -j$((SYSTEM_CORES + 1)) $(test-dirs) # parallel testing
after_success:
- coverage-report
and enabled my fork of Clone in the Travis-CI and Coveralls settings.
After pushing this, the tests ran, but I kept seeing n/a
code coverage on
Coveralls. I was very confused because the code coverage was working just fine
locally. I jumped on IRC and chatted with haarg. He pointed out that I was
using prove -l
as in the example, but since Clone is a compiled module, I
needed to use prove -b
.
Oh. Silly me! I had been using prove -b
locally, but never changed the
.travis.yml
file. That serves me right for copying-and-pasting without
looking! Something good came out of it though: this ticket
for Test::Harness
has suggestions that will help catch this error if anyone else
makes the same mistake.
haarg also pointed me to an even simpler .travis.yml
file
that he was working on that just had the lines
before_install:
- eval $(curl https://travis-perl.github.io/init) --auto
and a list of the Perl versions to test. I used that and ran it through Travis-CI and everything just worked!
Now all I had to do was grab the HTML for the badges and put them in the POD
and Markdown. I went to the Travis-CI and Coveralls pages and copied the
Markdown for those badges and then went to http://badge.fury.io/for/pl and
entered in Clone
to get a version badge for Clone on CPAN.
I then made a few grammar fixes and converted the POD into Markdown for the README and I was done!
The pull request with my changes is at https://github.com/garu/Clone/pull/4 and my changes are in Clone v0.38.