Skip to content
Snippets Groups Projects
Select Git revision
  • main
  • flask-chall
  • open-test-page
  • master
4 results

README.md

Blame
  • 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)