A build server. Lightweight, extensible, good.

Click through to the repository for the code, getting started guide, and more documentation. See the snippets below for the latest activities.


A Wheel Reinvention Jam 2023 project. As is tradition I've got some words to say about how the jam went.

When it comes to the content, I came prepared. I've had thoughts on how one would create a build server for more than two years and have discussed some of these on the Discord with various people. Some of the more important payloads and a list of possible URL patterns I already had written down. So the goal was already succinctly fixed from the first hour on.

I'm happy to report that the design of the system seems to hold up to actually implementing it. Attaching jobs to entities as a way of organizing the entire thing without pipelines works well. Fun fact: Entities actually weren't named until a few days ago but it is one of these catch-all terms that can just mean whatever, so it's okay. With my tests I did not miss pipelines but it's a significant shift of responsibilities onto individual jobs, especially the initial job. Of course no one has thrown a huge CI workflow at Aura but I'm confident that it would be able to handle it. Whether DevOps engineers that are up to their neck in CI pipelines can actually rethink the entire system enough to see advantages of Aura (and the disadvantages of pipelines) is still up in the air.

How to best handle collections of entities was actually the hardest thing, I wasn't happy with the first way I tried and then spend a second half-day doing it again but properly. Now that I'm writing these lines it occurs to me that collections still aren't supported completely since you should be able to put an entity into collections when submitting a job (which may create that entity if it doesn't exist yet) but the relevant fields in the JSON only exist in my documents and not in the code. Whoops. No more time to fix that now, I've noted it down, though.

I've released version 0.1.0 at the end of the jam. If you don't need much from a build server, it might already fit your needs. If not, please do play with it and let me know what you're still missing.

Recent Activity

Imagine this: the Big Boss has some important changes to make and pushes them to Gitea. Gitea notifies Aura about the push and Aura queues jobs to be handled as soon as possible. These jobs then run, quickly succeed, and the result shows back up in Gitea. All this is now working in Aura. (Big Boss' satisfaction is not guaranteed.) &aura

With the release of Darke Files 0.5.0, I included a webhook feature that lets you configure Darke Files server to post some info to a specified URL whenever a new commit is pushed. I wanted to integrate Darke Files into a CI system but I didn't find any that fit my needs, so the webhook was the only feature you got. I went into more detail back when I released that version here https://discord.com/channels/239737791225790464/1053016918023487549/1053018234628087828

Times have changed and now I have a build server that can do the things I want it to do. Aura now contains an endpoint specific to the webhook payloads Darke Files server sends out. You just have to map between the two systems in Aura's config and provide the missing pieces of information. You can read more about the integration in the expanded Aura README and the submit-darke docs.

The screenshot montage contains (from top to bottom):

  • the repository on Darke Files server
  • the project in Aura
  • the config for the integration in Aura

Yes, this is a crossover showcase-post.
https://darke.handmade.network/ | https://darkedev.itch.io/darke-files | &darke
https://handmade.network/p/431/aura/ | https://github.com/unnamedtiger/aura | &aura

Just successfully leaked a secret in an Aura build job. Y'all just have to be careful. &aura

Aura now lets you create a new project from the web interface. I think that vital feature nicely rounds out what I've got time for this jam. Of course there are things I didn't get to, most notably authentication, artifacts, and integration into several major and minor version control servers, but I'll save these for later.

With that Aura 0.1.0 is released! Try it out and let me know what you think.
https://handmade.network/p/431/aura/ | https://github.com/unnamedtiger/aura | &aura

By popular demand (it's me, i'm popular demand) timestamps are now relative. They also update, just in case you're looking at a job that just completed. And if you don't want to do the math, the entire thingy has a tooltip with the full date and time. Also visible here: the job log containing whatever the job wrote to stdout/stderr. &aura

Holy ship, it's alive. I've actually got a runner that just sits there and regularly checks in with the controller, asking for work to do. A tiny, productive robot. &aura

If things don't seem to be moving fast enough, you can check the job page in Aura to see exactly what a job is still waiting for. In the first case, the "test:macos" job is waiting for the "build:macos" job to complete, but the latter also hasn't started yet. In the second case the "deploy" job was created with a built-in delay. &aura

The new Runner Status page in Aura lets you check if all the robots who should be running build jobs for you are productive. It also lists the tags that are used for picking the correct build runner for a given job. &aura

Aura now has collections, so if you want to group a bunch of commits under for example a merge request, you can. &aura

Put all the job data into the database in Aura. With that the page listing all jobs for a commit and the page for a single job are also done. Then I added a page listing all queued jobs. I'll get the timestamps fixed before the week is up, hopefully. &aura

A bunch of things are clickable in the Aura web interface now. All of the data comes directly from the SQLite database. If you just want to poke around the program, you can run the executable in demo mode (as seen here) which will already contain some sample data. &aura

The main page of Aura features a list of all projects on the server. It won't stay quite as empty, there are still a few more links coming, once I've created the pages behind them and figured out what goes where. I don't expect this to be used much, most people probably open a page with a deeplink posted where ever the job was started from, e.g. a bot commenting in your MR.
Tech wise the entire thing now sits on top of an SQLite database which is the source for the list of projects you can see here. &aura

If we zoom out to look at an entire project, there might be different places your jobs could live. Attach your jobs to commits, days, or anything else that makes sense to you. Then group those entities in collections, for example representing branches, merge requests, or more. &aura

I've fought with CSS, and while I'm not sure if I won, I'm coming back with loot. If you've got a bunch of build jobs running for your project you might want to inspect one of these more closely. The job page has the info you need, with metadata in the left column, and more importantly the job log to the right. &aura

This Wheel Reinvention Jam I'm building a build server I've named Aura. The goal I've set myself for Monday is to create the major pages in the Web UI. I've started with the most complex one and you can see the first revision below. This page lists out all build jobs that exist for a single commit. &aura