From f7b0d5a0cfc5ae9d5e6373b24f06e1d7c7a060c0 Mon Sep 17 00:00:00 2001 From: "Sylvio Poliart (sypol)" Date: Thu, 30 Apr 2026 16:00:09 +0200 Subject: [PATCH] [IMP] runbot: prefer successful build for similar build quick result When reusing a similar build as a quick result, first look for a build with global_result == 'ok'. Fall back to the existing logic (any done build not skipped/killed) only if no successful build is found. Without this, a previously failed build could be used to shortcut subsequent similar builds, propagating the failure without letting them run. --- runbot/models/build_config.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/runbot/models/build_config.py b/runbot/models/build_config.py index 9c3a5ccee..672f6eb81 100644 --- a/runbot/models/build_config.py +++ b/runbot/models/build_config.py @@ -1027,7 +1027,9 @@ def get_reference_builds_for_versions(versions): ) if self.allow_similar_build_quick_result: - existing_done_build = next((build for build in child.params_id.build_ids.sorted('id') if build.global_state == 'done' and build.local_result not in ('skipped', 'killed')), None) + existing_done_build = next((build for build in child.params_id.build_ids.sorted('id') if build.global_state == 'done' and build.global_result == 'ok'), None) + if not existing_done_build: + existing_done_build = next((build for build in child.params_id.build_ids.sorted('id') if build.global_state == 'done' and build.local_result not in ('skipped', 'killed')), None) if existing_done_build: child._log('', 'A similar [build](%s) has been found, marking as done directly', existing_done_build.build_url, log_type='markdown') child.local_state = 'done'