Hello from Platform Engineering Ops! Once a month we highlight one of our projects to help the Mozilla community discover a useful tool or an interesting contribution opportunity. This month's project is Balrog!
What is it?
Balrog is the software that runs the server side component of the update system used by Firefox and other Mozilla products. It is the successor to AUS (Application Update Service), which did not scale to our current needs nor allow us to adapt to more recent business requirements. Balrog helps us ship updates faster and with much more flexibility than we've had in the past.
How it works
At the heart of Balrog is its Rules table. The Rules allow us to filter incoming update requests by their product, channel, and other fields and using that information, respond with the correct Release. One of the key design goals of Balrog is to make these Rules easy for humans to understand and manipulate, while providing enough flexibility to meet business requirements.
Releases are the other major part of Balrog. These are models that contain metadata (platforms, locales, payload URLs, etc.) about a set of binaries that we ship (eg: Firefox 49.0).
You can learn more about Balrog's architecture and how it works on the main wiki page.
Earlier this year we modernized Balrog's toolchain, and it's now in a place where anyone with Python or JS experience should be able to contribute succesfully. Balrog has excellent unit test coverage, which will help you give confidence in any changes you make.
If you have Docker installed already, you can play with it with a few simple commands:
git clone https://github.com/mozilla/balrog cd balrog git submodule init git submodule update docker-compose up
Once running, you can access the admin interface at http://localhost:8080. You should see a splash page like this:
Good First Bugs
We do our best to always have good first bugs ready for new contributors. Here's a few of the current ones (you can find the rest on the wiki):
- Support substitution in DesupportBlob urls
- Handle requests that don't substitute %PRODUCT%, et. al.
- Disallow deletion of releases that have a rule.mapping or rule.whitelist pointing at them
- Replace "add a new user" with "add a new permission"
If you have any questions or need help you're welcome to join us in #balrog on irc.mozilla.org - we're happy to help!