fix(local): make the trial-build gate detect non-throwing build failures
The gate reported "3/3 passed" while all three builds actually failed (their rstan dependency would not compile). Root cause: bincraft::build_binary_package() catches build failures internally and RETURNS "error" for the failed tag instead of throwing, so the gate's tryCatch never fired and every failed build looked like a pass -- a false green that would let broken registry entries merge. Inspect the return value: a tag is a pass only if the (flattened) result is non-empty and contains no "error" sentinel; a thrown error still counts as failure. Verified the verdict logic against error/skipped/TRUE/list/NULL/mixed.
This commit is contained in:
parent
ff9f5f5177
commit
8a1e535d8b
1 changed files with 25 additions and 14 deletions
|
|
@ -117,8 +117,11 @@ results <- vapply(
|
||||||
pkgs,
|
pkgs,
|
||||||
function(pkg) {
|
function(pkg) {
|
||||||
cat(sprintf("\n=== trial build: %s ===\n", pkg))
|
cat(sprintf("\n=== trial build: %s ===\n", pkg))
|
||||||
tryCatch(
|
# bincraft::build_binary_package() catches build failures internally and
|
||||||
{
|
# RETURNS "error" for the failed tag rather than throwing, so a green gate
|
||||||
|
# must inspect the return value -- checking only for a thrown exception
|
||||||
|
# reports a broken build as passing.
|
||||||
|
res <- tryCatch(
|
||||||
bincraft::build_binary_package(
|
bincraft::build_binary_package(
|
||||||
pkg,
|
pkg,
|
||||||
tag_limit = 1L,
|
tag_limit = 1L,
|
||||||
|
|
@ -126,14 +129,22 @@ results <- vapply(
|
||||||
archive = FALSE,
|
archive = FALSE,
|
||||||
upload = FALSE,
|
upload = FALSE,
|
||||||
store_build_metadata = FALSE
|
store_build_metadata = FALSE
|
||||||
)
|
),
|
||||||
TRUE
|
|
||||||
},
|
|
||||||
error = function(e) {
|
error = function(e) {
|
||||||
cat(sprintf("FAILED %s: %s\n", pkg, conditionMessage(e)))
|
cat(sprintf("FAILED %s (threw): %s\n", pkg, conditionMessage(e)))
|
||||||
FALSE
|
"error"
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
flat <- as.character(unlist(res))
|
||||||
|
ok <- length(flat) > 0L && !("error" %in% flat)
|
||||||
|
if (!ok) {
|
||||||
|
cat(sprintf(
|
||||||
|
"FAILED %s: build did not succeed (result: %s)\n",
|
||||||
|
pkg,
|
||||||
|
if (length(flat) > 0L) toString(flat) else "<empty>"
|
||||||
|
))
|
||||||
|
}
|
||||||
|
ok
|
||||||
},
|
},
|
||||||
logical(1L)
|
logical(1L)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue