From 0b616191e2b08dcc3f91a74f0e0cef6dc60eb7eb Mon Sep 17 00:00:00 2001 From: vincent guyader Date: Mon, 17 Jun 2024 14:48:42 +0200 Subject: [PATCH] fix remove sysreqs.r-hub.io (#70) * bump version * update test * from pak::pkg_system_requirements to pak::pkg_sysreqs * update test * from sysreqs.r-hub.io to {pak} * update news.md * move R_USER_CACHE_DIR in setup file --- DESCRIPTION | 4 +- NAMESPACE | 2 - NEWS.md | 5 ++ R/get_sysreqs.R | 78 ++----------------------------- man/get_sysreqs.Rd | 3 +- tests/testthat/setup_cache_dir.R | 3 ++ tests/testthat/test-get_sysreqs.R | 31 +----------- 7 files changed, 18 insertions(+), 108 deletions(-) create mode 100644 tests/testthat/setup_cache_dir.R diff --git a/DESCRIPTION b/DESCRIPTION index e8b7478..f8d6825 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: dockerfiler Title: Easy Dockerfile Creation from R -Version: 0.2.2 +Version: 0.2.2.9001 Authors@R: c( person("Colin", "Fay", , "contact@colinfay.me", role = c("cre", "aut"), comment = c(ORCID = "0000-0001-7343-1846")), @@ -41,5 +41,5 @@ Config/fusen/version: 0.5.1 Config/testthat/edition: 3 Encoding: UTF-8 LazyData: true -RoxygenNote: 7.2.3 +RoxygenNote: 7.3.1 Roxygen: list(markdown = TRUE) diff --git a/NAMESPACE b/NAMESPACE index d3144b3..93bec8b 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -16,9 +16,7 @@ importFrom(cli,cat_bullet) importFrom(desc,desc_get) importFrom(desc,desc_get_deps) importFrom(fs,file_create) -importFrom(fs,file_delete) importFrom(fs,file_exists) -importFrom(fs,file_temp) importFrom(fs,path) importFrom(glue,glue) importFrom(jsonlite,fromJSON) diff --git a/NEWS.md b/NEWS.md index e749d8e..e58862b 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,8 @@ +# 0.2.2.xxxx + +- remove sysreqs.r-hub.io to use {pak} instead for system requirement detection + + # dockerfile 0.2.2 - fix : create a `use_pak` parameters in `dock_from_renv` to set `renv.config.pak.enabled = FALSE` instead of `renv.config.pak.enabled = TRUE` to avoid issues with {pak} during `renv::restore()` diff --git a/R/get_sysreqs.R b/R/get_sysreqs.R index 1a74f64..7b398af 100644 --- a/R/get_sysreqs.R +++ b/R/get_sysreqs.R @@ -1,8 +1,7 @@ #' Get system requirements #' #' This function retrieves information about the -#' system requirements using the -#' API. +#' system requirements using the `pak::pkg_sysreqs()`. #' #' @param packages character vector. Packages names. #' @param batch_n numeric. Number of simultaneous packages to ask. @@ -30,76 +29,9 @@ get_sysreqs <- function( ) ) ) - - sp <- split( - all_deps, - ceiling( - seq_along(all_deps) / batch_n - ) - ) - - - sort( - unique( - unname( - unlist( - lapply( - sp, - function(.x) { - get_batch_sysreqs( - .x, - quiet = quiet - ) - } - ) - ) - ) - ) - ) + raw_output <- pak::pkg_sysreqs(pkg = all_deps,sysreqs_platform = "debian") + unlist(raw_output$packages$system_packages) + out <- unlist(raw_output$packages$system_packages) + sort(unique(out[!is.na(out)])) } -#' @importFrom fs file_delete file_temp -get_batch_sysreqs <- function( - all_deps, - quiet = TRUE -) { - url <- sprintf( - "https://sysreqs.r-hub.io/pkg/%s/linux-x86_64-debian-gcc", - paste(all_deps, collapse = ",") - ) - path <- file_temp() - - # Try to download, may fail if - # no internet or sysreq unavailable. - # In that case, we return "" - is_downloaded <- try( - { - suppressWarnings({ - utils::download.file( - url, - path, - mode = "wb", - quiet = quiet - ) - }) - }, - silent = TRUE - ) - - if (attempt::is_try_error(is_downloaded)) { - cat_red_bullet("Unable to query the sysreqs.") - cat_red_bullet("Possible explanation: no internet connection or sysreqs.r-hub.io is unavailable.") - out <- "" - } else { - out <- jsonlite::fromJSON(path) - } - - try( - { - fs::file_delete(path) - }, - silent = TRUE - ) - - unique(out[!is.na(out)]) -} diff --git a/man/get_sysreqs.Rd b/man/get_sysreqs.Rd index acded9c..d76ad08 100644 --- a/man/get_sysreqs.Rd +++ b/man/get_sysreqs.Rd @@ -18,6 +18,5 @@ A vector of system requirements. } \description{ This function retrieves information about the -system requirements using the \url{https://sysreqs.r-hub.io} -API. +system requirements using the \code{pak::pkg_sysreqs()}. } diff --git a/tests/testthat/setup_cache_dir.R b/tests/testthat/setup_cache_dir.R new file mode 100644 index 0000000..eaa3871 --- /dev/null +++ b/tests/testthat/setup_cache_dir.R @@ -0,0 +1,3 @@ +R_USER_CACHE_DIR<-tempfile() +dir.create(R_USER_CACHE_DIR) +Sys.setenv("R_USER_CACHE_DIR"=R_USER_CACHE_DIR) diff --git a/tests/testthat/test-get_sysreqs.R b/tests/testthat/test-get_sysreqs.R index 60af27e..f72b3c7 100644 --- a/tests/testthat/test-get_sysreqs.R +++ b/tests/testthat/test-get_sysreqs.R @@ -1,14 +1,6 @@ test_that("get_sysreqs works", { skip_on_cran() - skip_if_not( - attr( - curlGetHeaders( - "https://sysreqs.r-hub.io/pkg/mongolite/linux-x86_64-debian-gcc" - ), - "status" - ) == 200 - ) - res <- get_batch_sysreqs( + res <- get_sysreqs( c("mongolite"), quiet = TRUE ) @@ -18,24 +10,5 @@ test_that("get_sysreqs works", { expect_true( inherits(res, "character") ) - # Test without internet - withr::with_envvar( - c( - "http_proxy" = "http://proxy:port", - "http_proxy_user" = "username", - "https_proxy" = "username", - "https_proxy_user" = "username", - "ftp_proxy" = "username" - ), - res <- get_sysreqs( - packages = "mongolite", - quiet = TRUE, - batch_n = 30 - ) - ) - expect_equal( - res, - "" - #c("libsasl2-dev", "libssl-dev") - ) + })