fix(local): make trial-build-patch.R detect non-throwing build failures

local/trial-build-patch.R -- the single-package acceptance gate the proposer
tells humans to run -- reported "Trial build OK" for a build that actually
failed (rstan's rstan.so failing to load with an undefined TBB symbol). Same
root cause as the registry gate before #130: build_binary_package() catches
failures internally and returns "error" rather than throwing, so a tryCatch that
only treats a thrown exception as failure false-greens.

Inspect the return value: a pass requires a non-empty result containing no
"error" sentinel. Mirrors the fix in trial-build-registry.R.
This commit is contained in:
Patrick Schratz 2026-07-17 14:51:20 +00:00
commit 3d3c4c462a
No known key found for this signature in database
GPG key ID: 62050D5BC68AB6DC

View file

@ -40,23 +40,26 @@ cat(sprintf(
patches_dir
))
ok <- tryCatch(
{
bincraft::build_binary_package(
package,
tag_limit = 1L,
patches = patches_dir,
archive = FALSE,
upload = FALSE,
store_build_metadata = FALSE
)
TRUE
},
# build_binary_package() catches build failures internally and RETURNS "error"
# for the failed tag rather than throwing (bincraft >= v4.4.7), so inspect the
# return value -- checking only for a thrown exception reports a broken build as
# passing (false green).
res <- tryCatch(
bincraft::build_binary_package(
package,
tag_limit = 1L,
patches = patches_dir,
archive = FALSE,
upload = FALSE,
store_build_metadata = FALSE
),
error = function(e) {
cat(sprintf("Trial build FAILED: %s\n", conditionMessage(e)))
FALSE
cat(sprintf("Trial build FAILED (threw): %s\n", conditionMessage(e)))
"error"
}
)
flat <- as.character(unlist(res))
ok <- length(flat) > 0L && !("error" %in% flat)
if (ok) {
cat(sprintf("Trial build OK: %s builds with the proposed patch.\n", package))