Patrice Ferlet
Patrice Ferlet
Créateur de ce blog.
Publié le avr. 26, 2016 Temps de lecture: 6 min

Me suivre sur Mastodon

Gogs - le vrai clone de github

Vous trouvez gitlab lourd et pas facile à installer, je vais vous parler de Gogs ! Le service Git qui est, pour le coup, vraiment un clone très proche de GitHub et très facile à mettre en place.

Apparement je suis super à la bourre niveau news parce que le projet Gogs a plus de 2 ans. Mais c’est pas grave, j’ai envie de vous parler de mes tests.

C’est au détour d’une conversation que @fredix me parle de ce Gogs. Je trollais grassement Ruby et je disais que pourtant j’utilisais des outils développés en Ruby comme GitLab. Et, sachant que j’adore le langage Go, il me glisse un “tu devrais regarder Gogs alors”… Et effectivement il a retweeté ceci, que j’ai zappé sans le faire exprès:

Arrivé le soir à la maison, je ne peux m’empêcher de le tester. Et ça m’arrive rarement ces derniers temps, mais j’ai bien assisté à un “effet waouh”.

Installation

Deux solutions:

  • le binaire, puisque le projet est développé en Go, il suffit de lancer l’exécutable. Pas de dépendances. C’est ce qu’il y a de bien avec Golang :)
  • ou le conteneur Docker qui permet d’isoler tout ça et de faire “mumuse” avec des BDD différentes en un coup de cuillère à pot.

Le binaire se suffit à lui-même et pèse 32Mo complété d’une dizaine de megas d’images, de templates et de css en tout genre. Le conteneur pèse lui environ 81Mo (normal, on inclut ici un FS).

Bref, rien à voir avec les 700Mo de l’image Gitlab… Cela peut passer comme un troll ou une critique mais ça n’en est pas une. Gitlab a énormément d’options et d’outils, et les dépendances nécessaires sont assez nombreuses. Donc rien de surprenant. Mais au-delà de cela, il y a “Ruby”. Pour rappel: Go permet de compiler en binaire natif le projet, alors que des sources Ruby ont besoin de tout le runtime. Cela alourdi considérablement une image qui en a besoin.

On évite de troller et on passe à la suite.

Pour démarrer le conteneur Gogs, c’est simple, je pars du principe que vous avez Docker 1.9 minimum pour créer un volume, sinon vous devrez monter les “data” dans un répertoire local.

![En deux lignes c'est prêt](/static/upload/9c5ce5c7-3fae-4181-b332-3e06b04332a4-gogs.gif)

Deux petites commandes:

# création d'un volume pour garder les
# fichiers de conf
docker volume create --name gogs-data

# on utilisera le port 10022 pour ssh
# et 10080 pour l'interface web
docker run --name gogs -p 10022:22 -p 10080:3000 -v gogs-data:/data gogs/gogs

Bon, la page de configuration est pas compliquée, il suffit de renseigner quelques broutilles comme le serveur de base de données (j’ai pris Sqlite pour tester) et j’ai tout laissé par défaut sauf une entrée:

Application URL: http://localhost:10080

Simplement parce que je le fais tourner sur Docker et que j’ai “bindé” le port ici. Sinon, la prochaine étape ne fonctionne pas.

En cas d’erreur, no panic:

  • coupez le conteneur “docker stop gogs
  • supprimez le avec “docker rm gogs
  • supprimez le volume “docker volume rm gogs-data
  • refaite le volume et lancez le projet comme expliqué ci-dessus

Après cette étape terminée, vous voilà avec un serveur Gogs. Créez un utilisateur en passant pas “sing-up”, le premier compte est administrateur (à moins que vous ayez utilisé les options avancées de l’installeur juste avant).

Idem pour la présentation des sources

Et le contenu

J’ai cru que ce projet n’allait pas me donner beaucoup d’options. C’est une erreur. Presque tout est là !

Créer un dépôt, paramétrer les webhooks, ajouter des clefs SSH, etc. Tout est là.

Les captures tirées du dépôt parlent d’elles même:

Impressions (personnelles)

C’est fluide, propre, ça ressemble vraiment à github (à s’y méprendre) et je suis franchement étonné qu’un si “petit” projet (dans le sens “poids”) puisse faire tant de choses et si bien.

J’ai joué presque 4h avec, j’ai créé des dépôts, ouvert plusieurs comptes, créé des pull-requests, foutu le boxon pour voir ce que ça pouvait engendrer. Rien à redire ça répond bien à tout ce dont j’ai besoin.

Le principe de release est aussi présent

Je ne sais pas à quel point c’est scallable et je n’ai pas encore d’avis sur la question “sécurité”, mais j’ai largement moins galéré à utiliser SSL via un reverse proxy qu’avec Gitlab (y compris avec des images Docker super bien faites). Je reste franchement très impressionné.

Seul hic, mais c’est certainement parce que le projet est encore jeune, je n’ai pas trouvé l’équivalent de “gitlab-ci” (les fameux runners) qui me permettrait de faire des “builds” automatiques. Mais je compte bien sur la communauté pour bosser sur le sujet. Dans tous les cas, un Jenkins à côté (ou un truc plus léger…) fera bien l’affaire.

Et coté “addons”

En premier lieu, l’interface est traduite dans un certain nombre de langages y compris le français.

Il y a ce qu’il faut pour le minimum:

  • webhooks,
  • service mail,
  • issues,
  • connexion LDAP,
  • api…

De ce que j’en ai vu, il est possible de connecter Drone.io mais ayant investigué dans le forum, il apparait qu’à ce jour il n’y a pas moyen de valider une pull-request via un service externe type Jenkins.

La page de profile ressemble vraiment à celle de Github

Pour le moment j’en suis à la phase de test et je découvre un peu l’outil. Donc tout ce que je dis ici ne doit pas être pris comme paroles d’évangile. Il se peut que cela soit possible mais je ne trouve pas l’info.

Autre “addon” si on peut appeler cela comme ça, l’API est peu documentée. Elle est pourtant bien là et permet de faire quelques opérations. Je n’en dis pas plus, je n’ai pas franchement creusé le sujet.

Mais qui s’en servira ?

Alors, on change ? On passe de GitLab à Gogs ? Attendez un peu quand même…

Je ne vais pas vous dire de l’utiliser comme dépôt ouvert au public. Ce serait vite m’avancer. Mais pour un “github like” d’entreprise c’est souvent bien suffisant. Un indépendant qui gère pas mal de dépôts et qui veut laisser l’accès proprement à ses clients et collaborateurs trouvera aussi son bonheur avec Gogs. Il est moins compliqué à gérer, très simple à installer et ne dépayse pas les utilisateurs qui connaissent déjà GitHub.

Par contre, il est encore jeune, n’offre pas tout d’un gitlab et n’est pas, pour l’heure, assez éprouvé. À ce jour, il faut savoir dans quoi on met les pieds en l’utilisant. Mais je suis persuadé qu’il va vraiment faire des prouesses rapidement.

Je suis même en train de me demander si je ne devrai pas tenter de créer l’équivalent de “gitlab runner” sur Gogs… D’après les auteurs le fait de “bloquer” une PR et de la rendre “mergeable” par la suite est un peu complexe à l’heure actuelle.

Les pull-request sont facile à voir

Une chose est sûre, les auteurs de Gogs sont ouverts à la discussion, le forum est actif et le projet est en vie depuis déjà assez longtemps pour imaginer avoir un support (communautaire) conséquent.

Ressources:

comments powered by Disqus