build-cran-binaries/local/build-all.R
pat-s 98a661faef
refactor: single source of truth for excluded packages
local/build-all.R had a 75-name hardcoded vector that drifted from
local/excluded-packages.json (RcmdrPlugin.ROC was in the R vector
but missing from the JSON). weekly-rebuild-missing-* already reads
the JSON, so this aligns build-all.R with that pattern.

- Add the missing RcmdrPlugin.ROC entry to excluded-packages.json
- Replace the hardcoded vector in build-all.R with
  jsonlite::fromJSON("local/excluded-packages.json")[["package"]]
- Pull jsonlite into the install-deps step so it's available in
  /mnt/cache/R-pkgs for the build step
- Drop the dead base64 SKIP_PKGS docs comment from
  build-all-versions-arm64.yaml; point to the JSON instead
2026-05-28 15:51:00 +02:00

57 lines
2 KiB
R

sink(stdout(), type = "message")
options(crayon.enabled = TRUE, future.globals.onReference = NULL)
args <- commandArgs(trailingOnly = TRUE)
split_into <- as.integer(args[1])
split_index <- as.integer(args[2])
ncpus <- as.integer(args[3])
options(Ncpus = ncpus)
# Load bincraft eagerly to avoid lazy-load memory spike during first build call
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))
# Split into chunks for this worker
chunks <- split(pkgs, cut(seq_len(nrow(pkgs)), split_into, labels = FALSE))
chunk <- chunks[[split_index]]
sprintf("# of package versions for this job: %s", nrow(chunk))
# Exclude known problematic packages (single source of truth)
exclude <- jsonlite::fromJSON("local/excluded-packages.json")[["package"]]
chunk <- chunk[!chunk$Package %in% exclude, ]
# Read pre-computed S3 listing from install-deps step
# This avoids loading s3fs/reticulate/Python in the build container,
# saving significant memory for pak subprocess forks
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))
bincraft::build_binary_package(
pkg,
tag = ver,
s3_endpoint = "https://s3.eu-central-003.backblazeb2.com",
s3_region = "eu-central-003",
s3_bucket = "devxy-rpkgs-binaries",
s3_access_key_id = Sys.getenv("B2_S3_ACCESS_KEY"),
s3_secret_access_key = Sys.getenv("B2_S3_SECRET_KEY"),
s3_package_cache = s3_cache,
metadata_db_host = "r-binaries.devxy.io",
metadata_db_name = "build_metadata",
metadata_db_table = "single_builds",
metadata_db_user = "rpkgs",
metadata_db_password = Sys.getenv("PGPASS"),
metadata_db_sslmode = "require",
metadata_db_port = 15432,
archive = TRUE,
upload = TRUE,
store_build_metadata = TRUE
)
}, chunk$Package, chunk$Version, seq_len(n))