Thoughts on GitHub and having my own Git forge
GitHub has been at the center of my software development journey for as long as I can recall. Yet, the GitHub that stands today is far different to the one I started with a long time ago. So, I decided to host my own Git forge through DigitalOcean.
GitHub has been at the center of my software development journey for as long as I can recall. I've learned a lot of essentials in version control and collaborative work through it, and working with GitHub has contributed to the developer I am today. I couldn't be more thankful for GitHub existing and making that possible. Yet, the GitHub that stands today is far different to the one I started with a long time ago. Of course, some of these changes are natural and almost expected; Actions, for example, has been a staple in my continuous integration and development operations, handling sanity checks and deploying documentation for me. But, some of these changes aren't necessarily for the better; I'm concerned by the development of tools like GitHub Copilot which, while well-intentioned to streamline development, can cause all sorts of issues, especially around accuracy. Likewise, GitHub's recent organizational changes such as being placed under Microsoft's AI team, suggests to me that this won't be improved any time soon.
Thankfully, I've also learned over the years that GitHub isn't solely the only Git repository hosting service (from hereon, I will reference this as a Git forge) out there. Because Git is decentralized in nature, I can merely swap which forge I want to use, and I'd still have access to all my code without issue. But, I've found that the alternative forges at my disposal were... less than ideal. GitLab, for example, struggles quite a bit in the UI/UX department, and I often have difficulties finding the right tool or option I need. Codeberg addresses these issues, but its sole restriction of free and open-source software only on its servers makes it non-viable to me, as I often have private repositories not intended to be used under the public eye. Gitea feels very similar to Codeberg, but their cloud options aren't intended for single users like myself: I would effectively need to pay $20 a month for a two-person forge, despite only one person being used1. For a while, it felt like GitHub was the only solid option for me when it came to version control hosting.
Or, if I wanted someone else to do the work of running the service for me. Self-hosting a Git forge was still a somewhat viable option, even if it meant tearing my hair out over web administration snags. So, I decided to do this for myself at a smaller capacity, and I began hosting my own Git forge through DigitalOcean. Software-wise, I decided to go with Forgejo, a hard fork of Gitea that provides a rather simple UX for my needs (Forgejo also powers Codeberg). Despite the "easy to install and maintain" claims, I struggled a lot with the setup, and I felt frustrated by the lack of documentation; nonetheless, I eventually worked it all out.
It's been a few months since then, and I've been quite pleased with the results so far. For smaller projects or ones where I'm not particularly looking for external contributions any time soon, my Git forge works really well. In fact, you might have seen me share some links from it in the past month or so, as projects like Alidade, CubiomesKit, and Renzo are being hosted there. Forgejo offers quite a lot out of the box such as issue tracking, wikis, releases, etc., although I only use a small subset of them. Issue tracking, for example, is all done through YouTrack, which I find tends to work better for my use cases. Likewise, I often don't use wikis because I have documentation sites that effectively replace those roles.
External collaboration (i.e., pull requests) is a different story. Since my Git forge was intended for me being the only user, any sort of contribution is out of the question. So, I often have to make mirrors with GitHub where I could accept pull requests and other contributions, but keep my forge as the "source of truth". Thus far, I haven't seen any of those projects get PRs that I would need to handle, but the strategy seems to be working fine. I do hope that the plans for federation pan out, so that this workaround with GitHub isn't necessary.
Likewise, I still need to find a decent solution for static site hosting. I use GitHub Pages quite frequently to host documentation and other static sites, since I can easily control it via Actions and have it auto-deploy itself. While services like Netlify exist, I'm not sure whether those services would fit my needs, especially since some of these sites require a bit of sausage-making to deploy. I might have to consider running my own version of Actions on my own machines, but this would also expand my web administration responsibilities2, which I'm not looking forward to.
As for the maintenance, I can give the project some credit, and simply replacing the Forgejo binary is enough to update to a new version seamlessly. I recently had to update Forgejo to a new LTS version, and it went without a hitch. In the event an upgrade goes on the wayside, I have backups ready via a DigitalOcean backup solution. Thankfully, I haven't needed to restore from a backup recently.
Overall, I'm quite pleased with my Git forge, and I'm happy to be using it as my new primary forge. While I lack all the goodies GitHub gives me, I have enough of the essentials to store my code somewhere and share it with the world. I hope to see more improvements to Forgejo as a whole, especially around federation, so that others can more easily collaborate with me.
- CommitGo, the company that offers cloud Gitea instances, is aware of this problem when I communicated with them about it. However, it sounds like there are both business and technical hurdles to make single-user forges possible on their platform. ↩︎
- Besides my Git forge, I also manage my Minecraft server with Bluemap, this website, and the Indexing Your Heart website, all on separate machines. Thankfully, most of them are simplistic enough, but I do occasionally struggle a bit. ↩︎