feat: R-minor-sensitive binary builds (full + iterative) #84

Merged
pat-s merged 15 commits from t3code/69b1319c into main 2026-06-14 08:04:41 +00:00
3 changed files with 42 additions and 9 deletions
Showing only changes of commit a33986a8d6 - Show all commits

feat(full): per-package r-minor flag and --sensitive-only mode in build-all.R

Patrick Schratz 2026-06-13 20:51:42 +02:00
Signed by: pat-s
GPG key ID: 3C6318841EF78925

View file

@ -1,10 +1,13 @@
sink(stdout(), type = "message")
options(crayon.enabled = TRUE, future.globals.onReference = NULL)
source(file.path("local", "r-minor-helpers.R"))
args <- commandArgs(trailingOnly = TRUE)
split_into <- as.integer(args[1])
split_index <- as.integer(args[2])
ncpus <- as.integer(args[3])
parsed <- parse_build_args(args)
split_into <- parsed$split_into
split_index <- parsed$split_index
ncpus <- parsed$ncpus
sensitive_only <- parsed$sensitive_only
options(Ncpus = ncpus)
# Load bincraft eagerly to avoid lazy-load memory spike during first build call
@ -12,9 +15,14 @@ library(bincraft, quietly = TRUE)
library(future)
plan("sequential")
# Read precomputed package+version pairs
pkgs <- readRDS("/mnt/cache/packages/pkgs_to_build.rds")
sprintf("Total# of remaining package versions: %s", nrow(pkgs))
pkgs <- if (sensitive_only) {
readRDS("/mnt/cache/packages/r_minor_sensitive_pkgs.rds")
} else {
readRDS("/mnt/cache/packages/pkgs_to_build.rds")
}
# Back-compat: tolerate an older RDS without the column (treat all as non-sensitive)
if (is.null(pkgs$r_minor_sensitive)) pkgs$r_minor_sensitive <- FALSE
sprintf("Total# of remaining package versions: %s (sensitive_only=%s)", nrow(pkgs), sensitive_only)
# Split into chunks for this worker
chunks <- split(pkgs, cut(seq_len(nrow(pkgs)), split_into, labels = FALSE))
@ -32,11 +40,12 @@ s3_cache <- readRDS("/mnt/cache/packages/s3_cache.rds")
sprintf("S3 cache: %s files", length(s3_cache))
n <- nrow(chunk)
mapply(function(pkg, ver, i) {
cat(sprintf("[%d/%d] %s_%s\n", i, n, pkg, ver))
mapply(function(pkg, ver, sens, i) {
cat(sprintf("[%d/%d] %s_%s (r_minor_sensitive=%s)\n", i, n, pkg, ver, sens))
bincraft::build_binary_package(
pkg,
tag = ver,
is_r_minor_sensitive = isTRUE(sens),
s3_endpoint = "https://s3.eu-central-003.backblazeb2.com",
s3_region = "eu-central-003",
s3_bucket = "devxy-rpkgs-binaries",
@ -54,4 +63,4 @@ mapply(function(pkg, ver, i) {
upload = TRUE,
store_build_metadata = TRUE
)
}, chunk$Package, chunk$Version, seq_len(n))
}, chunk$Package, chunk$Version, chunk$r_minor_sensitive, seq_len(n))

View file

@ -20,3 +20,14 @@ classify_from_metadata <- function(needs_compilation, linking_to, risky_deps) {
}
"ambiguous"
}
parse_build_args <- function(args) {
sensitive_only <- "--sensitive-only" %in% args
pos <- args[!startsWith(args, "--")]
list(
sensitive_only = sensitive_only,
split_into = as.integer(pos[1L]),
split_index = as.integer(pos[2L]),
ncpus = as.integer(pos[3L])
)
}

View file

@ -0,0 +1,13 @@
source(file.path("..", "r-minor-helpers.R"))
test_that("parse_build_args splits flags from positionals", {
a <- parse_build_args(c("--sensitive-only", "4", "2", "8"))
expect_true(a$sensitive_only)
expect_identical(a$split_into, 4L)
expect_identical(a$split_index, 2L)
expect_identical(a$ncpus, 8L)
b <- parse_build_args(c("4", "2", "8"))
expect_false(b$sensitive_only)
expect_identical(b$split_into, 4L)
})