My tryst with coala: The Cruise

Anshal Shukla
2 min readJun 27, 2021


It’s been over two weeks since Coding Phase 1 began, and I finally managed to put something on the table. Over the past 15 days, I have been struggling to fix the dependency_management system used by coala, and it looks like I can finally see some success.

What is Dependency Management System?

Dependency Management System provides a Python API for common package managers. It has an interface that describes the dependencies as a piece of software and provides a generic method to install those dependencies on any host operating system.

And it was this cross-platform support that, pardon my language, became a pain in the ass. I started working on it to upgrade it and fix the broken CI/CD pipeline. I planned to improve the pipeline and then move forward by upgrading it and removing the deprecated packages, which turned out to be a menace. After starting, I could fix like 2 out of 9 pipelines relatively quickly and then a couple more with some efforts. Still, despite multiple attempts, things started going awry, with the same error popping up or some of the other pipeline working but at the cost of the other.

What was going wrong?

The dependency_management system was left unmaintained for around two years now which made fixing all the pipeline in their then state almost impossible. The Ubuntu and Arch flavours had a rolling version specification in CI settings, but OpenSUSE and Fedora had strict versioning, and those were quite old and no more supported. Also, ubuntu and arch running on their latest version came with the latest GoLang and rust version in their default package manager, but that was not the case with fedora and OpenSUSE. They installed language versions that were quite old. Thus making it impossible to provide a standard interface for all four operating systems.


So I had to tweak my plan of action and kick-started with dropping support to some of the deprecated unmaintained Linux versions and some package manager, replacing those with the latest Linux versions and more appropriate package manager.


Finally, I could run the pipeline on all four Linux flavours successfully. I squashed all the commits, which were a lot. Since I had none of the Linux version used by the pipeline on my local machine, I had to depend on the GitLab environment to test the changes. This turned out to be a major bummer in the phase, and there were times when I had to rerun the whole 20-minute pipeline because of an error occurring towards the end of the pipeline only to realize that it wouldn’t work, and now I’ll have to go about making a few more changes.
I even had to make a few last-minute modifications to the template repository for some cases, which was pretty tedious since I had to make separate changes for testing and slightly different versions for the PR.

I can finally simmer down a little now that it is done, while I hope that it gets merged soon without any more predicaments.