Software dependencies
Inspired by the graphic „Dependency“, today we briefly present the most important facts about the development process for the prometheus software.
In the current main development stack we have ruby on rails 7.1, ruby 3.2, elasticsearch 8.7, mariadb 10.11 and apache 2.4 alongside the other components imagemagick for processing images, ffmpeg for processing videos and nokogiri for processing most metadata imports. First, we test all changes and new features on our test suite, which consists of two parts. On the one hand, we maintain a unit test suite with Minitest to test important components of our application in isolation, such as the authorization model and image processing. Secondly, our e2e suite with selenium-webdriver simulates real users launching a browser and using the Prometheus application. No code is ever deployed to our servers without passing all tests first.
To ensure that we can easily onboard new team members while maintaining a consistent coding style, we use rubocop during our test runs to enforce a few rules. Similarly, we perform security audits with tools like Brakeman. During development, we use a number of debuggers and profilers to isolate bottlenecks and fix hard-to-find bugs.
We operate the image archive on three servers with a total of 12 CPUs and 48G RAM. Recently, these and our other servers were migrated to Debian 12, the basis for many popular Linux distributions such as Ubuntu or Mint.