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.
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.
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.
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
Settingsdans le menu déroulant
- Accède à la section
Developer settingstout en bas dans la barre latérale à gauche - Dans cette section clique sur
Personal access tokensdans 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 tokenet choisis l'optionNew 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 jourssuffiront amplement). - Sélectionne le scope nécessaire pour que ce projet puisse fonctionner :
- coche le scope
repoafin d'avoir le droit de cloner les repos
- coche le scope
- 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.
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/
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 !
=====================================================================================
