build-cran-binaries/R/process_cran_updates.R
2024-08-28 18:29:52 +02:00

70 lines
2.6 KiB
R

#' @title Process updated and new CRAN packages
#' @description
#' Packages which got removed from CRAN can be deleted by setting `prune = TRUE`.
#' Argument `interval` allows to specify a range which should be processed.
#'
#' @importFrom dplyr bind_rows
#' @importFrom purrr walk2
#' @export
process_cran_updates <- function(
package_name,
tag,
platform,
local_clone_dir,
interval = lubridate::today(),
prune = TRUE,
build_for_minor = FALSE,
codename = NULL,
r_minor_version = NULL,
local_build_root = ".",
endpoint = "https://s3.eu-central-003.backblazeb2.com",
region = "eu-central-003",
bucket = "devxy-arm64-r-binaries") {
# Get list of updated and new packages for a specific day
updated_pkgs <- get_updated_cran_packages(interval)
new_pkgs <- get_new_cran_packages(interval)
cli::cli_alert_success("{.fun process_cran_updates}: Updated packages:")
print(updated_pkgs)
cli::cli_alert_success("{.fun process_cran_updates}: New packages:")
print(new_pkgs)
all_pkgs <- dplyr::bind_rows(updated_pkgs, new_pkgs)
# purrr::walk2(all_pkgs$name, all_pkgs$version, ~ build_binary_package(.x, .y, platform = platform))
if (prune) {
removed_pkgs <- get_removed_cran_packages(interval)
cli::cli_alert_success("{.fun process_cran_updates}: Removed packages:")
print(removed_pkgs)
s3fs::s3_file_system(
aws_access_key_id = Sys.getenv("AWS_ACCESS_KEY_ID"),
aws_secret_access_key = Sys.getenv("AWS_SECRET_ACCESS_KEY"),
endpoint = endpoint,
region_name = region,
)
if (!build_for_minor) {
local_bin_dir <- sprintf("%s/arm64/%s/latest/src/contrib", local_build_root, codename)
remote_bin_dir <- sprintf("%s/arm64/%s/latest/src/contrib", bucket, codename)
} else {
dir_out_bin <- sprintf("%s/arm64/%s/%s/latest/src/contrib", local_build_root, codename, r_minor_version)
remote_bin_dir <- sprintf("%s/arm64/%s/%s/latest/src/contrib", bucket, codename, r_minor_version)
}
files <- s3fs::s3_dir_ls(remote_bin_dir)
purrr::walk(removed_pkgs$name, ~ {
cli::cli_alert("{.fun process_cran_updates}: Removing package {.pkg {.x}} from S3.")
files_filtered <- grep(sprintf("%s_", .x), files, value = TRUE)
if (length(files_filtered > 0)) {
s3fs::s3_file_delete(files_filtered)
} else {
cli::cli_alert("{.fun process_cran_updates}: No tarballs found for package {.pkg {.x}} - already removed?")
}
cli::cli_alert_success("{.fun process_cran_updates}: Successfully removed {.pkg {basename(files_filtered)}} from S3.")
})
}
}