So normally a post like this really isn't that interesting.
However, our infrastructure has been written in D and is now
live!
We've had a couple of teething problems, notably libcurl on Alma
Linux is super outdated, and hit pthread_t exhaustion when using
task!FN().executeInNewThread
so we switched to a thread pool ...
Other than that, it's rolling.
Blog post: https://serpentos.com/blog/2023/03/18/infrastructure-launched/
Code
Summit (dashboard): https://github.com/serpent-os/summit
Avalanche (builder as a service): https://github.com/serpent-os/avalanche
Vessel (repo manager): https://github.com/serpent-os/vessel
Boulder (build tool): https://github.com/serpent-os/boulder
Moss (package manager): https://github.com/serpent-os/moss
Shared service APIS: https://github.com/serpent-os/moss-service
Shared package APIS: https://github.com/serpent-os/libmoss
Instance: https://dash.serpentos.com
Basics
The build components are paired using a REST API, public keys and EdDSA JSON Web Tokens. The dashboard schedules builds using a graph, fetching the git recipes and determining missing builds. TLDR every missing build gets scheduled and ends up in the repository's public tree.
Right now we're running it at a small scale to find out various teething issues, but do have plans to scale it beyond the current setup. Long story short we're looking to a k8s style setup with separate postgresql (rather than lmdb), and transient builders rather than the current pairing system for blessed instances.
Also we're growing highly tired of relying on C libs that are host OS dependent, and are planning a rearchitecture of the core tooling around fibers (using vibe.d core APIs) which will lead to more natural idioms (allowing us to kill our predominantely OOP approach and move towards ducktyping and significantly less allocations)