Hello community, here is the log from the commit of package openSUSE-release-tools for openSUSE:Factory checked in at 2018-07-02 23:32:38 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/openSUSE-release-tools (Old) and /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openSUSE-release-tools" Mon Jul 2 23:32:38 2018 rev:110 rq:619947 version:20180629.4355859 Changes: -------- --- /work/SRC/openSUSE:Factory/openSUSE-release-tools/openSUSE-release-tools.changes 2018-06-29 22:35:57.042025240 +0200 +++ /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new/openSUSE-release-tools.changes 2018-07-02 23:33:05.981275343 +0200 @@ -1,0 +2,28 @@ +Fri Jun 29 11:15:56 UTC 2018 - opensuse-releaset...@opensuse.org + +- Update to version 20180629.4355859: + * No longer have Ring2 and staging :DVD subproject + +------------------------------------------------------------------- +Fri Jun 29 08:39:50 UTC 2018 - opensuse-releaset...@opensuse.org + +- Update to version 20180629.2ed2f4e: + * check_source: skip adding reviews for incidents in favor of maintbot. + * check_source: replace one action limitation with configurable rule. + * check_source: override rename project setting for maintenance_incident. + * check_source: rework rename check to allow for suffixed :Update packages. + * ReviewBot: provide self.action for direct access in sub-classes. + * ReviewBot: check_action_maintenance_incident(): clarify src_package magic. + * ReviewBot: downgrade patchinfo message to debug and include for release. + * check_maintenance_incidencts: utilize _is_patchinfo(). + * leaper: adjust for SLE 15SP1 and SLE12SP4 + * Leaper: adjust for 15.1 + +------------------------------------------------------------------- +Fri Jun 29 07:51:48 UTC 2018 - opensuse-releaset...@opensuse.org + +- Update to version 20180629.b29cbe4: + * Adjust opensuse-leap-image references for multibuild + * Add packages for Leap 15.0 JeOS + +------------------------------------------------------------------- Old: ---- openSUSE-release-tools-20180628.fdc0978.obscpio New: ---- openSUSE-release-tools-20180629.4355859.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ openSUSE-release-tools.spec ++++++ --- /var/tmp/diff_new_pack.FsH4KC/_old 2018-07-02 23:33:06.937274159 +0200 +++ /var/tmp/diff_new_pack.FsH4KC/_new 2018-07-02 23:33:06.937274159 +0200 @@ -20,7 +20,7 @@ %define source_dir openSUSE-release-tools %define announcer_filename factory-package-news Name: openSUSE-release-tools -Version: 20180628.fdc0978 +Version: 20180629.4355859 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.FsH4KC/_old 2018-07-02 23:33:06.965274124 +0200 +++ /var/tmp/diff_new_pack.FsH4KC/_new 2018-07-02 23:33:06.965274124 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/openSUSE/openSUSE-release-tools.git</param> - <param name="changesrevision">c565d78c6acee219899b673b6df185cb2a8a4c43</param> + <param name="changesrevision">30c32af1aaa4864a0f21649d22e19fb8f2f6d83a</param> </service> </servicedata> ++++++ openSUSE-release-tools-20180628.fdc0978.obscpio -> openSUSE-release-tools-20180629.4355859.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20180628.fdc0978/ReviewBot.py new/openSUSE-release-tools-20180629.4355859/ReviewBot.py --- old/openSUSE-release-tools-20180628.fdc0978/ReviewBot.py 2018-06-28 18:38:22.000000000 +0200 +++ new/openSUSE-release-tools-20180629.4355859/ReviewBot.py 2018-06-29 13:06:29.000000000 +0200 @@ -47,6 +47,38 @@ import urllib2 from itertools import count +class PackageLookup(object): + """ helper class to manage 00Meta/lookup.yml + """ + + def __init__(self, apiurl = None): + self.apiurl = apiurl + # dict[project][package] + self.lookup = {} + + def get(self, project, package): + if not project in self.lookup: + self.load(project) + + return self.lookup[project].get(package, None) + + def reset(self): + self.lookup = {} + + def load(self, project): + fh = self._load_lookup_file(project) + self.lookup[project] = yaml.safe_load(fh) if fh else {} + + def _load_lookup_file(self, prj): + try: + return osc.core.http_GET(osc.core.makeurl(self.apiurl, + ['source', prj, '00Meta', 'lookup.yml'])) + except urllib2.HTTPError as e: + # in case the project doesn't exist yet (like sle update) + if e.code != 404: + raise e + return None + class ReviewBot(object): """ @@ -91,6 +123,7 @@ self.comment_handler = False self.override_allow = True self.override_group_key = '{}-override-group'.format(self.bot_name.lower()) + self.lookup = PackageLookup(self.apiurl) self.load_config() @@ -291,7 +324,7 @@ self.review_messages = self.DEFAULT_REVIEW_MESSAGES.copy() if self.only_one_action and len(req.actions) != 1: - self.review_messages['declined'] = 'Only one action per request' + self.review_messages['declined'] = 'Only one action per request supported' return False if self.comment_handler is not False: @@ -299,6 +332,9 @@ overall = None for a in req.actions: + # Store in-case sub-classes need direct access to original values. + self.action = a + fn = 'check_action_%s'%a.type if not hasattr(self, fn): fn = 'check_action__default' @@ -313,21 +349,31 @@ return pkgname == 'patchinfo' or pkgname.startswith('patchinfo.') def check_action_maintenance_incident(self, req, a): - dst_package = a.src_package - # Ignoring patchinfo package for checking if self._is_patchinfo(a.src_package): - self.logger.info("package is patchinfo, ignoring") + self.logger.debug('ignoring patchinfo action') return None - # dirty obs crap + + # Duplicate src_package as tgt_package since prior to assignment to a + # specific incident project there is no target package (odd API). After + # assignment it is still assumed the target will match the source. Since + # the ultimate goal is the tgt_releaseproject the incident is treated + # similar to staging in that the intermediate result is not the final + # and thus the true target project (ex. openSUSE:Maintenance) is not + # used for check_source_submission(). + tgt_package = a.src_package if a.tgt_releaseproject is not None: - ugly_suffix = '.'+a.tgt_releaseproject.replace(':', '_') - if dst_package.endswith(ugly_suffix): - dst_package = dst_package[:-len(ugly_suffix)] - return self.check_source_submission(a.src_project, a.src_package, a.src_rev, a.tgt_releaseproject, dst_package) + suffix = '.' + a.tgt_releaseproject.replace(':', '_') + if tgt_package.endswith(suffix): + tgt_package = tgt_package[:-len(suffix)] + + # Note tgt_releaseproject (product) instead of tgt_project (maintenance). + return self.check_source_submission(a.src_project, a.src_package, a.src_rev, + a.tgt_releaseproject, tgt_package) def check_action_maintenance_release(self, req, a): pkgname = a.src_package if self._is_patchinfo(pkgname): + self.logger.debug('ignoring patchinfo action') return None linkpkg = self._get_linktarget_self(a.src_project, pkgname) if linkpkg is not None: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20180628.fdc0978/check_maintenance_incidents.py new/openSUSE-release-tools-20180629.4355859/check_maintenance_incidents.py --- old/openSUSE-release-tools-20180628.fdc0978/check_maintenance_incidents.py 2018-06-28 18:38:22.000000000 +0200 +++ new/openSUSE-release-tools-20180629.4355859/check_maintenance_incidents.py 2018-06-29 13:06:29.000000000 +0200 @@ -88,7 +88,7 @@ (linkprj, linkpkg) = self._get_linktarget(a.src_project, pkgname) if linkpkg is not None: pkgname = linkpkg - if pkgname == 'patchinfo': + if self._is_patchinfo(a.src_package): return None project = a.tgt_releaseproject diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20180628.fdc0978/check_source.py new/openSUSE-release-tools-20180629.4355859/check_source.py --- old/openSUSE-release-tools-20180628.fdc0978/check_source.py 2018-06-28 18:38:22.000000000 +0200 +++ new/openSUSE-release-tools-20180629.4355859/check_source.py 2018-06-29 13:06:29.000000000 +0200 @@ -27,7 +27,6 @@ ReviewBot.ReviewBot.__init__(self, *args, **kwargs) # ReviewBot options. - self.only_one_action = True self.request_default_return = True self.maintbot = MaintenanceChecker(*args, **kwargs) @@ -39,6 +38,7 @@ self.staging_api(project) config = self.staging_config[project] + self.single_action_require = str2bool(config.get('check-source-single-action-require', 'False')) self.ignore_devel = not str2bool(config.get('devel-project-enforce', 'False')) self.in_air_rename_allow = str2bool(config.get('check-source-in-air-rename-allow', 'False')) self.add_review_team = str2bool(config.get('check-source-add-review-team', 'True')) @@ -46,14 +46,33 @@ self.repo_checker = config.get('repo-checker') self.devel_whitelist = config.get('devel-whitelist', '').split() + if self.action.type == 'maintenance_incident': + # The workflow effectively enforces the names to match and the + # parent code sets target_package from source_package so this check + # becomes useless and awkward to perform. + self.in_air_rename_allow = True + + # The target project will be set to product and thus inherit + # settings, but override since real target is not product. + self.single_action_require = False + + # It might make sense to supersede maintbot, but for now. + self.skip_add_reviews = True + def check_source_submission(self, source_project, source_package, source_revision, target_project, target_package): super(CheckSource, self).check_source_submission(source_project, source_package, source_revision, target_project, target_package) self.target_project_config(target_project) + if self.single_action_require and len(self.request.actions) != 1: + self.review_messages['declined'] = 'Only one action per request allowed' + return False + if target_package.startswith('00'): self.review_messages['accepted'] = 'Skipping all checks for 00* packages' return True + inair_renamed = target_package != source_package + if not self.ignore_devel: self.logger.info('checking if target package exists and has devel project') devel_project, devel_package = devel_project_get(self.apiurl, target_project, target_package) @@ -72,6 +91,18 @@ 'See https://en.opensuse.org/openSUSE:How_to_contribute_to_Factory#How_to_request_a_new_devel_project for details.' ) % (source_project, target_project) return False + else: + if source_project.endswith(':Update'): + # Allow for submission like: + # - source: openSUSE:Leap:15.0:Update/google-compute-engine.8258 + # - target: openSUSE:Leap:15.1/google-compute-engine + # Note: home:jberry:Update would also be allowed via this condition, + # but that should be handled by leaper and human review. + inair_renamed = target_package != source_package.split('.')[0] + + if not self.in_air_rename_allow and inair_renamed: + self.review_messages['declined'] = 'Source and target package names must match' + return False # Checkout and see if renaming package screws up version parsing. dir = os.path.expanduser('~/co/%s' % self.request.reqid) @@ -102,11 +133,6 @@ self.review_messages['declined'] = "A package submitted as %s has to build as 'Name: %s' - found Name '%s'" % (target_package, target_package, new_info['name']) return False - # We want to see the same package name in the devel project as in the distro; anything else calls for confusion - if not self.in_air_rename_allow and source_package != target_package: - self.review_messages['declined'] = "No in-air renames: The package must be called the same in the devel project as in the target project" - return False - # Run check_source.pl script and interpret output. source_checker = os.path.join(CheckSource.SCRIPT_PATH, 'check_source.pl') civs = '' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20180628.fdc0978/check_source_in_factory.py new/openSUSE-release-tools-20180629.4355859/check_source_in_factory.py --- old/openSUSE-release-tools-20180628.fdc0978/check_source_in_factory.py 2018-06-28 18:38:22.000000000 +0200 +++ new/openSUSE-release-tools-20180629.4355859/check_source_in_factory.py 2018-06-29 13:06:29.000000000 +0200 @@ -45,21 +45,10 @@ def __init__(self, *args, **kwargs): ReviewBot.ReviewBot.__init__(self, *args, **kwargs) - self.factory = "openSUSE:Factory" + self.factory = [ "openSUSE:Factory" ] self.review_messages = { 'accepted' : 'ok', 'declined': 'the package needs to be accepted in Factory first' } - self.lookup = {} self.history_limit = 5 - def reset_lookup(self): - self.lookup = {} - - def parse_lookup(self, project): - self.lookup.update(yaml.safe_load(self._load_lookup_file(project))) - - def _load_lookup_file(self, prj): - return osc.core.http_GET(osc.core.makeurl(self.apiurl, - ['source', prj, '00Meta', 'lookup.yml'])) - def check_source_submission(self, src_project, src_package, src_rev, target_project, target_package): super(FactorySourceChecker, self).check_source_submission(src_project, src_package, src_rev, target_project, target_package) src_srcinfo = self.get_sourceinfo(src_project, src_package, src_rev) @@ -93,12 +82,14 @@ def _package_get_upstream_projects(self, package): """ return list of projects where the specified package is supposed to come from. Either by lookup table or self.factory """ - projects = self.factory - if self.lookup and package in self.lookup: - projects = self.lookup[package] + projects = [] + for prj in self.factory: + r = self.lookup.get(prj, package) + if r: + projects.append(r) - if isinstance(projects, basestring): - projects = [projects] + if not projects: + projects = self.factory return projects diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20180628.fdc0978/check_tags_in_requests.py new/openSUSE-release-tools-20180629.4355859/check_tags_in_requests.py --- old/openSUSE-release-tools-20180628.fdc0978/check_tags_in_requests.py 2018-06-28 18:38:22.000000000 +0200 +++ new/openSUSE-release-tools-20180629.4355859/check_tags_in_requests.py 2018-06-29 13:06:29.000000000 +0200 @@ -54,7 +54,7 @@ def __init__(self, *args, **kwargs): super(TagChecker, self).__init__(*args, **kwargs) - self.factory = "openSUSE:Factory" + self.factory = [ "openSUSE:Factory" ] self.review_messages['declined'] = """ (This is a script, so report bugs) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20180628.fdc0978/leaper.py new/openSUSE-release-tools-20180629.4355859/leaper.py --- old/openSUSE-release-tools-20180628.fdc0978/leaper.py 2018-06-28 18:38:22.000000000 +0200 +++ new/openSUSE-release-tools-20180629.4355859/leaper.py 2018-06-29 13:06:29.000000000 +0200 @@ -78,14 +78,7 @@ def prepare_review(self): # update lookup information on every run - if self.ibs: - self.factory.parse_lookup('SUSE:SLE-15:GA') - self.lookup_sle15 = self.factory.lookup.copy() - return - - self.factory.parse_lookup('openSUSE:Leap:15.0') - self.factory.parse_lookup('openSUSE:Leap:15.0:NonFree') - self.lookup_150 = self.factory.lookup.copy() + self.lookup.reset() def get_source_packages(self, project, expand=False): """Return the list of packages in a project.""" @@ -127,6 +120,9 @@ if origin.startswith('Devel;'): (dummy, origin, dummy) = origin.split(';') + # FIXME: to make the rest of the code easier this should probably check + # if the srcmd5 matches the origin project. That way it doesn't really + # matter from where something got submitted as long as the sources match. return project.startswith(origin) def check_source_submission(self, src_project, src_package, src_rev, target_project, target_package): @@ -141,7 +137,10 @@ src_srcinfo = self.get_sourceinfo(src_project, src_package, src_rev) package = target_package - origin = None + origin = self.lookup.get(target_project, package) + origin_same = True + if origin: + origin_same = self._check_same_origin(origin, src_project) if src_srcinfo is None: # source package does not exist? @@ -151,63 +150,80 @@ if self.ibs and target_project.startswith('SUSE:SLE'): - if package in self.lookup_sle15: - origin = self.lookup_sle15[package] - - origin_same = True - if origin: - origin_same = self._check_same_origin(origin, src_project) - self.logger.info("expected origin is '%s' (%s)", origin, - "unchanged" if origin_same else "changed") - + review_result = None prj = 'openSUSE.org:openSUSE:Factory' - # True or None (open request) are acceptable for SLE. - self.source_in_factory = self._check_factory(package, src_srcinfo, prj) - if self.source_in_factory is None: - self.pending_factory_submission = True - if self.source_in_factory is not False: - return self.source_in_factory - - # got false. could mean package doesn't exist or no match if self.is_package_in_project(prj, package): - self.logger.info('different sources in {}'.format(self.rdiff_link(src_project, src_package, src_rev, prj, package))) - - prj = 'openSUSE.org:openSUSE:Leap:15.0' - # TODO Ugly save for SLE-15-SP1. - if False and self.is_package_in_project(prj, package): - if self._check_factory(package, src_srcinfo, prj) is True: - self.logger.info('found source match in {}'.format(prj)) + # True or None (open request) are acceptable for SLE. + in_factory = self._check_factory(package, src_srcinfo, prj) + if in_factory: + review_result = True + self.source_in_factory = True + elif in_factory is None: + self.pending_factory_submission = True else: self.logger.info('different sources in {}'.format(self.rdiff_link(src_project, src_package, src_rev, prj, package))) + else: + self.logger.info('the package is not in Factory, nor submitted there') - devel_project, devel_package = devel_project_get(self.apiurl, 'openSUSE.org:openSUSE:Factory', package) - if devel_project is not None: - # specifying devel package is optional - if devel_package is None: - devel_package = package - if self.is_package_in_project(devel_project, devel_package): - if self._check_matching_srcmd5(devel_project, devel_package, src_srcinfo.verifymd5) == True: - self.logger.info('matching sources in {}/{}'.format(devel_project, devel_package)) - return True + if review_result == None: + other_projects_to_check = [] + m = re.match('SUSE:SLE-(\d+)(?:-SP(\d+)):', target_project) + if m: + sle_version = int(m.group(1)) + sp_version = int(m.group(2)) + versions_to_check = [] + # yeah, too much harcoding here + if sle_version == 12: + versions_to_check = [ '42.3' ] + elif sle_version == 15: + versions_to_check = [ '15.%d'%i for i in range(sp_version+1) ] else: - self.logger.info('different sources in {}'.format(self.rdiff_link(src_project, src_package, src_rev, devel_project, devel_package))) - else: - self.logger.info('no devel project found for {}/{}'.format('openSUSE.org:openSUSE:Factory', package)) + self.logger.error("can't handle %d.%d", sle_version, sp_version) - #self.logger.info('no matching sources in Factory, Leap:15.0, nor devel project') - self.logger.info('no matching sources in Factory, nor devel project') + for version in versions_to_check: + leap = 'openSUSE.org:openSUSE:Leap:%s'%(version) + other_projects_to_check += [ leap, leap + ':Update', leap + ':NonFree', leap + ':NonFree:Update' ] + + for prj in other_projects_to_check: + if self.is_package_in_project(prj, package): + self.logger.info('checking {}'.format(prj)) + if self._check_factory(package, src_srcinfo, prj) is True: + self.logger.info('found source match in {}'.format(prj)) + else: + self.logger.info('different sources in {}'.format(self.rdiff_link(src_project, src_package, src_rev, prj, package))) + + devel_project, devel_package = devel_project_get(self.apiurl, 'openSUSE.org:openSUSE:Factory', package) + if devel_project is not None: + # specifying devel package is optional + if devel_package is None: + devel_package = package + if self.is_package_in_project(devel_project, devel_package): + if self._check_matching_srcmd5(devel_project, devel_package, src_srcinfo.verifymd5) == True: + self.logger.info('matching sources in {}/{}'.format(devel_project, devel_package)) + return True + else: + self.logger.info('different sources in devel project {}'.format(self.rdiff_link(src_project, src_package, src_rev, devel_project, devel_package))) + else: + self.logger.info('no devel project found for {}/{}'.format('openSUSE.org:openSUSE:Factory', package)) + + self.logger.info('no matching sources found anywhere. Needs a human to decide whether that is ok. Please provide some justification to help that person.') + + if not review_result: + review_result = origin_same + if origin_same: + self.logger.info("ok, origin %s unchanged", origin) + else: + # only log origin state if it's taken into consideration for the review result + self.logger.info("Submitted from a different origin than expected ('%s')", origin) - if origin_same is False: + if not review_result and self.override_allow: # Rather than decline, leave review open in-case of change and # ask release manager for input via override comment. self.logger.info('Comment `(at){} override accept` to force accept.'.format(self.review_user)) self.needs_release_manager = True - return None + review_result = None - return origin_same - - if package in self.lookup_150: - origin = self.lookup_150[package] + return review_result # obviously if src_project in ('openSUSE:Factory', 'openSUSE:Factory:NonFree'): @@ -216,9 +232,8 @@ is_fine_if_factory = False not_in_factory_okish = False if origin: - origin_same = self._check_same_origin(origin, src_project) self.logger.info("expected origin is '%s' (%s)", origin, - "unchanged" if origin_same else "changed") + "unchanged" if origin_same else "changed") if origin.startswith('Devel;'): if origin_same == False: self.logger.debug("not submitted from devel project") @@ -253,7 +268,7 @@ self.needs_release_manager = True # fall through to check history and requests # TODO Ugly save for 15.1 (n-1). - elif False and origin.startswith('openSUSE:Leap:15.0'): + elif origin.startswith('openSUSE:Leap:15.0'): if self.must_approve_maintenance_updates: self.needs_release_manager = True # submitted from :Update @@ -301,7 +316,7 @@ elif origin.startswith('SUSE:SLE-15'): if self.must_approve_maintenance_updates: self.needs_release_manager = True - for v in ('15.0',): + for v in ('15.0', '15.1'): prj = 'openSUSE:Leap:{}:SLE-workarounds'.format(v) if self.is_package_in_project( prj, target_package): self.logger.info("found package in %s", prj) @@ -350,7 +365,8 @@ # new package submitted from Factory. Check if it was in # 42.3 before and skip maintainer review if so. subprj = src_project[len('openSUSE:Factory'):] - if self.source_in_factory and target_project.startswith('openSUSE:Leap:15.0') \ + # disabled for reference. Needed again for 16.0 probably + if False and self.source_in_factory and target_project.startswith('openSUSE:Leap:15.0') \ and self.is_package_in_project('openSUSE:Leap:42.3'+subprj, package): self.logger.info('package was in 42.3') self.do_check_maintainer_review = False @@ -456,9 +472,9 @@ if self.automatic_submission and creator != bot_name: self.logger.info('@{}: this request would have been automatically created by {} after the Factory submission was accepted in order to eleviate the need to manually create requests for packages sourced from Factory'.format(creator, bot_name)) elif self.source_in_factory: - self.logger.info("the submitted sources are in or accepted for Factory") + self.logger.info("perfect. the submitted sources are in or accepted for Factory") elif self.source_in_factory == False: - self.logger.info("the submitted sources are NOT in Factory") + self.logger.warn("the submitted sources are NOT in Factory") if request_ok == False: self.logger.info("NOTE: if you think the automated review was wrong here, please talk to the release team before reopening the request") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20180628.fdc0978/osclib/conf.py new/openSUSE-release-tools-20180629.4355859/osclib/conf.py --- old/openSUSE-release-tools-20180628.fdc0978/osclib/conf.py 2018-06-28 18:38:22.000000000 +0200 +++ new/openSUSE-release-tools-20180629.4355859/osclib/conf.py 2018-06-29 13:06:29.000000000 +0200 @@ -38,7 +38,7 @@ 'staging': 'openSUSE:%(project)s:Staging', 'staging-group': 'factory-staging', 'staging-archs': 'i586 x86_64', - 'staging-dvd-archs': 'x86_64', + 'staging-dvd-archs': '', 'nocleanup-packages': 'Test-DVD-x86_64 Test-DVD-ppc64le bootstrap-copy', 'rings': 'openSUSE:%(project)s:Rings', 'nonfree': 'openSUSE:%(project)s:NonFree', @@ -51,6 +51,7 @@ 'main-repo': 'standard', 'download-baseurl': 'http://download.opensuse.org/tumbleweed/', # check_source.py + 'check-source-single-action-require': 'True', 'devel-project-enforce': 'True', 'review-team': 'opensuse-review-team', 'legal-review-group': 'legal-auto', @@ -65,7 +66,7 @@ 'staging': 'openSUSE:%(project)s:Staging', 'staging-group': 'factory-staging', 'staging-archs': 'i586 x86_64', - 'staging-dvd-archs': 'x86_64', + 'staging-dvd-archs': '', 'nocleanup-packages': 'bootstrap-copy 000product 000release-packages', 'rings': 'openSUSE:%(project)s:Rings', 'nonfree': 'openSUSE:%(project)s:NonFree', @@ -83,6 +84,7 @@ 'review-team': 'opensuse-review-team', 'legal-review-group': 'legal-auto', # check_source.py + 'check-source-single-action-require': 'True', # review-team optionally added by leaper.py. 'repo-checker': 'repo-checker', 'repo_checker-arch-whitelist': 'x86_64', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20180628.fdc0978/osclib/stagingapi.py new/openSUSE-release-tools-20180629.4355859/osclib/stagingapi.py --- old/openSUSE-release-tools-20180628.fdc0978/osclib/stagingapi.py 2018-06-28 18:38:22.000000000 +0200 +++ new/openSUSE-release-tools-20180629.4355859/osclib/stagingapi.py 2018-06-29 13:06:29.000000000 +0200 @@ -85,8 +85,7 @@ if self.crings: self.rings = ( '{}:0-Bootstrap'.format(self.crings), - '{}:1-MinimalX'.format(self.crings), - '{}:2-TestDVD'.format(self.crings) + '{}:1-MinimalX'.format(self.crings) ) else: self.rings = [] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20180628.fdc0978/staging_templates/create_new_staging new/openSUSE-release-tools-20180629.4355859/staging_templates/create_new_staging --- old/openSUSE-release-tools-20180628.fdc0978/staging_templates/create_new_staging 2018-06-28 18:38:22.000000000 +0200 +++ new/openSUSE-release-tools-20180629.4355859/staging_templates/create_new_staging 2018-06-29 13:06:29.000000000 +0200 @@ -19,11 +19,5 @@ osc meta prj "$base:Staging:$letter" -F ${letter}_prj osc meta prjconf "$base:Staging:$letter" -F ${letter}_prjconf fi -if osc meta prj "$base:Staging:$letter:DVD" > /dev/null 2>&1; then - echo "$base:Staging:$letter:DVD already exists" -else - osc meta prj "$base:Staging:$letter:DVD" -F ${letter}_dvd_prj - osc meta prjconf "$base:Staging:$letter:DVD" -F ${letter}_dvd_prjconf -fi echo "done. Don't forget the openQA templates" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20180628.fdc0978/staging_templates/template_dvd_prj new/openSUSE-release-tools-20180629.4355859/staging_templates/template_dvd_prj --- old/openSUSE-release-tools-20180628.fdc0978/staging_templates/template_dvd_prj 2018-06-28 18:38:22.000000000 +0200 +++ new/openSUSE-release-tools-20180629.4355859/staging_templates/template_dvd_prj 1970-01-01 01:00:00.000000000 +0100 @@ -1,22 +0,0 @@ -<project name="@BASE@:Staging:@LETTER@:DVD"> - <title/> - <description/> - <link project="@BASE@:Rings:2-TestDVD"/> - <build> - <enable/> - </build> - <publish> - <disable/> - </publish> - <debuginfo> - <enable/> - </debuginfo> - <repository name="standard" rebuild="direct" linkedbuild="all"> - <path project="@BASE@:Staging:@LETTER@" repository="standard"/> - <arch>x86_64</arch> - </repository> - <repository name="images" rebuild="direct" linkedbuild="all"> - <path project="@BASE@:Staging:@LETTER@:DVD" repository="standard"/> - <arch>x86_64</arch> - </repository> -</project> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20180628.fdc0978/staging_templates/template_dvd_prjconf new/openSUSE-release-tools-20180629.4355859/staging_templates/template_dvd_prjconf --- old/openSUSE-release-tools-20180628.fdc0978/staging_templates/template_dvd_prjconf 2018-06-28 18:38:22.000000000 +0200 +++ new/openSUSE-release-tools-20180629.4355859/staging_templates/template_dvd_prjconf 1970-01-01 01:00:00.000000000 +0100 @@ -1,10 +0,0 @@ -Patterntype: rpm-md ymp -%if "%_repository" == "images" -Type: kiwi -Repotype: none -Patterntype: none -Prefer: openSUSE-release -%endif - -Ignore: !kiwi:qemu-tools -Ignore: !kiwi-desc-isoboot-requires:qemu-tools diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20180628.fdc0978/tests/api_tests.py new/openSUSE-release-tools-20180629.4355859/tests/api_tests.py --- old/openSUSE-release-tools-20180628.fdc0978/tests/api_tests.py 2018-06-28 18:38:22.000000000 +0200 +++ new/openSUSE-release-tools-20180629.4355859/tests/api_tests.py 2018-06-29 13:06:29.000000000 +0200 @@ -62,8 +62,6 @@ 'elem-ring-0': 'openSUSE:Factory:Rings:0-Bootstrap', 'elem-ring-1': 'openSUSE:Factory:Rings:0-Bootstrap', 'elem-ring-mini': 'openSUSE:Factory:Rings:0-Bootstrap', - 'elem-ring-2': 'openSUSE:Factory:Rings:2-TestDVD', - 'git': 'openSUSE:Factory:Rings:2-TestDVD', 'wine': 'openSUSE:Factory:Rings:1-MinimalX', } self.assertEqual(ring_packages, self.api.ring_packages_for_links) @@ -74,8 +72,6 @@ 'elem-ring-0': 'openSUSE:Factory:Rings:0-Bootstrap', 'elem-ring-1': 'openSUSE:Factory:Rings:1-MinimalX', 'elem-ring-mini': 'openSUSE:Factory:Rings:0-Bootstrap', - 'elem-ring-2': 'openSUSE:Factory:Rings:2-TestDVD', - 'git': 'openSUSE:Factory:Rings:2-TestDVD', 'wine': 'openSUSE:Factory:Rings:1-MinimalX', } self.assertEqual(ring_packages, self.api.ring_packages) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20180628.fdc0978/tests/checktags_tests.py new/openSUSE-release-tools-20180629.4355859/tests/checktags_tests.py --- old/openSUSE-release-tools-20180628.fdc0978/tests/checktags_tests.py 2018-06-28 18:38:22.000000000 +0200 +++ new/openSUSE-release-tools-20180629.4355859/tests/checktags_tests.py 2018-06-29 13:06:29.000000000 +0200 @@ -213,6 +213,10 @@ match_querystring=True, body='<collection matches="0"></collection>') + httpretty.register_uri(httpretty.GET, + APIURL + "/source/openSUSE:Factory/00Meta/lookup.yml", + status = 404) + result = {'state_accepted': None} def change_request(result, method, uri, headers): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20180628.fdc0978/tests/factory_source_tests.py new/openSUSE-release-tools-20180629.4355859/tests/factory_source_tests.py --- old/openSUSE-release-tools-20180628.fdc0978/tests/factory_source_tests.py 2018-06-28 18:38:22.000000000 +0200 +++ new/openSUSE-release-tools-20180629.4355859/tests/factory_source_tests.py 2018-06-29 13:06:29.000000000 +0200 @@ -62,6 +62,10 @@ def test_accept_request(self): httpretty.register_uri(httpretty.GET, + rr("/source/openSUSE:Factory/00Meta/lookup.yml"), + status = 404) + + httpretty.register_uri(httpretty.GET, APIURL + "/request/770001", body = """ <request id="770001" creator="chameleon"> @@ -263,6 +267,10 @@ """) httpretty.register_uri(httpretty.GET, + rr("/source/openSUSE:Factory/00Meta/lookup.yml"), + status = 404) + + httpretty.register_uri(httpretty.GET, rr("/search/request?match=%28state%2F%40name%3D%27new%27+or+state%2F%40name%3D%27review%27%29+and+%28action%2Ftarget%2F%40project%3D%27openSUSE%3AFactory%27+or+submit%2Ftarget%2F%40project%3D%27openSUSE%3AFactory%27+or+action%2Fsource%2F%40project%3D%27openSUSE%3AFactory%27+or+submit%2Fsource%2F%40project%3D%27openSUSE%3AFactory%27%29+and+%28action%2Ftarget%2F%40package%3D%27plan%27+or+submit%2Ftarget%2F%40package%3D%27plan%27+or+action%2Fsource%2F%40package%3D%27plan%27+or+submit%2Fsource%2F%40package%3D%27plan%27%29+and+action%2F%40type%3D%27submit%27"), match_querystring = True, body = """ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20180628.fdc0978/totest-manager.py new/openSUSE-release-tools-20180629.4355859/totest-manager.py --- old/openSUSE-release-tools-20180628.fdc0978/totest-manager.py 2018-06-28 18:38:22.000000000 +0200 +++ new/openSUSE-release-tools-20180629.4355859/totest-manager.py 2018-06-29 13:06:29.000000000 +0200 @@ -378,7 +378,7 @@ return None # docker container has no size limit - if package == 'opensuse-leap-image': + if re.match(r'opensuse-leap-image.*', package): return None if '-Addon-NonOss-ftp-ftp' in package: @@ -846,7 +846,13 @@ 'livecd-leap-gnome', 'livecd-leap-kde', 'livecd-leap-x11', - 'opensuse-leap-image', + 'opensuse-leap-image:docker', + 'opensuse-leap-image:lxc', + 'kiwi-templates-Leap15-JeOS:MS-HyperV', + 'kiwi-templates-Leap15-JeOS:OpenStack-Cloud', + 'kiwi-templates-Leap15-JeOS:VMware', + 'kiwi-templates-Leap15-JeOS:XEN', + 'kiwi-templates-Leap15-JeOS:kvm-and-xen', ] ftp_products = [] ++++++ openSUSE-release-tools.obsinfo ++++++ --- /var/tmp/diff_new_pack.FsH4KC/_old 2018-07-02 23:33:08.393272355 +0200 +++ /var/tmp/diff_new_pack.FsH4KC/_new 2018-07-02 23:33:08.393272355 +0200 @@ -1,5 +1,5 @@ name: openSUSE-release-tools -version: 20180628.fdc0978 -mtime: 1530203902 -commit: fdc09782142171aa08d04039aa0abc6fc40ff914 +version: 20180629.4355859 +mtime: 1530270389 +commit: 43558590825d2a9ecfdadde999a32c3aa82644c4