feat(full): per-package r-minor flag and --sensitive-only mode in build-all.R
This commit is contained in:
parent
34173a6722
commit
a33986a8d6
3 changed files with 42 additions and 9 deletions
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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])
|
||||
)
|
||||
}
|
||||
|
|
|
|||
13
local/tests/test-build-all-args.R
Normal file
13
local/tests/test-build-all-args.R
Normal 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)
|
||||
})
|
||||
Loading…
Reference in a new issue