Scorch Titan icon

Papa

A Command Line Mod Manager

repo

What it is

papa is one of my favorite projects that I've worked on. In short, it is a package manager for Northstar, a Titanfall 2 modding framework. It is written in Rust 🦀 and has even spawned a crate, thermite, that other developers can use to make their own Northstar mod managers.

What it does

Perhaps unsurpisingly, the main goal of papa is to download packaged mods from some kind of repository, then extract the files into the correct locations so that they can be loaded for use in the game. So long as the authors of the mods format their zipped files correctly (apparently a more demanding ask than I'd have thought), the whole process is fairly straight forward. So rather than settle for a simple automation of a doable but tedious manual task, I set out to build a real package manager, a la Fedora's dnf.

At the moment papa supports full text search for mods, importing and exporting lists of mods, caching of downloaded packages, and even cargo-style external subcommands to allow for a kind of plugin system. I think papa is the most feature-complete project I've worked on, and is a good example of what I'm capable of.

What it taught me

The most important experience I got (and am still getting) out of writing papa actually has little to do with the code itself. Rather, it has to do with all of the stuff around the code, namely CI/CD. When I released the first "public" version of papa, I built each binary or bundle on my own machines and uploaded the resulting artifacts to the Github release. Not the most reliable or efficient way of doing things, but at the time I had little to no real experience using any kind of CI outside of setting up the default 'Rust build & test' action just to be able to put a badge on the README.

I quickly realized that I would need to figure out how to use Github Actions if I wanted the process of building and uploading binaries to be sustainable. Now I have actions set up to create a draft release, upload artifacts for the supported platforms, and even generate release notes from commits thanks to git-cliff.