Papa
A Command Line Mod Manager
repoWhat 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.