From 699d2991856926dd633ce1c83793edbad755ebfe Mon Sep 17 00:00:00 2001 From: pat-s Date: Thu, 3 Sep 2026 10:10:18 +0000 Subject: [PATCH] fix(build): scope the errored-package filter to the snapshot's R minor The candidate list removed every package with an error row for this platform/arch, regardless of the R version that produced it. The row is keyed by (name, tag, platform, arch) only, so one failure under 4.6 also cancelled that package's 4.4 and 4.5 builds, permanently and silently. This is what the residual per-minor gaps were. On amd64/alpine324, 505 of the 508 ABI-risky packages missing from the 4.4 index were also missing from 4.6, a 99% overlap that per-minor build failures would not produce, and none of them were attempted by the run that had just succeeded. Errors specific to another minor are still respected: bincraft's filter_packages_with_errors() runs per pass with that pass's own r_version. This change will: - add the same substring(r_version ...) scoping used by #119 and #189 --- local/packages-to-build.R | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/local/packages-to-build.R b/local/packages-to-build.R index 0654a43..ead73b8 100644 --- a/local/packages-to-build.R +++ b/local/packages-to-build.R @@ -355,12 +355,30 @@ query_error <- function(pkg, ver) { } # Fetch all relevant columns from the database +# Scoped to the snapshot's own R minor, like `check_package_error()` in +# bincraft (#119) and the per-minor error query (#189). Unscoped, a single +# failure under any one minor removed the package from the candidate list for +# every minor, permanently: the row is keyed by (name, tag, platform, arch) +# only, so an error under 4.6 also cancelled its 4.4 and 4.5 builds. +# +# That is what the residual per-minor gaps were. On amd64/alpine324, 505 of the +# 508 ABI-risky packages missing from 4.4 were also missing from 4.6 -- a 99% +# overlap, which per-minor build failures would not produce. None of them were +# even attempted by the run that had just succeeded. +# +# Errors specific to another minor are still respected downstream: +# `filter_packages_with_errors()` runs per pass with that pass's r_version. errored_pkgs <- DBI::dbGetQuery( con, sprintf( - "SELECT name, tag FROM single_builds WHERE error_occurred = TRUE and platform='%s' and arch='%s'", + paste0( + "SELECT name, tag FROM single_builds WHERE error_occurred = TRUE ", + "and platform='%s' and arch='%s' ", + "and substring(r_version from '^[0-9]+[.][0-9]+') = '%s'" + ), platform, - arch + arch, + snapshot_r_minor ) ) errored_pkgs <- as.data.table(errored_pkgs) -- 2.54.0