diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000000000000000000000000000000000..15c67864bc6344936657d4e9dd9dbcbed4621558 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "public"] + path = public + url = ssh://git@ssh.hesge.ch:10572/iti_assistants/modele-tp-etudiants-public.git diff --git a/README.md b/README.md index e9d1f23b4bc46c691716cd6acd9406180505d289..60126f0a7bfcfe54588ead814c006f2f46fcddf5 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,12 @@ -# modele-tp-etudiants-private +# Modèle de TP pour étudiants (privé) -Ce repo contient un modèle pour organiser un TP à faire par les étudiants avec la contrainte d'utiliser le gitlab de l'école. \ No newline at end of file +Ce repo contient un modèle pour organiser un TP à faire par les étudiants avec la contrainte d'utiliser le gitlab de l'école. Il est constitué des fichiers privés de l'enseignant ainsi que d'un script python pour récupérer tous les forks des étudiants du repo public, ce dernier étant un repository git à part entière et submodule du premier. + +La syntaxe du script est la suivante : +```bash +python3 clone_all.py <token> <project_id> +``` +Vous pouvez générer un `token` [sur cette page](https://gitedu.hesge.ch/profile/personal_access_tokens), en cochant la case "api". Le `project_id` correspond à celui affiché sur la page de repo : + + +Le script clone tous les forks du repository public et les place dans le répertoire `repositories`. \ No newline at end of file diff --git a/clone_all.py b/clone_all.py new file mode 100644 index 0000000000000000000000000000000000000000..a9f5a183a792d487863d64c6bbae9b0176824ea5 --- /dev/null +++ b/clone_all.py @@ -0,0 +1,34 @@ +import sys +import json +import requests +import subprocess + +if len(sys.argv) < 3: + print('Usage: ' + sys.argv[0] + ' <token> <project_id>') + exit(1) + +token = sys.argv[1] +project_id = sys.argv[2] + +base_url = 'https://gitedu.hesge.ch/api/v4/projects/' +params = {'simple': 'true'} +headers = {'PRIVATE-TOKEN': token} + +repositories = requests.get(base_url + project_id + '/forks', params=params, headers=headers).json() + +for repo in repositories: + repo_url = base_url + str(repo['id']) + '/members' + members = requests.get(repo_url, headers=headers).json() + + ssh_url_to_repo = repo['ssh_url_to_repo'] + web_url = repo['web_url'] + members_names = '' + + for member in members: + if member['access_level'] > 20: # Access level greater than "Reporter" + members_names += member['username'] + ', ' + + print('Members: ' + members_names) + print('Web url: ' + web_url) + print('Cloning in "repositories/' + repo['namespace']['name'] + '"\n') + subprocess.run(["git", "clone", "-q", ssh_url_to_repo, "repositories/" + repo['namespace']['name']]) diff --git a/project_id.png b/project_id.png new file mode 100644 index 0000000000000000000000000000000000000000..2671a3fb443acc0b326d14adaf81f5473fb2ea0a Binary files /dev/null and b/project_id.png differ diff --git a/public b/public new file mode 160000 index 0000000000000000000000000000000000000000..51f16857a239d5a0272ad969d97d1c2b726965f6 --- /dev/null +++ b/public @@ -0,0 +1 @@ +Subproject commit 51f16857a239d5a0272ad969d97d1c2b726965f6