diff --git a/README.md b/README.md index dcbb0902614b2c8e63cd8fa93f25562d0730beab..a8d7e912637125b61ae23688de1071205d421f3e 100644 --- a/README.md +++ b/README.md @@ -30,14 +30,14 @@ Crée un groupe au sens gitlab du terme, nommé `group_name`, avec la visibilit ### create_repo_for_students.py ```bash -python3 create_repo_for_students.py <token> <import_url> <group_id> <project_name> <student1,student2,...,studentN> <expires_at> +python3 create_repo_for_students.py <token> <import_url> <group_id> <project_name> <student-mail1,student-mail2,...,student-mailN> <expires_at> ``` -Crée un dépôt git (projet) au sein d'un groupe à partir de l'URL d'un projet existant pour une liste d'étudiants. Détail des arguments : +Crée un dépôt git (projet) au sein d'un groupe à partir de l'URL d'un projet existant pour une liste d'emails d'étudiants. Détail des arguments : - `token` : le token gitlab. - `import_url` : l'URL (http) du projet (repository) existant. Ce projet doit être public. - `group_id` : l'identifiant du groupe dédié au cours/TP, créé précédemment (avec `create_group.py` par exemple). - `project_name` : le nom du nouveau repository à créer pour le ou les étudiants concernés. -- `student1,student2,...,studentN` : une liste de login gitlab des étudiants. Les login sont séparés par une virgule. Peut contenir un seul login. +- `student-mail1,student-mail2,...,student-mailN` : une liste d'emails des étudiants. Les emails sont séparés par une virgule. Peut contenir un seul email. - `expires_at`: optionnel, au format `AAAA-MM-DD`, supprime les étudiants ajoutés à la date donnée. ### clone_all_repos_in_group.py @@ -58,6 +58,6 @@ Clone tous les forks d'un projet `project_id` donné dans un répertoire nommé ``` Un script bash est également disponible, `create_group_and_repos.sh` qui permet de "batcher" les opérations de création de groupe et de repositories à partir d'un fichier texte `repos_students` formaté ainsi : ``` -repository1;user1,user2 -repository2;user3,user4 +repository1;email1,email2 +repository2;email3,email4 ``` diff --git a/create_group_and_repos.sh b/create_group_and_repos.sh index 9556f55c58a922638c8281ec592f6c793a5b5bb3..15bc4bba545c305440b397492b461b79370ab27c 100755 --- a/create_group_and_repos.sh +++ b/create_group_and_repos.sh @@ -17,6 +17,6 @@ printf "$group\n\n" for line in $(cat $repos_students); do project_name=$(echo $line | cut -d';' -f1) students=$(echo $line | cut -d';' -f2) - new_repo=$(scripts/create_repo_for_students.py $token $import_url $group_id $project_name $students) + new_repo=$(scripts/create_repo_for_students.py $token $import_url $group_id "$project_name" $students) printf "$new_repo\n\n" done diff --git a/scripts/create_repo_for_students.py b/scripts/create_repo_for_students.py index 3d3f008b9f6ac5b0c716db471293c84baede9a0b..8909d4944bac799e3b54288bb45babc2127a86b7 100755 --- a/scripts/create_repo_for_students.py +++ b/scripts/create_repo_for_students.py @@ -6,24 +6,25 @@ import requests import subprocess if len(sys.argv) < 6: - print('Usage: ' + sys.argv[0] + ' <token> <import_url> <group_id> <project_name> <student1,student2,...,studentN> <expires_at>') + print('Usage: ' + sys.argv[0] + ' <token> <import_url> <group_id> <project_name> <student-mail1,student-mail2,...,student-mailN> <expires_at>') exit(1) token = sys.argv[1] import_url = sys.argv[2] group_id = sys.argv[3] -project_name = sys.argv[4] +# split '@' in the case when project name = student's email +project_name = sys.argv[4].split('@')[0] base_url = 'https://gitedu.hesge.ch/api/v4' headers = {'PRIVATE-TOKEN': token} -# Get students ids from their usernames -users_names = sys.argv[5].split(',') +# Get students ids from their emails +users_emails = sys.argv[5].split(',') user_ids = [] -for username in users_names: - user_requested = requests.get(base_url + '/users', params={'username': username}, headers=headers).json() +for email in users_emails: + user_requested = requests.get(base_url + '/users', params={'search': email}, headers=headers).json() if len(user_requested) == 0: - print('No user %s found, operation aborted' % username) + print('No user %s found, operation aborted' % email) exit(1) user_id = user_requested[0]['id'] user_ids.append(user_id) @@ -53,9 +54,10 @@ for user_id in user_ids: if 'message' in new_user: print('Error in adding user: %s' % new_user) else: - print( - "Adding '" + new_user['name'] + "' (" + new_user['username'] + ") in '" - + project['name'] + "' with access level: " + str(new_user['access_level']) - + ", expires at: " + new_user['expires_at']) + out = ("Adding '" + new_user['name'] + "' (" + new_user['username'] + ") in '" + + project['name'] + "' with access level: " + str(new_user['access_level'])) + if len(sys.argv) > 6: + out += ", expires at: " + new_user['expires_at'] + print(out) # Do not forget : students have to add second remote in their local repositories for pulling last changes.