From fe6327ed8446b057774cb2c254fc1197fcad861a Mon Sep 17 00:00:00 2001 From: Marek Blaha Date: Wed, 29 Oct 2025 15:49:54 +0100 Subject: [PATCH] Filter out Copr builds without SRPM in SQL In addition to pagination slicing, the CoprBuildsList class uses Python code to filter out Copr builds that are waiting for an SRPM or whose SRPM build failed. This causes that the API in some cases can return fewer items than the user requested. Moving the filter into SQL resolves the problem. The SQL filter relies on the fact that the build_id field is NULL until the build is actually created by submitting to Copr. Resolves: https://github.com/packit/packit-service/issues/2505 --- packit_service/models.py | 6 ++++++ packit_service/service/api/copr_builds.py | 10 ---------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/packit_service/models.py b/packit_service/models.py index e3cefa432..2327b2759 100644 --- a/packit_service/models.py +++ b/packit_service/models.py @@ -2238,6 +2238,12 @@ def get_merged_chroots( "packit_id_per_chroot", ), ) + .filter( + # Exclude builds without build_id - these are builds waiting for SRPM + # or where SRPM build failed, so technically they are not actual Copr + # builds yet. + CoprBuildTargetModel.build_id.isnot(None), + ) .group_by( CoprBuildTargetModel.build_id, ) # Group by identical element(s) diff --git a/packit_service/service/api/copr_builds.py b/packit_service/service/api/copr_builds.py index 9ca3e127c..974113ea9 100644 --- a/packit_service/service/api/copr_builds.py +++ b/packit_service/service/api/copr_builds.py @@ -7,7 +7,6 @@ from flask_restx import Namespace, Resource from packit_service.models import ( - BuildStatus, CoprBuildGroupModel, CoprBuildTargetModel, optional_timestamp, @@ -35,15 +34,6 @@ def get(self): first, last = indices() for build in CoprBuildTargetModel.get_merged_chroots(first, last): build_info = CoprBuildTargetModel.get_by_build_id(build.build_id, None) - if build_info.status == BuildStatus.waiting_for_srpm: - continue - if ( - build_info.status == BuildStatus.failure - and not build_info.build_start_time - and not build_info.build_logs_url - ): - # SRPM build failed, it doesn't make sense to list this build - continue project_info = build_info.get_project() build_dict = { "packit_id": build_info.id,