Gogs : mettre en place un miroir vers GitHub

closeCet article a été publié il y a 6 ans 5 mois 18 jours, il est donc possible qu’il ne soit plus à jour. Les informations proposées sont donc peut-être expirées.

Pour ceux qui ne connaissent pas, Gogs est un service Git auto-hébergé pour gérer vos dépôts de codes. J’avais tenté l’installation du très puissant Gitlab mais ce dernier consomme beaucoup trop de ressources pour qu’il reste un candidat sur mon micro-serveur. Après avoir un peu souffert à l’installation (je détaille pas mais je l’ai cherché), j’ai commencé réellement à bosser avec récemment. Et pour certains des dépôts, je souhaite qu’il soient recopiés sur GitHub, si possible automatiquement. Et c’est assez facile à mettre en place en fait.

Rapide contexte

Gogs est écrit en langage go. Son installation et sa configuration se veulent simplifiées, mais j’ai complexifié le truc « exprès » pour m’exercer un peu sur Postgresql. Il est même possible de l’installer via Docker, et il n’est pas impossible que je déporte mon installation actuelle ou que je la refasse pour basculer sur le cluster Swarm que j’essaie désespérément de monter.

La spécificité c’est donc qu’il est auto-hébergé, nécessairement privé. Mais j’ai également un compte GitHub, et si on pouvait faire en sorte de pousser automatiquement sur GitHub quand on pousse sur Gogs, c’est cool. Sans avoir besoin de la puissance de l’option intégration continue d’un Gitlab beaucoup trop lourd pour mes besoins persos, on a quand même les hooks, qui sont une fonctionnalité de Git.

Quelques étapes simples

En premier lieu, configurer l’accès SSH entre l’instance Gogs et Github. Pour ça, on se connecte sur gogs, et on bascule sur l’utilisateur git qui est celui utilisé par le logiciel. Il faut ensuite se créer une clé SSH, pour ma part je n’ai pas configuré de passphrase :

On ajoute ensuite cette clé sur son compte GitHub via l’interface web :

Tant qu’on est sur GitHub, profitons-en pour créer un dépôt vide, avec le nom qu’un veut. Par feignantise, j’ai utilisé le même que celui du dépôt privé. Attention, il faut absolument qu’il soit vide de tout, il ne faut donc pas sélectionner de licence ou de README.md dans le formulaire de création, sinon techniquement il y aura déjà un commit et ça sera l’enfer pour l’exploiter.

On teste maintenant la connexion depuis Gogs :

Parfait. Rendons-nous maintenant sur l’interface web de Gogs pour y configurer un hook. Pour cela, il faut sélectionner l’un de vos dépôts, se rendre dans les paramètres de ce dépôt, il y a un menu Git hooks :

Il faut modifier le post-receive, qui est vide pour l’instant, et ajouter les lignes suivantes :

On enregistre, et… c’est tout. Lors de votre prochain push sur le dépôt, il va ensuite automatiquement renvoyer les modifications sur GitHub :

Voilà, maintenant, je vais pouvoir reprendre petit à petit les différentes broutilles que j’ai pu vous balancer au fil des années sur le blog et les ajouter là-dedans. En passant, l’utilisation via mon rebond SSH fonctionne très bien pour taper sur mon instance Gogs 🙂

PS : J’indique qu’il ne faut pas ajouter la licence sur le dépôt créé sur GitHub, je l’avais fait sur Gogs, et GitHub a détecté le fichier et affiche correctement la licence sur la page du dépôt 😉