#' @importFrom s3fs s3_file_exists s3_file_upload s3_file_system #' @export upload_single_binary_to_s3 <- function( endpoint = "https://s3.eu-central-003.backblazeb2.com", region = "eu-central-003", bucket = "devxy-arm64-r-binaries", local_build_root = "/mnt/cache/binaries/", codename = NULL, package_name, tag, r_minor_version = NULL, build_for_minor = FALSE, force = FALSE, debug = FALSE) { codename <- set_codename(codename) if (is.null(r_minor_version)) { r_minor_version <- sub("R version (\\d+\\.\\d+).*", "\\1", R.Version()$version.string) } local_bin_path <- set_bin_path(r_minor_version, build_for_minor, local_build_root = local_build_root, codename) remote_bin_path <- set_bin_path(r_minor_version, build_for_minor, local_build_root = bucket, codename) if (debug) { cli::cli_alert_warning("DEBUG: local_bin_path: {local_bin_path}") cli::cli_alert_warning("DEBUG: remote_bin_path: {remote_bin_path}") } 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, ) tarball_name <- sprintf("%s_%s.tar.gz", package_name, tag) exists <- s3fs::s3_file_exists(sprintf("%s/%s", remote_bin_path, tarball_name)) if ((!exists && !force) || (!exists && force)) { cli::cli_alert("{.fun upload_single_binary_to_s3}: Uploading {.pkg {package_name}} {.field {tag}} to S3.") s3fs::s3_file_upload( sprintf("%s/%s", local_bin_path, tarball_name), sprintf("%s/%s", remote_bin_path, tarball_name) ) } else if (exists && force) { cli::cli_alert_info("{.fun upload_single_binary_to_s3}: Force uploading package {.pkg {package_name}} {.field {tag}} because {.code force = TRUE} was set.") s3fs::s3_file_upload( sprintf("%s/%s", local_bin_path, tarball_name), sprintf("%s/%s", remote_bin_path, tarball_name), overwrite = TRUE ) } else if (exists && !force) { cli::cli_alert("{.fun upload_single_binary_to_s3}: Package {.pkg {package_name}} {.field {tag}} already exists in S3. Skipping upload.") } }