capture arch in metadata table

This commit is contained in:
Patrick Schratz 2024-09-24 08:13:08 +02:00
commit 66b0a1046a
Signed by: pat-s
GPG key ID: 3C6318841EF78925
5 changed files with 40 additions and 20 deletions

View file

@ -12,6 +12,7 @@ build_binary_package <- function(package_name, tag = NULL, codename = NULL,
local_build_root = "/root",
local_clone_dir = "/tmp",
platform = NULL,
arch = NULL,
install_system_dependencies = TRUE,
deps_verbose = FALSE,
debug = FALSE,
@ -46,6 +47,14 @@ build_binary_package <- function(package_name, tag = NULL, codename = NULL,
local_bin_path <- set_bin_path(r_minor_version, build_for_minor, local_build_root = local_build_root, codename)
# set arch
local_arch <- Sys.info()[["machine"]]
if (grepl("arm64", local_arch) || grepl("aarch64", local_arch)) {
arch <- "arm64"
} else if (grepl("amd64", local_arch) || grepl("x86_64", local_arch)) {
arch <- "amd64"
}
if (debug) {
cli::cli_alert_warning("DEBUG: dir_out_bin {dir_out_bin}.")
}
@ -96,7 +105,7 @@ build_binary_package <- function(package_name, tag = NULL, codename = NULL,
tryCatch(
{
dump <- build_single_tag(x, y, dir_out_bin, local_clone_dir,
platform = platform, debug = debug, force = force,
platform = platform, arch = arch, debug = debug, force = force,
install_system_dependencies = install_system_dependencies,
deps_verbose = deps_verbose
)
@ -107,7 +116,7 @@ build_binary_package <- function(package_name, tag = NULL, codename = NULL,
cli::cli_alert_success("Successfully built package {.pkg {x}} with tag {.field {y}}.")
} else {
cli::cli_alert_warning("Error in building package {.pkg {x}} with tag {.field {y}}: Uncommon/unspecific error during build.")
store_build_metadata(x, y, platform, error_occurred = TRUE, force = TRUE, error = "Uncommon/unspecific error during build")
store_build_metadata(x, y, platform, error_occurred = TRUE, force = TRUE, arch = arch, error = "Uncommon/unspecific error during build")
}
},
error = function(e) {
@ -115,7 +124,7 @@ build_binary_package <- function(package_name, tag = NULL, codename = NULL,
local_clone_dir_single <- sprintf("%s/%s_%s", local_clone_dir, x, y)
unlink(local_clone_dir_single, force = TRUE, recursive = TRUE)
# only stderr contains the important information why the build failed
store_build_metadata(x, y, platform, error_occurred = TRUE, force = TRUE, error = e$stderr)
store_build_metadata(x, y, platform, error_occurred = TRUE, arch = arch, force = TRUE, error = e$stderr)
}
)
}
@ -154,8 +163,10 @@ build_binary_package <- function(package_name, tag = NULL, codename = NULL,
#' @importFrom fs file_size file_move
#' @export
build_single_tag <- function(
package_name, tag = NULL,
package_name,
tag = NULL,
platform,
arch,
dir_out_bin,
local_clone_dir,
debug = FALSE,
@ -181,7 +192,7 @@ build_single_tag <- function(
# NB: here we need to use conditionMessage() to extract the actual error - as opposed to using $stderr for errors within the tryCatch used in the future* calls
error = function(e) {
cli::cli_alert_warning("Error in installing dependencies for package {.pkg {package_name[1]}} with tag {.field {tag[1]}}: {e}")
store_build_metadata(package_name[1], tag[1], platform, error_occurred = TRUE, force = TRUE, error = conditionMessage(e))
store_build_metadata(package_name[1], tag[1], platform, arch = arch, error_occurred = TRUE, force = TRUE, error = conditionMessage(e))
return(TRUE)
}
)
@ -217,7 +228,7 @@ build_single_tag <- function(
cli::cli_alert_warning("Error in starting build command for package {.pkg {package_name}} with tag {.field {tag}}: {e}")
local_clone_dir_single <- sprintf("%s/%s_%s", local_clone_dir, package_name, tag)
unlink(local_clone_dir_single, force = TRUE, recursive = TRUE)
store_build_metadata(package_name, tag, platform, error_occurred = TRUE, force = TRUE, error = sprintf("Error trying to initiate pkgbuild - likely a non-valid R package structure. Full error: %s", e))
store_build_metadata(package_name, tag, platform, arch = arch, error_occurred = TRUE, force = TRUE, error = sprintf("Error trying to initiate pkgbuild - likely a non-valid R package structure. Full error: %s", e))
return(invisible(TRUE))
}
)
@ -228,28 +239,27 @@ build_single_tag <- function(
linux_suffix <- "gnu"
}
# set tarball id for arch
local_arch <- Sys.info()[["machine"]]
if (grepl("arm64", local_arch) || grepl("aarch64", local_arch)) {
arch <- "aarch64"
whatever_id <- "unknown"
tarball_id <- "unknown"
} else if (grepl("amd64", local_arch) || grepl("x86_64", local_arch)) {
arch <- "x86_64"
whatever_id <- "pc"
tarball_id <- "pc"
}
if (!file.exists(sprintf("%s/%s_%s.tar.gz", dir_out_bin, package_name, tag))) {
if (debug) {
cli::cli_alert_info('{.fun build_single_tag}: DEBUG: Moving package from {.path {sprintf("%s/%s_%s_R_%s-%s-linux-%s.tar.gz", dir_out_bin, package_name, tag, arch, whatever_id, linux_suffix)}} to {.path {sprintf("%s/%s_%s.tar.gz", dir_out_bin, package_name, tag)}}')
cli::cli_alert_info('{.fun build_single_tag}: DEBUG: Moving package from {.path {sprintf("%s/%s_%s_R_%s-%s-linux-%s.tar.gz", dir_out_bin, package_name, tag, arch, tarball_id, linux_suffix)}} to {.path {sprintf("%s/%s_%s.tar.gz", dir_out_bin, package_name, tag)}}')
}
# double-check that file exists (some packages like https://github.com/cran/BACCO/tree/1.0-14 don't include R/ and hence don't procude a valid binary)
if (fs::file_exists(sprintf("%s/%s_%s_R_%s-%s-linux-%s.tar.gz", dir_out_bin, package_name, tag, arch, whatever_id, linux_suffix))) {
if (fs::file_exists(sprintf("%s/%s_%s_R_%s-%s-linux-%s.tar.gz", dir_out_bin, package_name, tag, arch, tarball_id, linux_suffix))) {
# remove _aarch64-unknown-linux-gnu/musl part in filename
fs::file_move(
sprintf("%s/%s_%s_R_%s-%s-linux-%s.tar.gz", dir_out_bin, package_name, tag, arch, whatever_id, linux_suffix),
sprintf("%s/%s_%s_R_%s-%s-linux-%s.tar.gz", dir_out_bin, package_name, tag, arch, tarball_id, linux_suffix),
sprintf("%s/%s_%s.tar.gz", dir_out_bin, package_name, tag)
)
} else {
cli::cli_alert_info('{.fun build_single_tag}: File for package {.pkg {package_name}} {.field {tag}} at {.path {sprintf("%s/%s_%s_R_%s-%s-linux-%s.tar.gz", dir_out_bin, package_name, tag, arch, whatever_id, linux_suffix)}} does not exist - skipping.')
cli::cli_alert_info('{.fun build_single_tag}: File for package {.pkg {package_name}} {.field {tag}} at {.path {sprintf("%s/%s_%s_R_%s-%s-linux-%s.tar.gz", dir_out_bin, package_name, tag, arch, tarball_id, linux_suffix)}} does not exist - skipping.')
if (debug) {
message(sprintf("DEBUG: Listing dir 'dir_out_bin': %s", dir_out_bin))
message(fs::dir_ls(dir_out_bin))
@ -275,7 +285,7 @@ build_single_tag <- function(
tarball_name <- sprintf("%s_%s.tar.gz", package_name, tag)
if (fs::file_exists(sprintf("%s/%s", dir_out_bin, tarball_name))) {
store_build_metadata(package_name, tag, platform, error_occurred = FALSE, force = force, build_duration = total_build_time, size = file_size)
store_build_metadata(package_name, tag, platform, arch = arch, error_occurred = FALSE, force = force, build_duration = total_build_time, size = file_size)
}
}

View file

@ -1,7 +1,7 @@
#' Stores build metadata of single binary builds in a Postgres DB
#' @importFrom DBI dbConnect dbDisconnect dbWriteTable dbGetQuery dbExecute
store_build_metadata <- function(
package_name, tag, platform, error_occurred,
package_name, tag, platform, error_occurred, arch,
force = FALSE, error = NA, build_duration = NA, size = NA) {
con <- DBI::dbConnect(RPostgres::Postgres(),
dbname = "build_metadata", host = "r-binaries.devxy.io",
@ -11,7 +11,7 @@ store_build_metadata <- function(
# Check if an entry with the same package_name and tag already exists
existing_entries <- dbGetQuery(con, paste0(
"SELECT * FROM single_builds WHERE name = '",
package_name, "' AND tag = '", tag, "' AND platform = '", platform, "'"
package_name, "' AND tag = '", tag, "' AND platform = '", arch, "' AND arch = '", platform, "'"
))
if (nrow(existing_entries) >= 1 && !force) {
@ -29,6 +29,7 @@ store_build_metadata <- function(
name = package_name,
tag = tag,
platform = platform,
arch = arch,
error_occurred = error_occurred,
error_text = error,
size = size,
@ -90,7 +91,9 @@ build_metadata_summary <- function(package_name, platform) {
", percentage_successful_builds = ", summary$percentage_successful_builds,
", average_build_time_per_tag = '", summary$average_build_time_per_tag,
"', package_name = '", package_name,
"', platform = '", platform, "'"
"', platform = '", platform, "'",
"', arch = '", platform, "'",
))
} else {
dbWriteTable(con, "metadata_summary", summary)

View file

@ -13,7 +13,9 @@ archive_package(
endpoint = "https://s3.eu-central-003.backblazeb2.com",
region = "eu-central-003",
bucket = "devxy-arm64-r-binaries",
pause = NULL
pause = NULL,
arch = NULL,
debug = FALSE
)
}
\description{
@ -21,5 +23,6 @@ Archive packages in CRAN-like repositories
}
\examples{
archive_package("AATtools", codename = "rhel9")
archive_package("adw", codename = "rhel8", arch = "amd64")
}

View file

@ -13,11 +13,14 @@ build_binary_package(
local_build_root = "/root",
local_clone_dir = "/tmp",
platform = NULL,
arch = NULL,
install_system_dependencies = TRUE,
deps_verbose = FALSE,
debug = FALSE,
force = FALSE,
archive = TRUE
archive = TRUE,
future_strategy = "multisession",
future_workers = 2
)
}
\description{

View file

@ -9,6 +9,7 @@ store_build_metadata(
tag,
platform,
error_occurred,
arch,
force = FALSE,
error = NA,
build_duration = NA,