#!/usr/bin/env python3 import os import requests import sys GSTREAMER_MODULES = [ 'gst-build', 'gstreamer', 'gst-plugins-base', 'gst-plugins-good', 'gst-plugins-bad', 'gst-plugins-ugly', 'gst-libav', 'gst-devtools', 'gst-docs', 'gst-editing-services', 'gst-omx', 'gst-python', 'gst-rtsp-server' ] MANIFEST_TEMPLATE = """ %s """ def request(path): gitlab_header = {'JOB_TOKEN': os.environ["CI_JOB_TOKEN"]} return requests.get('https://gitlab.gnome.org/api/v4/' + path, headers=gitlab_header).json() def find_repository_sha(module, branchname): for project in request('projects?search=' + module): if project['name'] != module: continue if 'namespace' not in project: # print("No 'namespace' in: %s - ignoring?" % project, file=sys.stderr) continue if project['namespace']['name'] in useful_namespaces: if project['namespace']['name'] == user_namespace: # If we have a branch with same name, use it. for branch in request('%s/repository/branches' % project['id']): if branch['name'] == branchname: print("%s/%s" % (project['namespace']['name'], branchname)) return 'user', branch['commit']['id'] else: for branch in request('%s/repository/branches"' % project['id']): if branch['name'] == branchname: print("gstreamer/%s" % (branchname)) return 'gstreamer', branch['commit']['id'] branch, = request('%s/repository/branches?search=master' % project['id']) print('gstreamer/master') return 'gstreamer', branch.attributes['commit']['id'] print('origin/master') return 'origin', 'master' if __name__ == "__main__": user_namespace = os.environ['CI_PROJECT_NAMESPACE'] project_name = os.environ['CI_PROJECT_NAME'] branchname = os.environ['CI_COMMIT_REF_NAME'] useful_namespaces = ['gstreamer'] if branchname != 'master': useful_namespaces.append(user_namespace) # Shouldn't be needed. remote = "git://anongit.freedesktop.org/gstreamer/" projects = '' project_template = ' \n' user_remote = os.path.dirname(os.environ['CI_PROJECT_URL']) for module in GSTREAMER_MODULES: print("Checking %s:" % module, end=' ') remote = "origin" revision = None if module == project_name: revision = os.environ['CI_COMMIT_SHA'] remote = "user" print("%s/%s" % (user_namespace, branchname)) else: remote, revision = find_repository_sha(module, branchname) if not revision: revision = 'master' projects += project_template % (module, remote, revision) with open('manifest.xml', mode='w') as manifest: print(MANIFEST_TEMPLATE % (user_remote, projects), file=manifest)