In the last 6 months I've been working on a self-hosted Git server and now I'd say it has reached a stage where I felt comfortable showing it properly.
For the HTTP server and frontend part, this project only relies on `net/http` and `html/template`, both of which are in Golang's standard library. This might not be the best performance-wise but I wish to cut dependencies as much as possible.
If the way the whole project is structured and developed seems weird: this is the first Golang project and first serious backend project I've ever done. Before making Aegis I've only made a few small things with Node.js and have never touched Golang, and during the development a lot of things have been ignored and/or delayed for the sake of "having enough functionalities as quick as possible". At the beginning it was only meant to be a proof that I have what it takes to "learn on the job" (and to learn about Git internals of course) but it gradually snowballed from there.
Currently the major things that have been implemented are as follows:
+ Basic things: tree/file views, commit info, history, diff;
+ Read-only clone by HTTP and read/write access through SSH;
+ Basic issue tracking and pull requests;
+ Namespaces;
+ Per-namespace and per-repository user access control;
+ Webhooks for external CI/CD (experimental feature; subject to change)
+ Snippets (à la GitHub snippets)
+ And many tiny things:
+ Labels for repositories;
+ UI for Git Blame;
+ UI for directly editing files;
+ 2-factor authentication w/ Email
+ Support for displaying `Co-Authored-By` messages
+ No JavaScript - works all major browsers and a lot of minor ones, including Ladybird and NetSurf.
+ Proper web installer for easy(-er) installation (like the one in WordPress)
Some of the things that are NOT implemented but PLANNED: + 2FA w/ HOTP/TOTP and passkeys;
+ GitHub Pages-like thingy;
+ This is currently planned to be added as a part of CI...
+ Proper CI;
+ Migration from/to other hosting services;
+ Support for other version control software, e.g. Fossil, Mercurial and SVN
+ And conversion between them (to the degree that's possible).
+ Refactor;
+ Better SSH and HTTP clone/pull/push handling;
+ Maybe properly implement Git functionalities instead of relying on exec.Command?
The code repository can be seen at https://github.com/AegisCodeForge/aegis/ . The list of planned things can be currently viewed on GitHub: https://github.com/AegisCodeForge/aegis/issues . Notes on how certain things work can be read at https://github.com/bctnry/aegis/tree/master/docs .I have set up a demo server at https://aegis-demo.sebastian.graphics if you wish to see it in action. This server is hosted on a small VPS I've rented from DigitalOcean (not sponsored), which I'll be taking down in about two weeks. It will be configured with the most basic settings possible (i.e. basically SQLite for everything). I'll leave no restrictions on user activities, but please be nice...
Feedback & bug/security reports are greatly appreciated.