In this series of post I’ll - this time - explain how to make Hudson create coverage reports for Perl projects, first of all you need to have Devel::Cover installed and Hudon’s Plot Plugin.

Basically to generate plots all you need is to create a file somewhere containing nothing but YVALUE=”XX.X” after each build that’s all Plot Plugin needs to generate charts.

We will use the following script to create such files I’ve named it cover_plot and upload it to the repository but it can be anywhere as long as Hudson can has access to it


use strict;

# Parse cover output
while (<STDIN>) {
    next if ( $_ !~ /^Total/ );


    my $statement_cover = $1;
    my $branch_cover    = $2;
    my $condition_cover = $3;
    my $sub_cover       = $4;
    my $all_cover       = $5;

    # Write file that PlotPlugin can understand
    write_file( '', $statement_cover );
    write_file( '', $branch_cover );
    write_file( '', $condition_cover );
    write_file( '',  $sub_cover );
    write_file( '',  $all_cover );

sub write_file {
    my ( $filename, $value ) = @_;
    my $file;

    open( $file, "> $filename" ) or die 'Can\'t open file';
    print $file "YVALUE=$value\n";
    close($file) or die 'Can\'t close file';

Then all we need to do is change Hudson’s execute shell command and include the following

# Run tests and coverage
cover -delete
          prove --formatter TAP::Formatter::JUnit -r t/ > build_test.xml

# Generate coverage html & plots
cover -silent -summary -outputdir coverage | ./hudson/cover_plot 

Now let’s configure Hudson to pickup those files a create a chart with the values…

Hudson's cover config

We’re all set, now if you click on Build now and wait until it finishes you will discover a new button in the left bar called Plots and if you click there you should see something like

Coverage Plot

Another tip: you can publish the full coverage report by configuring the Publish documents option in Hudson and pointing to the coverage folder.


comments powered by Disqus