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

Add create_group script and update others and readme

parent 4f6b299a
No related branches found
No related tags found
No related merge requests found
...@@ -22,6 +22,12 @@ Tous les scripts sont (actuellement) écrits en python et testés avec la versio ...@@ -22,6 +22,12 @@ Tous les scripts sont (actuellement) écrits en python et testés avec la versio
![image](doc/project_id.png) ![image](doc/project_id.png)
### create_group.py
```bash
python3 create_group.py <token> <group_name> <visibility>
```
Crée un groupe au sens gitlab du terme, nommé `group_name`, avec la visibilité optionnelle `visibility` (`private`, `internal` ou `public`), par défaut privée. Si le groupe existe déjà, ne fait rien. Retourne le `group_id` du groupe créé, nécessaire pour `create_repo_for_students.py` par exemple.
### 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>
...@@ -29,18 +35,18 @@ python3 create_repo_for_students.py <token> <import_url> <group_id> <project_nam ...@@ -29,18 +35,18 @@ python3 create_repo_for_students.py <token> <import_url> <group_id> <project_nam
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.
- `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. - `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.
### clone_all_repos_in_group.py ### clone_all_repos_in_group.py
```bash ```bash
python3 clone_all_repos_in_group.py <token> <group_id> python3 clone_all_repos_in_group.py <token> <group_id> <directory>
``` ```
Clone tous les repositories d'un groupe `group_id` donné dans un répertoire nommé `repositories`. Affiche sur la sortie standard les membres du groupe, l'url web du repo et dans quel sous-répertoire se trouvent les fichiers. Clone tous les repositories d'un groupe `group_id` donné dans un répertoire nommé `directory`. Affiche sur la sortie standard les membres du groupe, l'url web du repo et dans quel sous-répertoire se trouvent les fichiers.
### clone_all_forks.py ### clone_all_forks.py
```bash ```bash
python3 clone_all_forks.py <token> <project_id> python3 clone_all_forks.py <token> <project_id> <directory>
``` ```
Clone tous les forks d'un projet `project_id` donné dans un répertoire nommé `repositories`. Affiche sur la sortie standard les membres du groupe (avec un droit d'accès supérieur à *Reporter*), l'url web du repo et dans quel sous-répertoire se trouvent les fichiers. Clone tous les forks d'un projet `project_id` donné dans un répertoire nommé `directory`. Affiche sur la sortie standard les membres du groupe (avec un droit d'accès supérieur à *Reporter*), l'url web du repo et dans quel sous-répertoire se trouvent les fichiers.
#!/usr/bin/env python3 #!/usr/bin/env python3
import os
import sys import sys
import json import json
import requests import requests
import subprocess import subprocess
if len(sys.argv) < 3: if len(sys.argv) < 4:
print('Usage: ' + sys.argv[0] + ' <token> <project_id>') print('Usage: ' + sys.argv[0] + ' <token> <project_id> <directory>')
exit(1)
directory = sys.argv[3]
try:
os.mkdir(directory)
except OSError:
print("Creation of the directory '%s' failed, exit\n" % directory)
exit(1) exit(1)
token = sys.argv[1] token = sys.argv[1]
...@@ -32,5 +40,6 @@ for repo in repositories: ...@@ -32,5 +40,6 @@ for repo in repositories:
print('Members: ' + members_names) print('Members: ' + members_names)
print('Web url: ' + web_url) print('Web url: ' + web_url)
print('Cloning in "repositories/' + repo['namespace']['name'] + '"\n') print('Cloning in "' + directory + '/' + repo['namespace']['name'] + '"\n')
subprocess.run(["git", "clone", "-q", ssh_url_to_repo, "repositories/" + repo['namespace']['name']]) # TODO: checkout at date
subprocess.run(["git", "clone", "-q", ssh_url_to_repo, directory + '/' + repo['namespace']['name']])
#!/usr/bin/env python3 #!/usr/bin/env python3
import os
import sys import sys
import json import json
import requests import requests
import subprocess import subprocess
if len(sys.argv) < 3: if len(sys.argv) < 4:
print('Usage: ' + sys.argv[0] + ' <token> <group_id>') print('Usage: ' + sys.argv[0] + ' <token> <group_id> <directory>')
exit(1)
directory = sys.argv[3]
try:
os.mkdir(directory)
except OSError:
print("Creation of the directory '%s' failed, exit\n" % directory)
exit(1) exit(1)
token = sys.argv[1] token = sys.argv[1]
...@@ -37,5 +45,6 @@ for repo in repositories: ...@@ -37,5 +45,6 @@ for repo in repositories:
print('Members: ' + members_names) print('Members: ' + members_names)
print('Web url: ' + web_url) print('Web url: ' + web_url)
print('Cloning in "repositories/' + repo['path'] + '"\n') print('Cloning in "' + directory + '/' + repo['path'] + '"\n')
subprocess.run(["git", "clone", "-q", ssh_url_to_repo, "repositories/" + repo['path']]) # TODO: checkout at date
subprocess.run(["git", "clone", "-q", ssh_url_to_repo, directory + '/' + repo['path']])
\ No newline at end of file
#!/usr/bin/env python3
import os
import sys
import json
import requests
import subprocess
if len(sys.argv) < 3:
print('Usage: ' + sys.argv[0] + ' <token> <group_name> <visibility>')
exit(1)
token = sys.argv[1]
group_name = sys.argv[2]
visibility = 'private'
if len(sys.argv) > 3:
visibility = sys.argv[3]
base_url = 'https://gitedu.hesge.ch/api/v4/'
params = {'path': group_name, 'name': group_name, 'visibility': visibility}
headers = {'PRIVATE-TOKEN': token}
group = requests.post(base_url + '/groups', params=params, headers=headers).json()
if 'message' in group:
print('Error in creating group: %s' % group)
exit(1)
print("Group '" + group['name'] + "' with id '" + str(group['id']) + "' and visibility '" + group['visibility'] + "' available at '" + group['web_url'] + "'")
print(str(group['id']))
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment