fix(build): scope the errored-package filter to the snapshot's R minor #194

Merged
pat-s merged 1 commit from fix/scope-errored-packages-by-minor into main 2026-09-03 13:37:05 +00:00
Showing only changes of commit 699d299185 - Show all commits

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
Patrick Schratz 2026-09-03 10:10:18 +00:00
No known key found for this signature in database
GPG key ID: 62050D5BC68AB6DC

View file

@ -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)