Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package openSUSE-release-tools for openSUSE:Factory checked in at 2022-03-29 18:15:05 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/openSUSE-release-tools (Old) and /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.1900 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openSUSE-release-tools" Tue Mar 29 18:15:05 2022 rev:412 rq:965466 version:20220328.c6d6df6b Changes: -------- --- /work/SRC/openSUSE:Factory/openSUSE-release-tools/openSUSE-release-tools.changes 2022-03-26 22:30:58.117945637 +0100 +++ /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.1900/openSUSE-release-tools.changes 2022-03-29 18:15:36.367143809 +0200 @@ -1,0 +2,7 @@ +Mon Mar 28 18:04:02 UTC 2022 - opensuse-releaset...@opensuse.org + +- Update to version 20220328.c6d6df6b: + * project-installcheck: Comment into openSUSE:Factory packages + * project-installcheck: Remove problems for gone packages + +------------------------------------------------------------------- Old: ---- openSUSE-release-tools-20220325.205e07a9.obscpio New: ---- openSUSE-release-tools-20220328.c6d6df6b.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ openSUSE-release-tools.spec ++++++ --- /var/tmp/diff_new_pack.FZXzN9/_old 2022-03-29 18:15:37.127144580 +0200 +++ /var/tmp/diff_new_pack.FZXzN9/_new 2022-03-29 18:15:37.131144585 +0200 @@ -20,7 +20,7 @@ %define source_dir openSUSE-release-tools %define announcer_filename factory-package-news Name: openSUSE-release-tools -Version: 20220325.205e07a9 +Version: 20220328.c6d6df6b Release: 0 Summary: Tools to aid in staging and release work for openSUSE/SUSE License: GPL-2.0-or-later AND MIT ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.FZXzN9/_old 2022-03-29 18:15:37.207144662 +0200 +++ /var/tmp/diff_new_pack.FZXzN9/_new 2022-03-29 18:15:37.211144666 +0200 @@ -1,7 +1,7 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/openSUSE/openSUSE-release-tools.git</param> - <param name="changesrevision">e4cb06a6920a8eb2221bb2fe2f2fa650e2f3efee</param> + <param name="changesrevision">00451e3762c75695d32528544751c282014d7d15</param> </service> </servicedata> ++++++ openSUSE-release-tools-20220325.205e07a9.obscpio -> openSUSE-release-tools-20220328.c6d6df6b.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20220325.205e07a9/project-installcheck.py new/openSUSE-release-tools-20220328.c6d6df6b/project-installcheck.py --- old/openSUSE-release-tools-20220325.205e07a9/project-installcheck.py 2022-03-25 12:53:21.000000000 +0100 +++ new/openSUSE-release-tools-20220328.c6d6df6b/project-installcheck.py 2022-03-28 20:01:57.000000000 +0200 @@ -19,10 +19,11 @@ import ToolBase from osclib.conf import Config -from osclib.core import (http_GET, makeurl, +from osclib.core import (http_DELETE, http_GET, makeurl, repository_path_expand, repository_path_search, target_archs, source_file_load, source_file_ensure) from osclib.repochecks import mirror, parsed_installcheck, CorruptRepos +from osclib.comments import CommentAPI class RepoChecker(): @@ -49,7 +50,46 @@ return None for arch in archs: - self.check_pra(project, repository, arch) + state = self.check_pra(project, repository, arch) + + comments = dict() + for source, details in state['check'].items(): + _, _, arch, rpm = source.split('/') + rpm = rpm.split(':')[0] + comments.setdefault(rpm, {}) + comments[rpm][arch] = details['problem'] + + url = makeurl(self.apiurl, ['comments', 'user']) + root = ET.parse(http_GET(url)).getroot() + for comment in root.findall('.//comment'): + if comment.get('project') != project: + continue + if comment.get('package') in comments: + continue + self.logger.info("Removing comment for package {}".format(comment.get('package'))) + url = makeurl(self.apiurl, [comment, comment.get('id')]) + http_DELETE(url) + + commentapi = CommentAPI(self.apiurl) + MARKER = 'Installcheck' + + for package in comments: + newcomment = '' + for arch in sorted(comments[package]): + newcomment += f"\n\n**Installcheck problems for {arch}**\n\n" + for problem in sorted(comments[package][arch]): + newcomment += "+ " + problem + "\n" + + newcomment = commentapi.add_marker(newcomment.strip(), MARKER) + oldcomments = commentapi.get_comments(project_name=project, package_name=package) + oldcomment, _ = commentapi.comment_find(oldcomments, MARKER) + if oldcomment and oldcomment['comment'] == newcomment: + continue + + if oldcomment: + commentapi.delete(oldcomment['id']) + self.logger.debug("Adding comment to {}/{}".format(project, package)) + commentapi.add_comment(project_name=project, package_name=package, comment=newcomment) def project_pseudometa_file_name(self, project, repository): filename = 'repo_checker' @@ -167,16 +207,17 @@ for package in parsed: parsed[package]['output'] = self._split_and_filter(parsed[package]['output']) - url = makeurl(self.apiurl, ['build', project, '_result'], { - 'repository': repository, 'arch': arch, 'code': 'succeeded'}) + url = makeurl(self.apiurl, ['build', project, '_result'], {'repository': repository, 'arch': arch}) root = ET.parse(http_GET(url)).getroot() - succeeding = list(map(lambda x: x.get('package'), root.findall('.//status'))) + buildresult = dict() + for p in root.findall('.//status'): + buildresult[p.get('package')] = p.get('code') per_source = dict() for package, entry in parsed.items(): source = "{}/{}/{}/{}".format(project, repository, arch, entry['source']) - per_source.setdefault(source, {'output': [], 'builds': entry['source'] in succeeding}) + per_source.setdefault(source, {'output': [], 'buildresult': buildresult.get(entry['source'], 'gone')}) per_source[source]['output'].extend(entry['output']) rebuilds = set() @@ -184,9 +225,9 @@ for source in sorted(per_source): if not len(per_source[source]['output']): continue - self.logger.debug("{} builds: {}".format(source, per_source[source]['builds'])) + self.logger.debug("{} builds: {}".format(source, per_source[source]['buildresult'])) self.logger.debug(" " + "\n ".join(per_source[source]['output'])) - if not per_source[source]['builds']: # nothing we can do + if per_source[source]['buildresult'] != 'succeeded': # nothing we can do continue old_output = oldstate['check'].get(source, {}).get('problem', []) if sorted(old_output) == sorted(per_source[source]['output']): @@ -202,7 +243,11 @@ for source in list(oldstate['check']): if not source.startswith('{}/{}/{}/'.format(project, repository, arch)): continue - if not os.path.basename(source) in succeeding: + code = buildresult.get(os.path.basename(source), 'gone') + if code == 'gone': + del oldstate['check'][source] + if code != 'succeeded': + self.logger.debug(f"Skipping build result for {source} {code}") continue if source not in per_source: self.logger.info("No known problem, erasing %s", source) @@ -233,8 +278,8 @@ # calculate build info hashes for package in packages: - if package not in succeeding: - self.logger.debug("Ignore %s for the moment, not succeeding", package) + if buildresult[package] != 'succeeded': + self.logger.debug("Ignore %s for the moment, %s", package, buildresult[package]) continue m = hashlib.sha256() for bdep in sorted(infos[package]['deps']): @@ -251,13 +296,13 @@ if self.dryrun: if self.rebuild: self.logger.info("To rebuild: %s", ' '.join(rebuilds)) - return + return oldstate if not self.rebuild or not len(rebuilds): self.logger.debug("Nothing to rebuild") # in case we do rebuild, wait for it to succeed before saving self.store_yaml(oldstate, project, repository, arch) - return + return oldstate query = {'cmd': 'rebuild', 'repository': repository, 'arch': arch, 'package': rebuilds} url = makeurl(self.apiurl, ['build', project]) @@ -265,6 +310,7 @@ http_request('POST', url, headers, data=urlencode(query, doseq=True)) self.store_yaml(oldstate, project, repository, arch) + return oldstate def check_leaf_package(self, project, repository, arch, package): url = makeurl(self.apiurl, ['build', project, repository, arch, package, '_buildinfo']) ++++++ openSUSE-release-tools.obsinfo ++++++ --- /var/tmp/diff_new_pack.FZXzN9/_old 2022-03-29 18:15:37.835145299 +0200 +++ /var/tmp/diff_new_pack.FZXzN9/_new 2022-03-29 18:15:37.839145304 +0200 @@ -1,5 +1,5 @@ name: openSUSE-release-tools -version: 20220325.205e07a9 -mtime: 1648209201 -commit: 205e07a9d442993b842f0d5dcf1dc49d1093b8c5 +version: 20220328.c6d6df6b +mtime: 1648490517 +commit: c6d6df6b9c3195531d83a3ba4978399eb4c36d26