Free the products of your CDash build-test cycles!

Kitware has developed a new approach for the community-wide distribution of the executables, packages, and data created during automated software testing. This new approach is enabled by a merger of our CMake, CDash, and Midas technologies.

Already, CMake and CDash enable projects to be automatically built, tested and packaged on any number and variety of client dashboard machines. Error and warning messages as well as various statistics are collected during the CMake build-test cycles and are reported to and displayed on the project’s CDash server.

The challenge with the current CMake-CDash setup is that executables, packages, and data generated by client dashboard machines remain only on those machines – those products represent a valuable end-user resource that is hidden from the community.  To right this wrong, we have developed a method for freeing those products for community-wide distribution. Via Kitware’s Midas, those products are archived, indexed, and made available for search and/or download over the web or over any of the other APIs provided by Midas. 

This new product distribution system is intended to provide users with easy access to nightly and stable versions of executables/packages built for their platforms by a project’s approved client dashboard machines. For example, Fig. 1 shows an instance of the new CDash download module for Midas that has been populated with Slicer packages submitted from client dashboard machines. The key features of this page are as follows:

  1. The Midas module parses the filenames and metadata sent by the CDash client using Midas API (Fig. 2) to group the uploaded executables by OS, software version, and ctest build type (experimental or nightly);
  2. The module automatically detects the OS of the person browsing this page and defaults to displaying the executable appropriate for their OS;
  3. If not specified at upload time, an administrator can declare a particular executable to be a release version, and it will be labeled and maintained as such. 

http://slicer.kitware.com

Figure 1. The Slicer download page at Kitware is hosted by a Midas installation, running a new package archiving module. Its contents (i.e., installable Slicer packages) are automatically added by authenticated client machines as part of Slicer’s CDash build-test-package system.

 

Figure 2. Midas API allowing to upload packages.


Download Statistics from Slicer by Location and Date

Figure 3. Download statistics are gathered and reported by location and by daily totals.

 

The client and server modules that were written for this effort could easily be extended to work with other projects’ packages and data.  Work is underway to extend this system to also host doxygen documentation and other data (e.g., massive volumetric images) generated during testing / client-side processing.

 

For more information on our Midas data and executable hosting system,
please contact the Midas development team at midas@public.kitware.com.

2 Responses to Free the products of your CDash build-test cycles!

  1. Will Schroeder says:

    How long are the executables, etc. kept around? When are they deleted?

  2. Jean-Christophe Fillion-Robin says:

    For the moment, the executable are by default kept around “forever”. Manual maintenance is required to delete old experimental and nightly packages.

    The idea would be to implement “cleaning rule” as follow:
    1) Never delete package tagged as release
    2) Delete all nightly/experimental packages older than two weeks expect the first of each month.
    3) Packages older than one year would be all deleted.

    These rules would be configurable on a per-project basis.

    Later on, if project want to implement very custom “cleaning” rule, we could also think to provide hook (similarly to what’s done on github [1]).

    Note also that the concept of hook could be extended to “post-upload”, or any other Midas action.

    [1] http://help.github.com/post-receive-hooks/

Questions or comments are always welcome!