Arnaud Ouvrier

Mon blog à propos d'informatique, d'électronique, de tout, de rien

AccueilÀ proposGit (sourcehut)

Synchroniser un dépôt SourceHut vers GitHub avec un build automatique

Par Arnaud Ouvrier publié le 28/08/2025

Introduction

En migrant mes dépôts GitHub vers SourceHut, je suis tombé sur un problème : sur GitHub, j'ai un dépôt servant à gérer une bibliothèque Arduino. Cette bibliothèque est référencée et installable via le gestionnaire de bibliothèques Arduino inclus avec l'IDE Arduino. La synchronisation d'une bibliothèque vers le gestionnaire de bibliothèques Arduino ne peut se faire que via un dépôt GitHub, GitLab ou BitBucket...

Je ne voulais ni supprimer ma bibliothèque du gestionnaire, ni devoir continuer de la maintenir sur GitHub, vu que tous mes autres projets sont maintenant sur SourceHut. Pour ce faire, j'ai ajouté un build automatique à mon projet, afin que dès qu'un commit est publié sur SourceHut, il soit dupliqué sur GitHub.

J'ai trouvé cette solution sur le blog de Stephen Waits : Mirroring SourceHut repos to Github. Cet article n'est majoritairement qu'une traduction du sien.

Remarque : Vous devez avoir un abonnement payant à SourceHut pour pouvoir utiliser cette solution.

Comment activer la synchronisation d'un dépôt SourceHut vers GitHub avec un build automatique

  1. Générez une clé SSH dédiée à cette synchronisation SourceHut ↔ GitHub (elle peut être réutilisée sur plusieurs dépôts). Pour ce faire, lancez la commande suivante et n'ajoutez pas de mot de passe à la clé :

    ssh-keygen -C sourcehut-sync -f sourcehut-sync_ed25519

    Cette commande va créer une paire clé privée/clé publique. Faites attention à ce que vous faites avec la clé privée, celle-ci donnera accès à tous vos dépôts GitHub...

  2. Ajoutez la clé publique à votre compte GitHub sur cette page : https://github.com/settings/keys. Pour l'afficher dans votre terminal, exécutez :

    cat sourcehut-sync_ed25519.pub
  3. Ajoutez ensuite la clé privée à vos secrets sur SourceHut sur la page suivante : https://builds.sr.ht/secrets. Pour l'afficher dans votre terminal, exécutez cette fois là commande suivante :

    cat sourcehut_ed25519

    Une fois la clé privée ajoutée, SourceHut devrait vous donner un ID pour pouvoir la référencer dans vos fichiers de build. Il ressemble à ça : f2f8a99-cdf7-4286-b50f-7493o21bbxae. Copiez-le pour l'ajouter plus tard au fichier de build.

  4. Optionnel : créez un dépôt vide sur GitHub (sans aucun fichier, même pas de README) pour l'utiliser pour la synchronisation du dépôt SourceHut.

    Si vous désirez plutôt synchroniser un dépôt déjà existant sur GitHub, assurez-vous avant que le dépôt SourceHut ne soit pas en retard sur les commits.

  5. Dans votre dépôt SourceHut, créez un fichier nommé ".build.yml". Ajoutez-y le contenu suivant (en remplaçant les informations entre crochets) :

    image: alpine/edge
    secrets:
      - [l'ID de votre secret]
    sources:
      - git+ssh://git@git.sr.ht/~[votre nom d'utilisateur]/[nom de votre dépôt]
    tasks:
      - mirror-to-github: |
          cd ~/[nom de votre dépôt]
          ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
          git remote add github git@github.com:[votre nom d'utilisateur]/[nom de votre dépôt].git
          git push --mirror github
  6. Vous pouvez maintenant créer un commit et le pousser sur votre dépôt SourceHut. Le build devrait s'exécuter automatiquement et être répliqué sur GitHub. Vous pouvez suivre le statut du build sur la page https://builds.sr.ht.

Si comme pour moi, votre build échoue et vous obtenez une erreur du genre : "push declined due to email privacy restrictions", pensez à désactiver l'option "Block command line pushes that expose my email" dans vos paramètres email sur GitHub.

Voilà, c'est tout ce qu'il y a à faire pour synchroniser un dépôt SourceHut vers GitHub !