A cup of Gitea

$20
For 5 years at Coddity we had been using Gitlab’s free tier. With a private namespace, we hosted the code of every side project in the company as well as our SaaS products, the whole thing coming to about 30 users, fifty or so small projects, and 2 bigger projects using Gitlab-CI.
In March 2022, Gitlab announces the end of the free tier for private domains above 5 users. Ok, that’s fair, every company needs to generate revenue and we got plenty out of the freemium offer.
Still, the change in the price list pushed us to look at the full set of options for what we actually needed:
- Stay on Gitlab SaaS with a private namespace
- Self-hosted Gitlab
- Github
- Bitbucket
- and… Gitea coupled with Drone CI
We chose that last one.
Why eliminate the first five?
Gitlab SaaS meant an extra +€7,000 a year, without the whole dev team necessarily having a use for it, a lot of them working directly on our clients’ infras. Personally, I found Gitlab SaaS slow (I’m not talking about the CI, just using the web app), and unless I’m mistaken, we couldn’t force users to use ssh keys, which was a problem for us from a security point of view.
Self-hosted Gitlab, a heavy consumer of technical and human resources for operations and maintenance, seemed oversized for a team like ours and for our needs (biggest project: 5/6 full-time developers).
As for Github, Gitlab’s pricing move opened up a gap. Github on one side at $4 per user and Gitlab on the other at $20: if I were Github, I’d raise my prices to $10, nice and easy, and I’ll put €20 on the table that before the end of 2023 that’ll be the case. On top of that, the launch of Github Copilot gives me a small problem of principles / values, even if that never entered the equation.
Finally, the vast majority of the team never having worked on Bitbucket, we simply set it aside (best justification ever).
Gitea
Gitea is an open source project, on a Vue3 / Go stack (❤️), looking a fair bit like Github, slimmed down.
The application has all the essential features and is driven by a very active community, which means regular updates. On the other hand, no built-in CI! We turned to Drone CI, another open source project, also written in Go (well, well). Drone integrates very well with Gitea, so the choice was legitimate, all the more so since the products are very close in their philosophy.
Why this choice?
It wasn’t an obvious one.
First, the money. A product isn’t free just because it’s open source 🥲: the human cost of installation and of keeping it running, plus the infrastructure cost, have to be counted, and they will never be competitive with using a SaaS solution.
If we can (fortunately) afford the (extra) cost of Gitlab or Github, the reason for the choice is to be found over on the side of this post.
Making this choice means an infrastructure to build and to maintain, with availability above 99%, and resilient. We already had our servers for hosting our projects, and tools like Sonarqube and the Harbor & Portainer pair for managing our containers; deploying Gitea and Drone fits right into this way of having our tools hosted and maintained in-house.
That’s all very nice, but what’s the link with skills?
We had to think through an architecture, think through the data replication systems, think through resilience, deploy, test, fix, which was done by Yoann, Technical Lord at Coddity and in Scotland (#privatejoke). Once it was in production, we had to train a team in charge of keeping the platform up, able to step in when something breaks (a team that was not a fortiori trained to administer an infra like this one), and write all the documentation needed to run it. So the team gained skills on both the BUILD side and the RUN side. Besides, Gitea not being free of small defects, we’re free to open PRs to improve a few things, see below.
Last but least, this choice is very much us, and it lets us push the use of open source projects.
Back after 6 months of use
Setting it up didn’t cause any particular trouble, the documentation being fairly thorough. No trouble importing the projects either; all of them were migrated from Gitlab to Gitea easily. Security-wise, nothing to report: Gitea interfaces very well with Keycloak.
For the user, the application is… fast, very fast. You stay very close to the feel of a Gitlab or a Github, and getting the hang of it is easy. User and project management is complete. Gitea offers a wiki per project out of the box, plus a project-management board, so you can keep project management on the tool itself. Nothing to report either on creating PRs or on living with them.


A few limitations that Oli, our Chief Review Officer, did pick up on, though:
- no multiline comments, and no code suggestions, which are handy for code reviews
- to avoid comments being taken the wrong way, emoji support is pretty poor when editing a code comment
- no search by file, and no moving around the tree with the arrow keys
On the infra side, we run Gitea and Drone on a VPS at €12 a month. Not sure we’d land on the same infra cost, at equivalent use, with Gitlab hosted on our own infra.
End
As I write these lines, we are fully satisfied with this choice! And if you want to use or try Gitea, you can head to codeberg.org, an alternative to Github (launched when Microsoft bought GH) that is built on Gitea \o/
Thanks to Lord for all the work 🧙♂️ and to Oli for writing up the limitations 🎉