From bbf8159cdb724b6b4ddbdca21dc8a569c497177e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Robotka?= <robotka.adrian@gmail.com> Date: Sun, 10 Jan 2021 23:40:21 +0100 Subject: [PATCH] add scripts --- gitlab-api-opressor/.gitignore | 4 + gitlab-api-opressor/README.md | 6 +- gitlab-api-opressor/delete_merged_branches.py | 14 ++ gitlab-api-opressor/env.example | 1 - gitlab-api-opressor/functions.py | 35 +++++ gitlab-api-opressor/list_projects.py | 9 ++ gitlab-api-opressor/regulator.sh | 16 --- gitlab-api-opressor/requirements.txt | 1 + gitlab-api-opressor/setup.py | 126 ------------------ gitlab-api-opressor/setup_projects.py | 39 ++++++ 10 files changed, 106 insertions(+), 145 deletions(-) create mode 100644 gitlab-api-opressor/delete_merged_branches.py delete mode 100644 gitlab-api-opressor/env.example create mode 100644 gitlab-api-opressor/functions.py create mode 100644 gitlab-api-opressor/list_projects.py delete mode 100755 gitlab-api-opressor/regulator.sh create mode 100644 gitlab-api-opressor/requirements.txt delete mode 100644 gitlab-api-opressor/setup.py create mode 100644 gitlab-api-opressor/setup_projects.py diff --git a/gitlab-api-opressor/.gitignore b/gitlab-api-opressor/.gitignore index 0a764a4..ef2f789 100644 --- a/gitlab-api-opressor/.gitignore +++ b/gitlab-api-opressor/.gitignore @@ -1 +1,5 @@ env +venv +.venv +.idea +__pycache__ diff --git a/gitlab-api-opressor/README.md b/gitlab-api-opressor/README.md index d74f34d..007b725 100644 --- a/gitlab-api-opressor/README.md +++ b/gitlab-api-opressor/README.md @@ -1,8 +1,10 @@ -# Scripts to regulate git.sch repo's +# Scripts to regulate repo's ## Usage ```sh +echo -n 'gitlab personal token' > env + # install virtualenv on your machine pip3 install --user virtualenv export PATH="~/.local/bin:$PATH" @@ -17,5 +19,5 @@ cp env.example env vim env # rule them all -./regulator.sh +./run.sh ``` \ No newline at end of file diff --git a/gitlab-api-opressor/delete_merged_branches.py b/gitlab-api-opressor/delete_merged_branches.py new file mode 100644 index 0000000..1ad1943 --- /dev/null +++ b/gitlab-api-opressor/delete_merged_branches.py @@ -0,0 +1,14 @@ +from functions import * + + +def repo_action(project_meta): + path = "/projects/" + str(project_meta['id']) + "/repository/merged_branches" + r = requests.delete(url=get_url(path)) + if r.ok: + print("Updated: " + project_meta['name']) + else: + print("ERROR: " + project_meta['name']) + + +if __name__ == "__main__": + iterate_on_groups(repo_action) diff --git a/gitlab-api-opressor/env.example b/gitlab-api-opressor/env.example deleted file mode 100644 index d0898fe..0000000 --- a/gitlab-api-opressor/env.example +++ /dev/null @@ -1 +0,0 @@ -PERSONAL_API_TOKEN=secret diff --git a/gitlab-api-opressor/functions.py b/gitlab-api-opressor/functions.py new file mode 100644 index 0000000..8df7133 --- /dev/null +++ b/gitlab-api-opressor/functions.py @@ -0,0 +1,35 @@ +import requests + +personal_token = "please create an env file" + + +def get_url(path, extra="") -> str: + url = 'https://git.sch.bme.hu/api/v4/' + url += path + url += "?" + url += "access_token=" + personal_token + extra + return url + + +def request(path): + r = requests.get(url=get_url(path)) + return r.json() + + +def iterate_group(group_id: str, repo_action): + url = "groups/" + group_id + group = request(url) + for project_meta in group['projects']: + if not project_meta['archived']: + repo_action(project_meta) + subgroups = request(url + "/subgroups") + + for subgroup in subgroups: + iterate_group(str(subgroup['id']), repo_action) + + +def iterate_on_groups(repo_action): + global personal_token + env_file = open("env", "r") + personal_token = env_file.read() + iterate_group("1604", repo_action) diff --git a/gitlab-api-opressor/list_projects.py b/gitlab-api-opressor/list_projects.py new file mode 100644 index 0000000..b8bcdae --- /dev/null +++ b/gitlab-api-opressor/list_projects.py @@ -0,0 +1,9 @@ +from functions import * + + +def repo_action(project_meta): + print('git clone ' + project_meta['ssh_url_to_repo']) + + +if __name__ == "__main__": + iterate_on_groups(repo_action) diff --git a/gitlab-api-opressor/regulator.sh b/gitlab-api-opressor/regulator.sh deleted file mode 100755 index ce7a40e..0000000 --- a/gitlab-api-opressor/regulator.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -# halt on error -set -e - -source ./env -export PERSONAL_API_TOKEN - -log() { - echo '######################' - echo "# $*" - echo '######################' -} - -log 'Setup all the things' -python3 setup.py diff --git a/gitlab-api-opressor/requirements.txt b/gitlab-api-opressor/requirements.txt new file mode 100644 index 0000000..f229360 --- /dev/null +++ b/gitlab-api-opressor/requirements.txt @@ -0,0 +1 @@ +requests diff --git a/gitlab-api-opressor/setup.py b/gitlab-api-opressor/setup.py deleted file mode 100644 index 8fc7b83..0000000 --- a/gitlab-api-opressor/setup.py +++ /dev/null @@ -1,126 +0,0 @@ -# importing the requests library -import requests -import os - -host = "git.sch.bme.hu" -personal_token = os.environ['PERSONAL_API_TOKEN'] - - -def get_url(path) -> str: - url = "https://" - url += host - url += "/api/v4/" - url += path - url += "?" - url += "access_token=" + personal_token - return url - - -def request(path): - r = requests.get(url=get_url(path)) - return r.json() - - -def iterate_group(group_id: int): - url = "groups/" + str(group_id) - group = request(url) - for project_meta in group['projects']: - repo_action(project_meta) - subgroups = request(url + "/subgroups") - - for subgroup in subgroups: - iterate_group(str(subgroup['id'])) - - -def repo_action(project_meta): - # print(project_meta) - setup_project(project_meta) - add_youtrack(project_meta) - add_mattermost(project_meta) - check_tags(project_meta) - - -def update_project(project_meta, data, postfix=''): - path = 'projects/' + str(project_meta['id']) + postfix - r = requests.put(url=get_url(path), data=data) - if r.ok: - print("Updated: " + project_meta['name']) - else: - print("ERROR: " + project_meta['name']) - - -def setup_project(project_meta): - data = { - 'merge_method': 'rebase_merge', - - 'merge_requests_enabled': True, - 'lfs_enabled': True, - 'only_allow_merge_if_pipeline_succeeds': True, - 'only_allow_merge_if_all_discussions_are_resolved': True, - 'remove_source_branch_after_merge': True, - - 'issues_enabled': False, - 'snippets_enabled': False, - 'wiki_enabled': False, - 'container_registry_enabled': False, - 'shared_runners_enabled': False, - 'auto_devops_enabled': False - } - update_project(project_meta, data) - - -def add_youtrack(project_meta): - postfix = '/services/youtrack' - yt = 'https://youtrack.kszk.bme.hu/' - data = { - 'issues_url': yt + 'issue/:id', - 'project_url': yt + '/projects/9b25aaac-1002-4fbc-ab29-c4bc7ff365da', - 'description': 'KSZK YouTrack' - } - update_project(project_meta, data, postfix) - - -def add_mattermost(project_meta): - postfix = '/services/mattermost' - mm = 'https://mattermost.kszk.bme.hu/hooks' - data = { - 'webhook': mm + '/c57a1tbduj8k9rsh71jd1gufey', - 'notify_only_broken_pipelines': True, - 'merge_requests_events': True, - 'tag_push_events': True - } - update_project(project_meta, data, postfix) - - -def check_tags(project_meta): - path = 'projects/' - path += str(project_meta['id']) - path += '/protected_tags' - tags = request(path) - # unprotect_tags(path, tags) - if len(tags) == 0: - protect_tags(path) - - -def protect_tags(path): - data = { - 'name': '1.*', - 'create_access_level': '40' - } - r = requests.post(url=get_url(path), data=data) - if r.ok: - print("Protected") - else: - print("ERROR protecting tag") - - -def unprotect_tags(path, tags): - path += '/' + tags[0]['name'] - r = requests.delete(url=get_url(path)) - if r.ok: - print("tag deleted") - else: - print("ERROR deleting tag") - - -iterate_group(1604) diff --git a/gitlab-api-opressor/setup_projects.py b/gitlab-api-opressor/setup_projects.py new file mode 100644 index 0000000..d3efae6 --- /dev/null +++ b/gitlab-api-opressor/setup_projects.py @@ -0,0 +1,39 @@ +from functions import * + + +def repo_action(project_meta): + setup_project(project_meta) + + +def update_project(project_meta, data, postfix=''): + path = 'projects/' + str(project_meta['id']) + postfix + r = requests.put(url=get_url(path), data=data) + if r.ok: + print("Updated: " + project_meta['name']) + else: + print("ERROR: " + project_meta['name']) + print(r.content) + + +def setup_project(project_meta): + data = { + 'merge_method': 'rebase_merge', + + 'merge_requests_enabled': True, + 'lfs_enabled': True, + 'only_allow_merge_if_pipeline_succeeds': True, + 'only_allow_merge_if_all_discussions_are_resolved': True, + 'remove_source_branch_after_merge': True, + + 'issues_enabled': False, + 'snippets_enabled': False, + 'wiki_enabled': False, + 'container_registry_enabled': False, + 'shared_runners_enabled': False, + 'auto_devops_enabled': False + } + update_project(project_meta, data) + + +if __name__ == "__main__": + iterate_on_groups(repo_action) -- GitLab