feat: R-minor-sensitive binary builds (full + iterative) #84
3 changed files with 42 additions and 9 deletions
feat(full): per-package r-minor flag and --sensitive-only mode in build-all.R
commit
a33986a8d6
|
|
@ -1,10 +1,13 @@
|
||||||
sink(stdout(), type = "message")
|
sink(stdout(), type = "message")
|
||||||
options(crayon.enabled = TRUE, future.globals.onReference = NULL)
|
options(crayon.enabled = TRUE, future.globals.onReference = NULL)
|
||||||
|
source(file.path("local", "r-minor-helpers.R"))
|
||||||
|
|
||||||
args <- commandArgs(trailingOnly = TRUE)
|
args <- commandArgs(trailingOnly = TRUE)
|
||||||
split_into <- as.integer(args[1])
|
parsed <- parse_build_args(args)
|
||||||
split_index <- as.integer(args[2])
|
split_into <- parsed$split_into
|
||||||
ncpus <- as.integer(args[3])
|
split_index <- parsed$split_index
|
||||||
|
ncpus <- parsed$ncpus
|
||||||
|
sensitive_only <- parsed$sensitive_only
|
||||||
options(Ncpus = ncpus)
|
options(Ncpus = ncpus)
|
||||||
|
|
||||||
# Load bincraft eagerly to avoid lazy-load memory spike during first build call
|
# Load bincraft eagerly to avoid lazy-load memory spike during first build call
|
||||||
|
|
@ -12,9 +15,14 @@ library(bincraft, quietly = TRUE)
|
||||||
library(future)
|
library(future)
|
||||||
plan("sequential")
|
plan("sequential")
|
||||||
|
|
||||||
# Read precomputed package+version pairs
|
pkgs <- if (sensitive_only) {
|
||||||
pkgs <- readRDS("/mnt/cache/packages/pkgs_to_build.rds")
|
readRDS("/mnt/cache/packages/r_minor_sensitive_pkgs.rds")
|
||||||
sprintf("Total# of remaining package versions: %s", nrow(pkgs))
|
} 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
|
# Split into chunks for this worker
|
||||||
chunks <- split(pkgs, cut(seq_len(nrow(pkgs)), split_into, labels = FALSE))
|
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))
|
sprintf("S3 cache: %s files", length(s3_cache))
|
||||||
|
|
||||||
n <- nrow(chunk)
|
n <- nrow(chunk)
|
||||||
mapply(function(pkg, ver, i) {
|
mapply(function(pkg, ver, sens, i) {
|
||||||
cat(sprintf("[%d/%d] %s_%s\n", i, n, pkg, ver))
|
cat(sprintf("[%d/%d] %s_%s (r_minor_sensitive=%s)\n", i, n, pkg, ver, sens))
|
||||||
bincraft::build_binary_package(
|
bincraft::build_binary_package(
|
||||||
pkg,
|
pkg,
|
||||||
tag = ver,
|
tag = ver,
|
||||||
|
is_r_minor_sensitive = isTRUE(sens),
|
||||||
s3_endpoint = "https://s3.eu-central-003.backblazeb2.com",
|
s3_endpoint = "https://s3.eu-central-003.backblazeb2.com",
|
||||||
s3_region = "eu-central-003",
|
s3_region = "eu-central-003",
|
||||||
s3_bucket = "devxy-rpkgs-binaries",
|
s3_bucket = "devxy-rpkgs-binaries",
|
||||||
|
|
@ -54,4 +63,4 @@ mapply(function(pkg, ver, i) {
|
||||||
upload = TRUE,
|
upload = TRUE,
|
||||||
store_build_metadata = 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"
|
"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