A cup of Gitea

Posted on Nov 19, 2022

gitea

$20

Nous utilisions depuis 5 ans chez Coddity l’offre free tier de Gitlab. Avec un namespace privé, nous hébergions le code de tous les side projects de la société ainsi que ceux de nos produits SaaS, le tout représentant environ 30 utilisateurs, une cinquantaine de petits projets et 2 projets plus conséquents utilisant la Gitlab-CI.

En mars 2022, Gitlab annonce la fin du free tier pour les domaines privés supérieurs à 5 utilisateurs. Ok, c’est fair, toute entreprise a besoin de générer du CA et on a bien profité de l’offre freemium.

Cependant, l’évolution de la grille tarifaire nous a poussé à considérer l’ensemble des possibilités pour notre besoin d’utilisation :

  • Rester sur Gitlab SaaS avec un namespace privé
  • Gitlab en selfhosted
  • Github
  • Bitbucket
  • et… Gitea couplé à Drone CI

Nous avons choisi cette dernière solution.

Pourquoi l’élimination des 5 premiers ?

Gitlab SaaS représentait un surcoût de +7000 € par an sans que forcement l’intégralité des développeurs de l’équipe en ait l’utilité, beaucoup travaillant directement sur les infras de nos clients. A titre personnel, je trouvais Gitlab SaaS lent (je parle pas de la CI, juste l’utilisation de l’app web), et sauf erreur, nous ne pouvions pas forcer l’utilisation de clefs ssh aux utilisateurs, ce qui nous posait un problème d’un point de vue sécurité.

L’utilisation de Gitlab en selfhosted, gros consommateur de ressources techniques et humaines pour l’exploitation et la maintenance, nous semblait surdimensionnée pour une équipe comme la nôtre et nos besoins (plus gros projet de 5/6 développeurs temps plein).

Concernant Github, l’évolution tarifaire de Gitlab a créé un vide. D’un côté Github à $4 par utilisateurs et de l’autre Gitlab à $20, je serais Github, je monterais mes tarifs à $10, tranquillou billou, et je mets 20€ sur la table qu’avant fin 2023 ce sera le cas. Par ailleurs, le lancement de Github Copilot me pose un petit problème de principes / valeurs, même si cela n’est jamais rentré en compte dans l’équation.

Pour terminer, la grande majorité de l’équipe n’ayant pas travaillé sur Bitbucket, nous l’avons simplement écarté (best justification ever).

Gitea

Gitea est un projet open source, sur une stack Vue3 / Go (❤️), ressemblant assez à Github, allegé.

L’application possède l’ensemble des fonctionnalités essentielles et est animé par une communauté très active permettant d’avoir des mises à jour régulières. En revanche, pas de CI intégrée ! Nous nous sommes tournés vers Drone CI, une autre projet opensource, toujours développé en Go (tiens donc). Drone s’intégrant très bien avec Gitea, le choix était légitime, d’autant que les produits sont très proches dans leur philosophie.

Pourquoi ce choix ?

Celui-ci n’a pas été évident.

Tout d’abord, l’aspect financier. Ce n’est pas parce qu’un produit est opensource, qu’il est gratuit 🥲 : la charge humaine d’installation et de MCO, ainsi que le cout d’infrastructure doivent être pris en compte et ne serons jamais compétitif avec l’utilisation d’une solution SaaS.

Si nous pouvons (heureusement) nous permettre le (sur)cout de Gitlab ou Github, la raison du choix est à chercher du côté de cet article.

Faire ce choix, c’est avoir une infrastructure à créer, à maintenir, avec un taux de disponibilité à plus de 99% et résiliente. Nous avions déjà nos serveurs pour l’hébergement de nos projets et des outils comme Sonarqube et couple Harbor & Portainer pour la gestion de nos conteneurs; déployer Gitea et Drone s’inscrit bien dans cette démarche d’avoir nos outils hébergés et maintenus en interne.

C’est bien beau, mais quel rapport avec les compétences ?

Il a fallu penser une architecture, penser les systèmes de réplication de données, penser la résilience, déployer, tester, corriger, ce qui a été fait par Yoann, Lord Technique chez Coddity et en Ecosse(#privatejoke). Une fois en production, il a fallu former une équipe en charge du maintien de la plateforme, capable d’intervenir en cas de problèmes (équipe qui n’était pas à fortiori formée sur l’administration d’une infra comme celle-ci) ainsi que rédiger toute la documentation nécessaire à l’exploitation. L’équipe a donc gagné en compétences à la fois au BUILD et au RUN. Par ailleurs, Gitea n’étant pas exempt de petits défauts, libre à nous de proposer des PR pour améliorer certains points, voir ci-dessous.

Last but least, ce choix nous ressemble bien et permet de promouvoir l’utilisation de projets opensource.

Retour après 6 mois d’utilisation

La mise en place n’a pas posé de problèmes particuliers, la documentation étant plutôt fournie. Pas de soucis non plus sur l’import des projets, tous ont été migrés de Gitlab vers Gitea facilement. Niveau sécurité, ras, Gitea s’interface très bien avec Keycloak.

Pour l’utilisateur, l’application est… rapide, très rapide. On reste très proche de l’ergonomie d’un Gitlab ou Github, la prise en main est aisée. La gestion des users et des projets est complète, Gitea propose nativement un wiki par projet ainsi qu’un board de gestion de projet, permettant de centraliser la gestion de projet sur l’outil directement. Pas de problème relevé non plus sur la création et la vie des PR.

1 mois sur 2

une belle pr sur Ginto

Quelques limitations que Oli, notre Chief Review Officer, a relevé cependant :

  • pas de commentaires multilignes et absence de suggestion de code, pratiques pour les code reviews
  • pour éviter les commentaires mal perçus, le support des émojis est assez pauvre dans l’édition de commentaire de code
  • recherche par fichier absente et pas de navigation par des flèches dans l’arborescence

Coté infra, nous faisons tourner Gitea et Drone sur un VPS à 12€ par mois, pas sûr d’arriver à un même coût d’infra à utilisation équivalente avec Gitlab hébergé sur notre infra.

Fin

Au moment où j’écris ces lignes, nous sommes pleinement satisfaits de ce choix ! Et vous souhaitez utiliser ou tester Gitea, vous pouvez aller sur codeberg.org une alternative à Github (lancée au rachat de GH par Microsoft) qui est contruite sur Gitea \o/

Merci à Lord pour tout le travail réalisé 🧙‍♂️ et à Oli pour le relevé des limitations 🎉