Select Git revision
-
Radnai László authoredRadnai László authored
setup.py 3.07 KiB
# 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)