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
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
prove -l as in the example, but since Clone is a compiled module, I
needed to use
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
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
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
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!