Пример #1
0
 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,
         )
Пример #2
0
 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),
     )
Пример #3
0
 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,
         )
Пример #4
0
 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),
     )
Пример #5
0
 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),
     )
Пример #6
0
 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),
     )
Пример #7
0
 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),
     )
Пример #8
0
 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),
     )
Пример #9
0
 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),
     )
Пример #10
0
 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),
     )
Пример #11
0
 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),
     )
Пример #12
0
 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"),
     )
Пример #13
0
 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"),
     )
Пример #14
0
 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),
     )
Пример #15
0
    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