From: Yonghee Han Date: Thu, 24 Mar 2016 07:18:51 +0000 (+0900) Subject: 1) add & update below funtion for the buildservice.py X-Git-Tag: submit/trunk/20190927.012743~576^2~30 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F73%2F63473%2F3;p=services%2Fjenkins-scripts.git 1) add & update below funtion for the buildservice.py ---------------------------------------------------- update_buildstatus update_info link_projectDev get_user_meta create_copy_pac get_dependson show_upstream_rev disable_build_flag default_build_flag 2) Make file at packages depends & revision of OBS for the job_buildlog.py Change-Id: I0d71f26ab270cd9ac54cdd48e2613963102856db --- diff --git a/common/buildservice.py b/common/buildservice.py old mode 100644 new mode 100755 index fe3aac6..779157f --- a/common/buildservice.py +++ b/common/buildservice.py @@ -526,6 +526,11 @@ class BuildService(OSC): return (targetprj, targetpkg) + def update_buildstatus(self,info,prj,pkg=None): + saved_info = self.get_info(prj, pkg) + saved_info["buildstatus"]=info["buildstatus"] + self.set_description(json.dumps(saved_info), prj, pkg) + def update_info(self, info, prj, pkg=None): """Updated jsoned info dictionary, saved in description.""" saved_info = self.get_info(prj, pkg) @@ -547,6 +552,10 @@ class BuildService(OSC): else: # reset 'images' saved_info['images'] = info['images'] + if 'snapshot' in info: + saved_info['snapshot'] = info['snapshot'] + if 'chksnap' in info: + saved_info['chksnap'] = info['chksnap'] self.set_description(json.dumps(saved_info), prj, pkg) def get_info(self, prj, pkg=None): @@ -631,6 +640,41 @@ class BuildService(OSC): self.set_meta(ElementTree.tostring(xml_root), project) + def link_projectDev(self, project, src=None, linktype="all", buildtype="local", blocktype="local", repo=None): + """ + modify the meta conf to make it linked with src project + """ + if src and not self.exists(src): + raise ObsError('base project: %s not exists' % src) + + if not self.exists(project): + raise ObsError('project: %s not exists' % project) + + meta_xml = self.get_meta(project) + xml_root = ElementTree.fromstringlist(meta_xml) + + if xml_root.find('link') is not None: + raise ObsError('project: %s already linked with %s' + %(project, xml_root.find('link').get('project'))) + # Add linked project + link_element = ElementTree.Element('link', + {"project": "%s" %src}) + xml_root.append(link_element) + + # remove repo + if not repo == None: + for repo_element in xml_root.findall('repository'): + if not repo_element.get('name') == repo: + xml_root.remove(repo_element) + + # Set linkedbuild attribute for all repositories + for repo_element in xml_root.findall('repository'): + repo_element.set('linkedbuild', linktype) + repo_element.set('rebuild', buildtype) + repo_element.set('block', blocktype) + + self.set_meta(ElementTree.tostring(xml_root), project) + def unlink_project(self, project): """ modify the meta conf to unlink the project @@ -706,3 +750,88 @@ class BuildService(OSC): elem.remove(subelem) ElementTree.SubElement(elem, value) self.set_meta(ElementTree.tostring(root), project, package) + + def get_user_meta(self,apiurl, user): + u = core.makeurl(apiurl, ['person', core.quote_plus(user)]) + try: + f = core.http_GET(u) + return ''.join(f.readlines()) + except urllib2.HTTPError: + print 'user \'%s\' not found' % user + return None + + def create_copy_pac(self, src_project, src_package, dst_project, dst_package, + client_side_copy=False, keep_maintainers=False,keep_develproject=False, + expand=False, revision=None, comment=None, + force_meta_update=None, keep_link=None): + """create a copy of package + Copying can be done by downloading the files from one package and commit + them into the other by uploading them (client-side copy) -- + or by the server, in a single api call. + """ + core.copy_pac(self.apiurl, src_project, src_package, self.apiurl, dst_project, dst_package, + client_side_copy,revision) + + def get_dependson(self, project, repo, arch, packages=None, reverse=None): + """ + get_dependson + """ + query = [] + + if packages: + for p in packages: + query.append('package=%s' % core.quote_plus(p)) + + if reverse: + query.append('view=revpkgnames') + else: + query.append('view=pkgnames') + + url = core.makeurl(self.apiurl, ['build', project, repo, arch,'_builddepinfo'],query=query) + return core.http_GET(url).read() + + def show_upstream_rev(self, project, package, revision=None, expand=False, linkrev=None, meta=False, include_service_files=False): + """ + show upstream rev + """ + return core.show_upstream_rev(self.apiurl, project, package, revision, expand, linkrev, meta, include_service_files) + + def disable_build_flag(self, prj,repo, flag, status): + """disable build flag for the project """ + #Started POST "/source/acl-link?cmd=set_flag&flag=build&status=disable" + query = { 'cmd': 'set_flag' } + if flag: + query['flag'] = flag + if repo: + query['repository'] = repo + if status: + query['status'] = status + + u = core.makeurl(self.apiurl, ['source', prj], query=query) + try: + print u + f = core.http_POST(u) + except urllib2.HTTPError, e: + e.osc_msg = 'could not trigger disable build flag for project \'%s\'' % (prj) + raise + + return + + def default_build_flag(self, prj, repo, flag): + """default build flag for the project """ + # Started POST "/source/acl-link?cmd=remove_flag&flag=build + query = { 'cmd': 'remove_flag' } + if repo: + query['repository'] = repo + if flag: + query['flag'] = flag + + u = core.makeurl(self.apiurl, ['source', prj], query=query) + try: + print u + f = core.http_POST(u) + except urllib2.HTTPError, e: + e.osc_msg = 'could not trigger default build flag for project \'%s\'' % (prj) + raise + return + diff --git a/job_buildlogs.py b/job_buildlogs.py index eb114ec..47c8910 100755 --- a/job_buildlogs.py +++ b/job_buildlogs.py @@ -28,6 +28,7 @@ import shutil from xml.dom import minidom from common.buildtrigger import trigger_info +from common.buildservice import BuildService from common.utils import sync def restructure_output_dir(package_build_dict, target_path): @@ -94,6 +95,12 @@ def main(): project = content.get("project") + obs_api = os.getenv("OBS_API_URL") + obs_user = os.getenv("OBS_API_USERNAME") + obs_passwd = os.getenv("OBS_API_PASSWD") + + build = BuildService(obs_api, obs_user, obs_passwd) + for repository in content.get("repo").keys(): project_logs_base = os.path.join(build_base_path, project, @@ -108,6 +115,29 @@ def main(): 'buildlogs', repository)) + # Make file at packages depends of OBS + os.makedirs(os.path.join(sync_out_dir,'builddata','depends')) + reverse = 1 + repo_status = build.get_repo_state(project) + for target_arch,status in repo_status.items(): + repo = target_arch.split("/")[0] + arch = target_arch.split("/")[1] + xml = build.get_dependson(project, repo, arch, None, reverse) + + file_name = os.path.join(sync_out_dir,'builddata','depends',"%s_%s_%s_revpkgdepends.xml"%(project,repo,arch)) + #print file_name + with open(file_name, 'w') as xml_file: + xml_file.write(xml) + + # Make file at packages revision of OBS + packages_rev = dict() + for package in build.get_package_list(project): + packages_rev[package] = build.show_upstream_rev(project, package) + file_name = os.path.join(sync_out_dir,'builddata','depends', '%s_pkgrevisions.xml' % project) + #print str(packages_rev) + with open(file_name, 'w') as rev_file: + rev_file.write(str(packages_rev)) + # sync to donwload server sync(sync_out_dir, sync_dest)