def execute(self, session, names, collection): pkgs = session.db.query(Package).join(Collection)\ .filter(Package.name.in_(names))\ .filter(Collection.latest_repo_resolved) if collection: pkgs = pkgs.filter(Collection.name == collection) for pkg in pkgs.all(): # FIXME there is code duplication with backend/services/scheduler.py koji_session = session.koji('primary') all_arches = koji_util.get_koji_arches_cached( session, koji_session, pkg.collection.build_tag, ) arches = koji_util.get_srpm_arches( koji_session=session.secondary_koji_for(pkg.collection), all_arches=all_arches, nvra=pkg.srpm_nvra, arch_override=pkg.arch_override, ) if arches is None: print("No SRPM found for package {} in collection {}" .format(pkg.name, pkg.collection.name)) continue if not arches: print("No allowed arches found for package {} in collection {}" .format(pkg.name, pkg.collection.name)) continue backend.submit_build( session, pkg, arch_override=None if 'noarch' in arches else arches, )
def test_get_srpm_arches_exclude(self): nvra = {'name': 'ghdl', 'version': '0.34dev', 'release': '0.20170221git663ebfd.0.fc25', 'arch': 'src'} self.assertEqual( {'i686', 'x86_64'}, koji_util.get_srpm_arches(self.session, self.all_arches, nvra), )
def execute(self, session, names, collection): pkgs = session.db.query(Package).join(Collection)\ .filter(Package.name.in_(names))\ .filter(Collection.latest_repo_resolved) if collection: pkgs = pkgs.filter(Collection.name == collection) for pkg in pkgs.all(): # FIXME there is code duplication with backend/services/scheduler.py koji_session = session.koji('primary') all_arches = koji_util.get_koji_arches_cached( session, koji_session, pkg.collection.build_tag, ) arches = koji_util.get_srpm_arches( koji_session=session.secondary_koji_for(pkg.collection), all_arches=all_arches, nvra=pkg.srpm_nvra, arch_override=pkg.arch_override, ) if arches is None: print("No SRPM found for package {} in collection {}".format( pkg.name, pkg.collection.name)) continue if not arches: print( "No allowed arches found for package {} in collection {}". format(pkg.name, pkg.collection.name)) continue backend.submit_build( session, pkg, arch_override=None if 'noarch' in arches else arches, )
def test_get_srpm_arches_noarch(self): nvra = {'arch': 'src', 'name': 'maven', 'release': '9.fc26', 'version': '3.3.9'} self.assertEqual( {'noarch'}, koji_util.get_srpm_arches(self.session, self.all_arches, nvra), )
def test_get_srpm_arches_exclusive(self): nvra = {'name': 'java-1.8.0-openjdk-aarch32', 'version': '1.8.0.131', 'release': '2.170420.fc26', 'epoch': 1, 'arch': 'src'} self.assertEqual( {'armv7hl'}, koji_util.get_srpm_arches(self.session, self.all_arches, nvra), )
def test_get_srpm_arches_exclude(self): nvra = {'name': 'ghdl', 'version': '0.34dev', 'release': '0.20170221git663ebfd.0.fc25', 'arch': 'src'} self.assertEqual( {'i686', 'x86_64'}, koji_util.get_srpm_arches(self.session, self.all_arches, nvra), )
def test_get_srpm_arches(self): nvra = {'arch': 'src', 'name': 'rnv', 'release': '11.fc26', 'version': '1.7.11'} self.assertEqual( {'i686', 'x86_64', 'armv7hl'}, koji_util.get_srpm_arches(self.session, self.all_arches, nvra), )
def test_get_srpm_arches_exclusive(self): nvra = {'name': 'java-1.8.0-openjdk-aarch32', 'version': '1.8.0.131', 'release': '2.170420.fc26', 'epoch': 1, 'arch': 'src'} self.assertEqual( {'armv7hl'}, koji_util.get_srpm_arches(self.session, self.all_arches, nvra), )
def test_get_srpm_arches_noarch(self): nvra = {'arch': 'src', 'name': 'maven', 'release': '9.fc26', 'version': '3.3.9'} self.assertEqual( {'noarch'}, koji_util.get_srpm_arches(self.session, self.all_arches, nvra), )
def test_get_srpm_arches(self): nvra = {'arch': 'src', 'name': 'rnv', 'release': '11.fc26', 'version': '1.7.11'} self.assertEqual( {'i686', 'x86_64', 'armv7hl'}, koji_util.get_srpm_arches(self.session, self.all_arches, nvra), )
def test_get_srpm_arches_non_canon_build_arches(self): nvra = {'arch': 'src', 'name': 'rnv', 'release': '11.fc26', 'version': '1.7.11'} self.assertEqual( {'aarch64', 'armv7hl', 'i686', 'ppc64', 'ppc64le', 's390x', 'x86_64'}, koji_util.get_srpm_arches(self.session, self.all_arches, nvra, build_arches=self.all_arches), )
def test_get_srpm_arches_override_inv_non_canon(self): nvra = {'arch': 'src', 'name': 'rnv', 'release': '11.fc26', 'version': '1.7.11'} self.assertEqual( {'i686', 'x86_64'}, koji_util.get_srpm_arches(self.session, self.all_arches, nvra, arch_override="^armv7hl"), )
def test_get_srpm_arches_override(self): nvra = {'arch': 'src', 'name': 'rnv', 'release': '11.fc26', 'version': '1.7.11'} self.assertEqual( {'i386', 'x86_64'}, koji_util.get_srpm_arches(self.session, self.all_arches, nvra, arch_override="x86_64 i386"), )
def test_get_srpm_arches_non_canon_build_arches(self): nvra = {'arch': 'src', 'name': 'rnv', 'release': '11.fc26', 'version': '1.7.11'} self.assertEqual( {'aarch64', 'armv7hl', 'i686', 'ppc64', 'ppc64le', 's390x', 'x86_64'}, koji_util.get_srpm_arches(self.session, self.all_arches, nvra, build_arches=self.all_arches), )
def main(self): incomplete_builds_count = self.db.query(Build)\ .filter(Build.state == Build.RUNNING)\ .count() if incomplete_builds_count >= get_config('koji_config.max_builds'): self.log.debug("Not scheduling: {} incomplete builds" .format(incomplete_builds_count)) return for package_id, priority in self.get_priorities(): if priority < get_config('priorities.build_threshold'): self.log.info("Not scheduling: no package above threshold") return package = self.db.query(Package).get(package_id) koji_session = self.session.koji('primary') all_arches = koji_util.get_koji_arches_cached( self.session, koji_session, package.collection.build_tag, ) arches = koji_util.get_srpm_arches( koji_session=self.session.secondary_koji_for(package.collection), all_arches=all_arches, nvra=package.srpm_nvra, arch_override=package.arch_override, ) if arches is None: self.skip_no_srpm(package) continue if not arches: self.log.info("Skipping {}: no allowed arch".format(package.name)) package.scheduler_skip_reason = Package.SKIPPED_NO_ARCH # FIXME we don't have a better way how to get package out of # scheduler's way package.manual_priority -= 1000 continue koji_load_threshold = get_config('koji_config.load_threshold') if koji_load_threshold < 1: koji_load = koji_util.get_koji_load( koji_session=koji_session, all_arches=all_arches, arches=arches, ) if koji_load > koji_load_threshold: self.log.debug("Not scheduling {}: {} koji load" .format(package, koji_load)) return self.log.info('Scheduling build for {} in {}, priority {}' .format(package.name, package.collection.name, priority)) build = backend.submit_build( self.session, package, arch_override=None if 'noarch' in arches else arches, ) package.current_priority = None package.scheduler_skip_reason = None package.manual_priority = 0 if not build: self.skip_no_srpm(package) continue self.db.commit() break