# 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)