Skip to content

paul-friedli/github_organization_repositories_exporter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mode d'emploi

Ce que ça fait, à quoi ça sert ?

Ce programme Java va cloner puis zipper tous les repos d'une organisation dans un dossier local de votre choix.

=> Pratique pour consigner sur sharepoint le matériel d'enseignement utilisé dans le cadre d'un module utilisant GitHub.

N.B. La méthode clonage + zippage a été préférée au téléchargement du ZIP afin d'avoir absolument tout du repo (pas seulement sa branche "master") et pour pouvoir éventuellement identifier après coup les changements intervenus depuis clonage.

Threads pour aller plus vite

Une organisation github peut contenir de nombreux repos. Chaque repo peut contenir de nombreux fichiers, dont certains plus ou moins imposants. Dès lors, le traitement de l'ensemble (identifier chaque repo, cloner chaque repo, zipper les clones, ...) prend du temps.

Le traitement est parallélisé à l'aide d'un pool de threads (8) afin de booster le temps d'exécution globalement nécessaire.

Configurer le projet

Simplement modifier ces 3 constantes au début du programme Java selon vos besoins :

// Organisation GitHub dont on veut pomper les repos localement
private final static String REMOTE_ORG_NAME = "emf-info-d400";

// Ton token GitHub perso (voir ci-dessous comment faire pour générer son "token personnel" GitHub)
private final static String GITHUB_TOKEN = "ghp_xyzxyzxyzxyzxyzxyzxzxz";

// Dossier où seront déposés les repos zippés (attention à conserver le / final !)
private final static String LOCAL_DESTINATION_FOLDER = "./downloaded_repos/";

Par défaut, avec "./downloaded_repos/", les repos seront téléchargés et zippés dans le sous-dossier downloaded_repos à la racine de ce projet.

Comment générer son "token personnel" GitHub

Pour vous identifier et authentifier face aux apis GitHub, il vous faudra un PAT. Il s'agit d'un token personnel (Personal Access Token, "PAT") qui doit être créé sur le site GitHub, une alternative sécuritaire fortement recommandée à l'utilisation du user/password GitHub pour des interactions automatisées comme celles-ci avec l'API GitHub.

Étapes pour générer son propre PAT de durée/validité limitée :

  • Connecte-toi à ton compte GitHub
  • Accède aux paramètres (Settings) :
    • Clique sur ta photo de profil en haut à droite de la page
    • Sélectionne Settings dans le menu déroulant
  • Accède à la section Developer settings tout en bas dans la barre latérale à gauche
  • Dans cette section clique sur Personal access tokens dans la barre latérale à gauche
  • puis sur Tokens (classic) pour accéder à la liste de tes tokens existants ou en générer de nouveaux
  • Clique sur le bouton Generate new token et choisis l'option New personal access token (classic)

Configurer les permissions du token :

  • Donne un nom à ton token pour t'en rappeler facilement, par exemple GitHubOrganizationReposExporter
  • Choisis une durée d'expiration pour ton token (7 jours suffiront amplement).
  • Sélectionne le scope nécessaire pour que ce projet puisse fonctionner :
    • coche le scope repo afin d'avoir le droit de cloner les repos
  • Génère le token
  • Copie et stocke ton token dans la constante Java GITHUB_TOKEN.

N.B. Tu ne pourras plus voir ce token après avoir quitté cette page, donc assure-toi de bien l'avoir noté dans la constante et ne pas le diffuser. Ce token sera utilisé dans tes requêtes API GitHub pour authentifier tes accès à tes repositories.

Exécution depuis VSC

S'agissant d'un projet Java Maven, tout devrait normalement se faire automatiquement au 1er run (la première fois il téléchargera les librairies Java nécessaires référencées par le fichier pom.xml).

En cas de soucis, lancez la commande Maven suivante mvn clean install dans le terminal du projet VSC pour le forcer à nettoyer le projet et à télécharger tout le nécessaire pour son exécution.

Une fois terminé, il vous suffira de consigner les fichiers zip générés (sharepoint).

N.B. Si Maven n'est pas installé sur votre poste => https://maven.apache.org/

Exemple d'exécution

L'exécution prends un peu de temps (qui dépendra du volume à rapatrier).

Voici à quoi ressemble l'output pour l'organisation emf-info-d400 :

=====================================================================================
GitHubOrganizationReposExporter v1.0 
-------------------------------------------------------------------------------------
Établissement de la liste des repos de [emf-info-d400]...
Clonage et ZIP des 66 repos de [emf-info-d400]...
  - 001/066 [D03-UnPourTous] : clonage... zippage... suppression du clone...
  - 002/066 [D01-Alcoolos] : clonage... zippage... suppression du clone...
  - 003/066 [D04-NombresLisibles] : clonage... zippage... suppression du clone...
  - 004/066 [D02-PersonneEtCopains] : clonage... zippage... suppression du clone...
  - 005/066 [D05-Chaussures] : clonage... zippage... suppression du clone...
  - 006/066 [D06-DatesHeuresLisibles] : clonage... zippage... suppression du clone...
  - 007/066 [F04-Animal] : clonage... zippage... suppression du clone...
  - 008/066 [F06-Copains] : clonage... zippage... suppression du clone...
  - 009/066 [F08-Garage] : clonage... zippage... suppression du clone...
  - 010/066 [D07-DebugArticle] : clonage... zippage... suppression du clone...
  - 011/066 [D09-UML-Is-Easy] : clonage... zippage... suppression du clone...
  - 012/066 [D11-PropriosEnclosAnimaux] : clonage... zippage... suppression du clone...
  - 013/066 [D11-PropriosEnclosAnimaux-Solution] : clonage... zippage... suppression du clone...
  - 014/066 [D08-Smartphone] : clonage... zippage... suppression du clone...
  - 015/066 [D10-BibliothequeEnLigne] : clonage... zippage... suppression du clone...
  - 016/066 [Ex01-LeChien] : clonage... zippage... suppression du clone...
  - 017/066 [Ex01-LeChien-Solution] : clonage... zippage... suppression du clone...
  - 018/066 [D08-Calculatrice] : clonage... zippage... suppression du clone...
  - 019/066 [D12-AlgorithmiqueDeBase] : clonage... zippage... suppression du clone...
  - 020/066 [Ex11-AlgorithmiqueDeBase-Solution] : clonage... zippage... suppression du clone...
  - 021/066 [Ex11-AlgorithmiqueDeBase] : clonage... zippage... suppression du clone...
  - 022/066 [Ex02-Eleves] : clonage... zippage... suppression du clone...
  - 023/066 [Ex02-Eleves-Solution] : clonage... zippage... suppression du clone...
  - 024/066 [Ex03-ProcesseursB] : clonage... zippage... suppression du clone...
  - 025/066 [Ex03-ProcesseursB-Solution] : clonage... zippage... suppression du clone...
  - 026/066 [Ex04-DevineMonNombre] : clonage... zippage... suppression du clone...
  - 027/066 [Ex04-DevineMonNombre-Solution] : clonage... zippage... suppression du clone...
  - 028/066 [Ex05-IdentificationCodeSource] : clonage... zippage... suppression du clone...
  - 029/066 [Ex06-NotesEMF] : clonage... zippage... suppression du clone...
  - 030/066 [Ex06-NotesEMF-Solution] : clonage... zippage... suppression du clone...
  - 031/066 [Ex07-ConvertisseurTemperature] : clonage... zippage... suppression du clone...
  - 032/066 [Ex07-ConvertisseurTemperature-Solution] : clonage... zippage... suppression du clone...
  - 033/066 [Ex08-Formes] : clonage... zippage... suppression du clone...
  - 034/066 [Ex08-Formes-Solution] : clonage... zippage... suppression du clone...
  - 035/066 [Ex09-Formes2] : clonage... zippage... suppression du clone...
  - 036/066 [Ex09-Formes2-Solution] : clonage... zippage... suppression du clone...
  - 037/066 [Ex12-GestionEmployes] : clonage... zippage... suppression du clone...
  - 038/066 [Ex12-GestionEmployes-Solution] : clonage... zippage... suppression du clone...
  - 039/066 [Ex10-VinsEtSpiritueux] : clonage... zippage... suppression du clone...
  - 040/066 [Ex10-VinsEtSpiritueux-Solution] : clonage... zippage... suppression du clone...
  - 041/066 [D08-Calculatrice-Solution] : clonage... zippage... suppression du clone...
  - 042/066 [A01-Debogueur] : clonage... zippage... suppression du clone...
  - 043/066 [Ex66-JeuToucheCoule] : clonage... zippage... suppression du clone...
  - 044/066 [Ex66-JeuToucheCoule-Solution] : clonage... zippage... suppression du clone...
  - 045/066 [Ex03-ProcesseursA-Solution] : clonage... zippage... suppression du clone...
  - 046/066 [Ex03-ProcesseursA] : clonage... zippage... suppression du clone...
  - 047/066 [2023-2024-E0-JeuLaPasserelle] : clonage... zippage... suppression du clone...
  - 048/066 [2023-2024-E0-JeuLaPasserelle-Solution] : clonage... zippage... suppression du clone...
  - 049/066 [RP-D400] : clonage... zippage... suppression du clone...
  - 050/066 [D13-Enums] : clonage... zippage... suppression du clone...
  - 051/066 [D13-Enums-Solution] : clonage... zippage... suppression du clone...
  - 052/066 [Test-Repo-Private] : clonage... zippage... suppression du clone...
  - 053/066 [test-repo-private-ramalhom] : clonage... zippage... suppression du clone...
  - 054/066 [Test-Repo-Public] : clonage... zippage... suppression du clone...
  - 055/066 [test-repo-public-ramalhom] : clonage... zippage... suppression du clone...
  - 056/066 [test-repo-public-ramalhomemf] : clonage... zippage... suppression du clone...
  - 057/066 [F08-Personne] : clonage... zippage... suppression du clone...
  - 058/066 [2023-2024-E1-HalloooBoissons] : clonage... zippage... suppression du clone...
  - 059/066 [2023-2024-E1-HalloooBoissons-Solution] : clonage... zippage... suppression du clone...
  - 060/066 [2023-2024-E3-Startuuup] : clonage... zippage... suppression du clone...
  - 061/066 [2023-2024-E2-Spotiflyyy-Solution] : clonage... zippage... suppression du clone...
  - 062/066 [2023-2024-E2-Spotiflyyy] : clonage... zippage... suppression du clone...
  - 063/066 [2023-2024-E1-4-MESSERLI-Gabriel] : clonage... zippage... suppression du clone...
  - 064/066 [F18-GalaticExploration] : clonage... zippage... suppression du clone...
  - 065/066 [2023-2024-E3-Startuuup-Solution] : clonage... zippage... suppression du clone...
  - 066/066 [2023-2024-E2-MESSERLI] : clonage... zippage... suppression du clone...
Clonage et ZIP des repos de [emf-info-d400] terminé avec succès !
=====================================================================================

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages