Skip to content
Snippets Groups Projects
Commit ffd55827 authored by steven.liatti's avatar steven.liatti
Browse files

Improve creation scripts : create repositories with emails instead of gitlab ids

parent 3a5905e6
No related branches found
No related tags found
No related merge requests found
...@@ -30,14 +30,14 @@ Crée un groupe au sens gitlab du terme, nommé `group_name`, avec la visibilit ...@@ -30,14 +30,14 @@ Crée un groupe au sens gitlab du terme, nommé `group_name`, avec la visibilit
### create_repo_for_students.py ### create_repo_for_students.py
```bash ```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. - `token` : le token gitlab.
- `import_url` : l'URL (http) du projet (repository) existant. Ce projet doit être public. - `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). - `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. - `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. - `expires_at`: optionnel, au format `AAAA-MM-DD`, supprime les étudiants ajoutés à la date donnée.
### clone_all_repos_in_group.py ### 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é ...@@ -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 : 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 repository1;email1,email2
repository2;user3,user4 repository2;email3,email4
``` ```
...@@ -17,6 +17,6 @@ printf "$group\n\n" ...@@ -17,6 +17,6 @@ printf "$group\n\n"
for line in $(cat $repos_students); do for line in $(cat $repos_students); do
project_name=$(echo $line | cut -d';' -f1) project_name=$(echo $line | cut -d';' -f1)
students=$(echo $line | cut -d';' -f2) 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" printf "$new_repo\n\n"
done done
...@@ -6,24 +6,25 @@ import requests ...@@ -6,24 +6,25 @@ import requests
import subprocess import subprocess
if len(sys.argv) < 6: 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) exit(1)
token = sys.argv[1] token = sys.argv[1]
import_url = sys.argv[2] import_url = sys.argv[2]
group_id = sys.argv[3] 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' base_url = 'https://gitedu.hesge.ch/api/v4'
headers = {'PRIVATE-TOKEN': token} headers = {'PRIVATE-TOKEN': token}
# Get students ids from their usernames # Get students ids from their emails
users_names = sys.argv[5].split(',') users_emails = sys.argv[5].split(',')
user_ids = [] user_ids = []
for username in users_names: for email in users_emails:
user_requested = requests.get(base_url + '/users', params={'username': username}, headers=headers).json() user_requested = requests.get(base_url + '/users', params={'search': email}, headers=headers).json()
if len(user_requested) == 0: if len(user_requested) == 0:
print('No user %s found, operation aborted' % username) print('No user %s found, operation aborted' % email)
exit(1) exit(1)
user_id = user_requested[0]['id'] user_id = user_requested[0]['id']
user_ids.append(user_id) user_ids.append(user_id)
...@@ -53,9 +54,10 @@ for user_id in user_ids: ...@@ -53,9 +54,10 @@ for user_id in user_ids:
if 'message' in new_user: if 'message' in new_user:
print('Error in adding user: %s' % new_user) print('Error in adding user: %s' % new_user)
else: else:
print( out = ("Adding '" + new_user['name'] + "' (" + new_user['username'] + ") in '"
"Adding '" + new_user['name'] + "' (" + new_user['username'] + ") in '" + project['name'] + "' with access level: " + str(new_user['access_level']))
+ project['name'] + "' with access level: " + str(new_user['access_level']) if len(sys.argv) > 6:
+ ", expires at: " + new_user['expires_at']) 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. # Do not forget : students have to add second remote in their local repositories for pulling last changes.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment