4 ms·
I'm currently (and have been for a few weeks now) building a self-hosted Git "forge", à la Gogs/Gitea/etc. The main motivation for this is that I usually juggl
by blurrycat 2y ago
I'm currently (and have been for a few weeks now) building a self-hosted Git "forge", à la Gogs/Gitea/etc.
The main motivation for this is that I usually juggle many side projects at the same time, and since none of them are in a finished state, I don't really feel like putting them out in the open on GitHub or Codeberg or something else, and would really like to keep all of this experimentation private. I know GitHub provides free private repositories, but I really dislike the interface and I feel like most of the features offered are not for me.
I tried running a private Gitea instance, but I did not like having to manage a second software to be able to run CI pipelines on my repositories (like Drone). I also really dislike GitHub Actions so I was kind of disappointed that Gitea's integrated CI is based on it.
I also tried running a Gitlab instance (which is currently what I use) as I much prefer GitLab CI over GH Actions, but the whole package is so much of a resource hog and tries so hard to be "more than GitHub" that I feel it isn't for me either.
So, in the end, I decided that I would build my own platform, with a simple scope in mind: be a nice Git repository hosting solution for single hackers or very small teams. Along with the smaller scope, I added a few restrictions: no JavaScript unless it substantially improves QoL (and even then, never require JS for the website to work), no external components required (apart from OpenSSH and Git).
So far I have a very minimal SSH handler implementation that allows push/pulling repositories from the server through authenticated SSH (public key), and what's starting to become a nice web interface to manage and read all of that. It's almost at the point where I will soon be able to dogfood the platform by hosting itself there (as a backup remote, not the primary yet).
The tech stack is kept relatively simple on purpose (I really dislike "modern" front-end development):
* Rust + Axum
* SQLite
* Bootstrap with SASS to customize it
* libgit2
Everything is server-side rendered as HTML before being served to the client, using Minijinja (reimplementation of Jinja2 in/for Rust by the same author).
Anyway, not yet ready to share any links or anything but I am still excited about the project taking shape after weeks/months of sporadic work on it! I'm building this not only because I feel a need for it, but also to learn more about Rust and Git internals, and I feel like I've learned a ton already!