Hm. Well. Been a while.
Remember how I said in my last post that it’d been a shitty few weeks? Yeah, that didn’t get any better. For a long time afterwards.
But I’m back! Hopefully for real, but who knows? The key, I think, is in the title of this post. Yup, that’s right, yak shaving. How is that the key, I (don’t) hear you ask? Well, I’d been having a lot of difficulty motivating myself to do anything, in part because the things I wanted to do (on those rare occassions where I wasn’t completely crippled) were “useless”. So I felt guilty in a weird way for wanting to do them, when clearly I should do something more useful.
Well, fuck it. If the alternative is not doing anything at all, I’m gonna do something useless.
Like making my own build system in Rust! Well, it’s really not what one would consider a build system, more of a CI system. Except right now it’s not even that.
…Maybe I should back up a bit. For a while now I’ve had a bunch of things that I’ve written (like that prose thingy I’ve mentioned before) that I would like to have CI-ish for, but my requirements are a bit difficult. The first and most strict is the server itself. I host everything on this box, which is a tiny little thing. Specifically, a dual-core 1.6 GHz x64 processor with a whopping 2GB of RAM. And most of that is going to the Minecraft instance. So that pretty much rules out all of the CI (and code hosting) options out there. Jenkins is Java and Travis is Ruby, both designed to run on dedicated servers with way more available than this has. The galling part is that they don’t need it. At all.
So I’m writing my own. Right now it basically just runs a job in a clean environment (good god that alone is more than Jenkins does by default) then archives std{in|out}, the exit code, and anything you specify. There’s no fancy web UI or even a central daemon. It just does the damn run and keeps the results. It’s configured through a central toml file and one per job, all laid out in a simple directory structure that’s intended to be checked into source control.
Why Rust? Because I wanted something that I knew would work. Something that accounts for all errors along all stages, no mystery failures due to black magic and fuck you.
…And because I’ve been wanting an excuse to use Rust, and this seemed appropriate. But moving on!
I think it’s usable for what I want, but I’ll be figuring that out over the next few days. As I use it for existing projects I’ll iterate on it and add whatever I need.
So what’s next on my list? Thanks for asking! What’s that, you didn’t ask? Too bad, I’m telling you anyways.
Starting soon I’ll be back to the prose tool for a while. Honestly, it’s made a lot of progress that I haven’t blogged about, and it’s close to actually usable. Sorta. It has been up on a subdomain here (that I won’t disclose just yet) for a while. Once the automated build for it is in place, I’ll be making a point to use it as much as I can.
I suspect after that I’ll start on something for public code hosting on this box (that is to say, publically hosting my code, not random peoples’). I’ve looked into what’s out there, and it either doesn’t do what I want or is a massive monstrosity of crap I don’t need. Seriously, it’s kinda amazing to me how most of the “real” code hosting projects need multiple gigabytes of RAM to function.
Another inkling that’s been in the back of my head has been a local eventing system, with the first use case of the code hosting/building. I can already tell that the post-receive hooks on the server are gonna bug me. They shouldn’t know anything about the build system, but for now they do. Oh well.