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

Students are now developers with push and merge access on master

Add optionnal parameters "expires_at" to remove students at date

In create_repo_for_students.py
parent 3b552b1e
No related branches found
No related tags found
No related merge requests found
...@@ -30,7 +30,7 @@ Crée un groupe au sens gitlab du terme, nommé `group_name`, avec la visibilit ...@@ -30,7 +30,7 @@ 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> python3 create_repo_for_students.py <token> <import_url> <group_id> <project_name> <student1,student2,...,studentN> <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'étudiants. Détail des arguments :
- `token` : le token gitlab. - `token` : le token gitlab.
...@@ -38,6 +38,7 @@ Crée un dépôt git (projet) au sein d'un groupe à partir de l'URL d'un projet ...@@ -38,6 +38,7 @@ Crée un dépôt git (projet) au sein d'un groupe à partir de l'URL d'un projet
- `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. - `student1,student2,...,studentN` : une liste de login gitlab des étudiants. Les login sont séparés par une virgule. Peut contenir un seul login.
- `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
```bash ```bash
......
...@@ -6,7 +6,7 @@ import requests ...@@ -6,7 +6,7 @@ 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>') print('Usage: ' + sys.argv[0] + ' <token> <import_url> <group_id> <project_name> <student1,student2,...,studentN> <expires_at>')
exit(1) exit(1)
token = sys.argv[1] token = sys.argv[1]
...@@ -19,14 +19,14 @@ headers = {'PRIVATE-TOKEN': token} ...@@ -19,14 +19,14 @@ headers = {'PRIVATE-TOKEN': token}
# Get students ids from their usernames # Get students ids from their usernames
users_names = sys.argv[5].split(',') users_names = sys.argv[5].split(',')
users_ids = [] user_ids = []
for username in users_names: for username in users_names:
user_requested = requests.get(base_url + '/users', params={'username': username}, headers=headers).json() user_requested = requests.get(base_url + '/users', params={'username': username}, 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' % username)
exit(1) exit(1)
user_id = user_requested[0]['id'] user_id = user_requested[0]['id']
users_ids.append(user_id) user_ids.append(user_id)
# Create project from name, basis and group given # Create project from name, basis and group given
params = {'name': project_name, 'import_url': import_url, 'namespace_id': group_id, 'visibility': 'private'} params = {'name': project_name, 'import_url': import_url, 'namespace_id': group_id, 'visibility': 'private'}
...@@ -37,14 +37,25 @@ if 'message' in project: ...@@ -37,14 +37,25 @@ if 'message' in project:
exit(1) exit(1)
print("Project '" + project['name'] + "' at '" + project['web_url'] + "' created") print("Project '" + project['name'] + "' at '" + project['web_url'] + "' created")
# Add each student as project's maintainer (level 40) # Allow users with developer access level to push and merge on master
for user_id in users_ids: access_level = 30
params = {'user_id': user_id, 'access_level': 40} params = {'name': 'master', 'push_access_level': str(access_level), 'merge_access_level': str(access_level)}
requests.post(base_url + '/projects/' + str(project['id']) + '/protected_branches', params=params, headers=headers).json()
# Add each student as project's developer (level 30)
for user_id in user_ids:
params = {'user_id': user_id, 'access_level': access_level}
if len(sys.argv) > 6:
expires_at = sys.argv[6]
params['expires_at'] = expires_at
new_user = requests.post(base_url + '/projects/' + str(project['id']) + '/members', params=params, headers=headers).json() new_user = requests.post(base_url + '/projects/' + str(project['id']) + '/members', params=params, headers=headers).json()
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("Adding '" + new_user['name'] + "' (" + new_user['username'] + ") in '" + project['name'] + "'") 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'])
# 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