From a33986a8d668d67e52ff27d46de048b3db190f25 Mon Sep 17 00:00:00 2001 From: pat-s Date: Sat, 13 Jun 2026 20:51:42 +0200 Subject: [PATCH] feat(full): per-package r-minor flag and --sensitive-only mode in build-all.R --- local/build-all.R | 27 ++++++++++++++++++--------- local/r-minor-helpers.R | 11 +++++++++++ local/tests/test-build-all-args.R | 13 +++++++++++++ 3 files changed, 42 insertions(+), 9 deletions(-) create mode 100644 local/tests/test-build-all-args.R diff --git a/local/build-all.R b/local/build-all.R index 102d18c..8c181f3 100644 --- a/local/build-all.R +++ b/local/build-all.R @@ -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)) diff --git a/local/r-minor-helpers.R b/local/r-minor-helpers.R index ffe56fb..65aafdf 100644 --- a/local/r-minor-helpers.R +++ b/local/r-minor-helpers.R @@ -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]) + ) +} diff --git a/local/tests/test-build-all-args.R b/local/tests/test-build-all-args.R new file mode 100644 index 0000000..3308fc3 --- /dev/null +++ b/local/tests/test-build-all-args.R @@ -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) +})