Time to take a mudbath

At kooaba we used cijoe as our CI server. It's really simply and easy to set up. However, it can build only a single project and its web interface only shows the latest build, there is no way to see the status of individual branches.

I looked for alternatives but then decided to write my own one. The rough spec was: Use Node.js, MongoDB as the database, allow configuring projects through a web interface and seamless integration with GitHub. I quickly had a working prototype: mudbath. That was nine months ago.

About three months ago, when GitHub introduced the commit status api, I updated mudbath to report the status to GitHub. But with that change, I had no reason to look at the mudbath web interface anymore: If I wanted to see if a branch is green or red, I'd look at GitHub. One less webpage to bookmark, instant win.

But what is mudbath without the web interface? It's a simple web server that accepts POST requests, spawns a child process and reports its exit status to GitHub. Instead of stripping down the Node.js project, I started from scratch. This time the language of choice was Haskell. And while at it, I also dropped the database. One less component to maintain and worry about.

The result is the haskell branch in the mudbath github repo. It's not up to par with the original mudbath yet, certain options are hardcoded. This is mainly because I haven't looked yet into commandline or config file parsing in Haskell. But it already now feels much more solid than the old project. I don't have to worry about typos or wonder of which type function arguments are, which fields they have or what I can do with them. The type system guides me through the code and the compiler warns me if I make a mistake.

Expect more haskell code from me in the future.