For my programming languages course, I’ve had to develop two small libraries (written in Prolog and Common Lisp) to handle multivariate polynomials.
Whereas there are some tools which are better suited to accomplish what mentioned above, I’d still like to pursue the goal using Jenkins. This way, projects would not be cluttered with testing-related code.
This is really straightforward. I’ve installed Jenkins on my personal server and configured nginx to serve it at https://jenkins.chiodini.org.
Jenkins with Prolog and Lisp
There are Jenkins plugin for many languages. Unfortunately, due to the low popularity of Prolog and Lisp, there is not a dedicated plugin for them. This is the point at which things are getting interesting.
Since Jenkins understands JUnit results, which are XML files, we could simulate the output of JUnit. I’ve found a brief description on this StackOverflow answer.
A few line of bash then suffice to reach our goal.
The file tests.pl consists in a list of goals, line separated, which are expected to succeed (thanks, unification!). The script runs
swipl in quiet mode using
mvpoli.pl as source and then executes the query. If the output is
false. something bad happened and the test is marked as failed. Otherwise the test is considered to be successful.
Lisp testing is achieved in a similar manner. Tests are listed in
tests.lisp, with the difference that we cannot rely on unification this time. Instead, functions are wrapped within
equal along with their expected result. This drastically simplifies the script, as it needs to run
sbcl and check only for
NIL (i.e., the result of
GitHub hooks and conclusion
Jenkins was configured to run the bash script (for the appropriate language). Its output consists in a file
report.xml which is in turn parsed to display tests in a nice interface.
To reach automation, GitHub hooks were configured to trigger Jenkins after every push on the repositories. The system worked really smoothly and greatly helped during the development of the libraries.