schedule only appropriate flavors based on critpath groups
All checks were successful
CI via Tox / checkwiki (pull_request) Successful in 52s
CI via Tox / tox (pull_request) Successful in 2m12s

Signed-off-by: Adam Williamson <awilliam@redhat.com>
This commit is contained in:
Adam Williamson 2026-07-07 17:14:21 -07:00
commit c1ac713c25

View file

@ -249,7 +249,7 @@ class OpenQAScheduler(object):
self.logger.info(tmpl, ', '.join(flavors), advisory)
self._update_schedule(advisory, version, flavors, force=force, updic=update)
def _jobs_from_flag(self, flag, version, branch, prid):
def _jobs_from_flag(self, flag, version, branch, prid, pkgname):
""""""
if flag.get("comment") == "RPM build succeeded." and flag.get("user", {}).get("name") == "packit":
if not f" {branch} " in flag.get("username", ""):
@ -260,8 +260,15 @@ class OpenQAScheduler(object):
self.logger.warning("Task ID %s unexpected!", task)
return False
self.logger.info("Running tests on pull request %s", prid)
# discover appropriate flavors
critpath = SESSION.get("https://bodhi.fedoraproject.org/get_critpath_components").json()
groups = [group for group in critpath if pkgname in critpath[group]]
# this is hella janky, but we'll just construct an update
# dict realistic enough we can reuse get_critpath_flavors
fakeupd = {"critpath_groups": groups, "release": {"version": version}}
flavors = schedule.get_critpath_flavors(fakeupd) or None
build = f"PR-{task}-{prid}"
self._update_schedule(build, version, None, force=True, updic=None)
self._update_schedule(build, version, flavors, force=True, updic=None)
overviewurl = f"{self.openqa_baseurl}/tests/overview?"
params = {"distri": "fedora", "build": f"{build}-NOREPORT", "groupid": 2, "version": version}
overviewurl += urlencode(params)
@ -286,6 +293,7 @@ class OpenQAScheduler(object):
self.logger.debug("Not a comment requesting openQA tests")
return
prid = pr.get("project", {}).get("fullname", "") + "#" + str(pr.get("id", ""))
pkgname = pr.get("project", {}).get("name", "")
version, branch = _version_from_branch(body, self.logger)
if not version:
return
@ -293,7 +301,7 @@ class OpenQAScheduler(object):
flags = SESSION.get(flagurl, timeout=60).json().get("flags", [{}])
flags.sort(key=lambda x: int(x.get("date_updated")))
for flag in flags:
ret = self._jobs_from_flag(flag, version, branch, prid)
ret = self._jobs_from_flag(flag, version, branch, prid, pkgname)
if ret:
task, overviewurl = ret
_set_pr_flag(flagurl, "pending", task, overviewurl, self.logger)
@ -317,7 +325,8 @@ class OpenQAScheduler(object):
return
flag = body.get("flag", {})
prid = pr.get("project", {}).get("fullname", "") + "#" + str(pr["id"])
ret = self._jobs_from_flag(flag, version, branch, prid)
pkgname = pr.get("project", {}).get("name", "")
ret = self._jobs_from_flag(flag, version, branch, prid, pkgname)
if ret:
task, overviewurl = ret
flagurl = fullurl.replace("/rpms", "/api/0/rpms") + "/flag"