Cloner tous les repos d’une organisation sur Github

Je cherchais un moyen rapide de cloner tous les repos publics d’une organisation sur Github. D’autres se sont bien sûr posés la question mais les solutions proposées m’ont toutes semblées trop complexes / tordues.

Résultat, j’ai fait la mienne :

bash -x <(curl -s "https://api.github.com/orgs/alphagov/repos" | jq -r '.[].git_url | "git clone " + sub("git://"; "https://")')

L’organisation est ici alphagov, à remplacer évidemment.

Il y a trois étapes :

  1. curl -s "https://api.github.com/orgs/alphagov/repos" récupère la liste des repos de l’organisation au format JSON. Il y a pas mal d’informations dedans (toutes les URLs, nombre de forks, de watchers, etc.).
  2. On passe à jq, un outil (très puissant) en ligne de commande pour parser du JSON qui a son propre langage.
    1. .[].git_url indique de conserver uniquement l’URL du repo. Ce qui donne :
      $ curl -s "https://api.github.com/orgs/alphagov/repos" | jq -r '.[].git_url'
      git://github.com/alphagov/static.git
      git://github.com/alphagov/slimmer.git
      (...)
      
    2. sub("git://"; "https://") permet ainsi de remplacer les git:// par des https:// car je ne suis pas authentifié sur Github. Ce qui donne :
      $ curl -s "https://api.github.com/orgs/alphagov/repos" | jq -r '.[].git_url | "git clone " + sub("git://"; "https://")'
      git clone https://github.com/alphagov/static.git
      git clone https://github.com/alphagov/slimmer.git
      (...)
      
  3. Le tout est envoyé en entrée à bash qui va exécuter les commandes et cloner tous les répertoires !

Bonus : Pourquoi alphagov ? Car c’est une très bonne source d’inspiration tant en Ruby (la plupart sont des applications Rails) qu’en Puppet et en Terraform (ici et ici).

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s