add archive_packages()
This commit is contained in:
parent
67949c5afd
commit
7768d8a881
7 changed files with 99 additions and 4 deletions
|
|
@ -1,6 +1,7 @@
|
||||||
# Generated by roxygen2: do not edit by hand
|
# Generated by roxygen2: do not edit by hand
|
||||||
|
|
||||||
export(add_to_package_index)
|
export(add_to_package_index)
|
||||||
|
export(archive_package)
|
||||||
export(build_binary_package)
|
export(build_binary_package)
|
||||||
export(build_single_tag)
|
export(build_single_tag)
|
||||||
export(dbcon)
|
export(dbcon)
|
||||||
|
|
|
||||||
64
R/archive_packages.R
Normal file
64
R/archive_packages.R
Normal file
|
|
@ -0,0 +1,64 @@
|
||||||
|
#' 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()[.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))
|
||||||
|
}
|
||||||
|
|
@ -29,6 +29,8 @@ set_codename <- function(codename) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return(codename)
|
return(codename)
|
||||||
|
} else {
|
||||||
|
return(codename)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,11 @@ process_cran_updates <- function(
|
||||||
|
|
||||||
all_pkgs <- dplyr::bind_rows(updated_pkgs, 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))
|
purrr::walk2(all_pkgs$name, all_pkgs$version, ~ {
|
||||||
|
build_binary_package(.x, .y, platform = platform)
|
||||||
|
archive_package(.x)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
if (prune) {
|
if (prune) {
|
||||||
removed_pkgs <- get_removed_cran_packages(interval)
|
removed_pkgs <- get_removed_cran_packages(interval)
|
||||||
|
|
@ -57,7 +61,7 @@ process_cran_updates <- function(
|
||||||
|
|
||||||
purrr::walk(removed_pkgs$name, ~ {
|
purrr::walk(removed_pkgs$name, ~ {
|
||||||
cli::cli_alert("{.fun process_cran_updates}: Removing package {.pkg {.x}} from S3.")
|
cli::cli_alert("{.fun process_cran_updates}: Removing package {.pkg {.x}} from S3.")
|
||||||
files_filtered <- grep(sprintf("%s_", .x), files, value = TRUE)
|
files_filtered <- grep(sprintf("/%s_", .x), files, value = TRUE)
|
||||||
if (length(files_filtered > 0)) {
|
if (length(files_filtered > 0)) {
|
||||||
s3fs::s3_file_delete(files_filtered)
|
s3fs::s3_file_delete(files_filtered)
|
||||||
cli::cli_alert_success("{.fun process_cran_updates}: Successfully removed {.pkg {basename(files_filtered)}} from S3.")
|
cli::cli_alert_success("{.fun process_cran_updates}: Successfully removed {.pkg {basename(files_filtered)}} from S3.")
|
||||||
|
|
|
||||||
24
man/archive_package.Rd
Normal file
24
man/archive_package.Rd
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
% Generated by roxygen2: do not edit by hand
|
||||||
|
% Please edit documentation in R/archive_packages.R
|
||||||
|
\name{archive_package}
|
||||||
|
\alias{archive_package}
|
||||||
|
\title{Archive packages in CRAN-like repositories}
|
||||||
|
\usage{
|
||||||
|
archive_package(
|
||||||
|
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"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
\description{
|
||||||
|
Archive packages in CRAN-like repositories
|
||||||
|
}
|
||||||
|
\examples{
|
||||||
|
archive_package("AATtools", codename = "rhel9")
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -9,7 +9,7 @@ build_binary_package(
|
||||||
tag = NULL,
|
tag = NULL,
|
||||||
codename = NULL,
|
codename = NULL,
|
||||||
r_minor_version = NULL,
|
r_minor_version = NULL,
|
||||||
build_for_minor = TRUE,
|
build_for_minor = FALSE,
|
||||||
local_build_root = "/root",
|
local_build_root = "/root",
|
||||||
local_clone_dir = "/tmp",
|
local_clone_dir = "/tmp",
|
||||||
platform = NULL,
|
platform = NULL,
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
process_cran_updates(
|
process_cran_updates(
|
||||||
package_name,
|
package_name,
|
||||||
tag,
|
tag,
|
||||||
platform = platform,
|
platform,
|
||||||
local_clone_dir,
|
local_clone_dir,
|
||||||
interval = lubridate::today(),
|
interval = lubridate::today(),
|
||||||
prune = TRUE,
|
prune = TRUE,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue