64 lines
2.6 KiB
R
64 lines
2.6 KiB
R
#' Archive packages in CRAN-like repositories
|
|
#' @export
|
|
#' @examples
|
|
#' archive_package("AATtools", codename = "rhel9")
|
|
#'
|
|
archive_package <- function(
|
|
package_name,
|
|
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") {
|
|
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,
|
|
)
|
|
|
|
codename <- set_codename(codename)
|
|
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)
|
|
|
|
foo <- lapply(package_name, function(.x) {
|
|
if (!s3fs::s3_dir_exists(sprintf("%s/Archive/%s", remote_bin_dir, .x))) {
|
|
s3fs::s3_dir_create(sprintf("%s/Archive/%s", remote_bin_dir, .x))
|
|
}
|
|
all_versions <- grep(sprintf("/%s_", .x), files, value = TRUE)
|
|
# only archive if more than one package exists in the root
|
|
if (length(all_versions) > 1) {
|
|
# get most recent version from CRAN
|
|
last_version <- available.packages("https://cloud.r-project.org")[.x, "Version"]
|
|
# check if last version is available in repo
|
|
if (any(grepl(last_version, all_versions))) {
|
|
index <- which(grepl(last_version, all_versions))
|
|
old_versions <- all_versions[-index]
|
|
} else {
|
|
versions = rev(pak::pkg_history(.x)$Version)
|
|
for (i in versions) {
|
|
if (any(grepl(i, all_versions))) {
|
|
index <- which(grepl(i, all_versions))
|
|
old_versions <- all_versions[-index]
|
|
break
|
|
}
|
|
}
|
|
}
|
|
cli::cli_alert("{.fun archive_package}: Archiving {.field {basename(old_versions)}}, keeping {.field {basename(all_versions[index])}}.")
|
|
s3fs::s3_file_move(old_versions, sprintf("%s/Archive/%s/%s", remote_bin_dir, .x, basename(old_versions)), overwrite = TRUE)
|
|
cli::cli_alert_success("{.fun archive_package}: Successfully archived package {.pkg {.x}}.")
|
|
}
|
|
cli::cli_alert("{.fun archive_package}: Skipping {.pkg {.x}} as only one package versions exists.")
|
|
})
|
|
|
|
return(invisible(TRUE))
|
|
}
|