source(file.path("local", "newer-r-helpers.R")) source(file.path("local", "rebuild-missing-helpers.R")) args <- commandArgs(trailingOnly = TRUE) pos <- args[!startsWith(args, "--")] if (!length(pos) %in% c(1L, 3L)) { stop("Usage: build-newer-r.R PRIMARY_R [SPLIT_INTO SPLIT_INDEX] [--dry-run]") } primary_r <- pos[1L] target_r <- as.character(getRversion()) pkgs <- newer_r_candidates(tools::CRAN_package_db(), primary_r, target_r) exclude <- jsonlite::fromJSON("local/excluded-packages.json")[["package"]] pkgs <- pkgs[!pkgs$Package %in% exclude, , drop = FALSE] if (length(pos) == 3L) { pkgs <- pkgs[ shard_slice(seq_len(nrow(pkgs)), pos[2L], pos[3L]), , drop = FALSE ] } message(sprintf( "R %s: %d package(s) unsupported by primary R %s", target_r, nrow(pkgs), primary_r )) if ("--dry-run" %in% args) { print(pkgs, row.names = FALSE) } else { options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = NULL) for (i in seq_len(nrow(pkgs))) { message(sprintf( "[%d/%d] %s %s", i, nrow(pkgs), pkgs$Package[i], pkgs$Version[i] )) bincraft::build_binary_package( pkgs$Package[i], tag = pkgs$Version[i], # Keep bincraft's normal ABI routing: safe binaries can be shared; # sensitive ones use this interpreter's minor for presence and output. is_r_minor_sensitive = bincraft::classify_r_minor_sensitive( pkgs$Package[i], pkgs$Version[i], metadata_db_host = "r-binaries.devxy.io", metadata_db_name = "build_metadata", metadata_db_user = "rpkgs", metadata_db_password = Sys.getenv("PGPASS"), metadata_db_sslmode = "require", metadata_db_port = 15432 ), 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"), 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, patches = "local/patches", upload = TRUE, store_build_metadata = TRUE ) } }