From 00b382a2288e37decf441651ea69153f13a833e3 Mon Sep 17 00:00:00 2001 From: Boyd Tarlinton Date: Fri, 28 Jun 2024 07:48:26 +1000 Subject: [PATCH 1/4] Use 'pkg_sysreqs' instead of 'pkg_system_requirements' (#69) * proof of concept code * switch statement * function name * extract install script * inflate * update imports * parse packages * inflate and docs * remove preinstall scripts Update script added later --------- Co-authored-by: Boyd Tarlinton --- DESCRIPTION | 6 ++++-- NAMESPACE | 4 +++- R/dock_from_renv.R | 39 ++++++++++++++++++------------------- dev/flat_dock_from_renv.Rmd | 39 ++++++++++++++++++------------------- 4 files changed, 45 insertions(+), 43 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index f8d6825..1ca3eb3 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -27,8 +27,10 @@ Imports: memoise, pak (>= 0.2.0), pkgbuild (>= 1.2.0), + purrr, R6 (>= 2.5.0), remotes (>= 2.2.0), + renv, usethis (>= 2.0.1), utils Suggests: @@ -37,9 +39,9 @@ Suggests: testthat (>= 3.0.0), withr VignetteBuilder: knitr -Config/fusen/version: 0.5.1 +Config/fusen/version: 0.5.2 Config/testthat/edition: 3 Encoding: UTF-8 LazyData: true -RoxygenNote: 7.3.1 Roxygen: list(markdown = TRUE) +RoxygenNote: 7.3.1 diff --git a/NAMESPACE b/NAMESPACE index 93bec8b..82ce290 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -21,8 +21,10 @@ importFrom(fs,path) importFrom(glue,glue) importFrom(jsonlite,fromJSON) importFrom(memoise,memoise) -importFrom(pak,pkg_system_requirements) +importFrom(pak,pkg_sysreqs) importFrom(pkgbuild,build) +importFrom(purrr,keep_at) +importFrom(purrr,pluck) importFrom(remotes,dev_package_deps) importFrom(remotes,package_deps) importFrom(usethis,use_build_ignore) diff --git a/R/dock_from_renv.R b/R/dock_from_renv.R index 82d35e5..dd74421 100644 --- a/R/dock_from_renv.R +++ b/R/dock_from_renv.R @@ -10,8 +10,8 @@ available_distros <- c( ) #' @importFrom memoise memoise -pkg_system_requirements_mem <- memoise::memoise( - pak::pkg_system_requirements +pkg_sysreqs_mem <- memoise::memoise( + pak::pkg_sysreqs ) @@ -47,7 +47,8 @@ pkg_system_requirements_mem <- memoise::memoise( #' #' @importFrom attempt map_try_catch #' @importFrom glue glue -#' @importFrom pak pkg_system_requirements +#' @importFrom pak pkg_sysreqs +#' @importFrom purrr keep_at pluck #' @export #' @examples @@ -100,28 +101,22 @@ dock_from_renv <- function( distro_args <- switch( distro, centos7 = list( - os = "centos", - os_release = "7" + sysreqs_platform = "centos-7" ), centos8 = list( - os = "centos", - os_release = "8" + sysreqs_platform = "centos-8" ), xenial = list( - os = "ubuntu", - os_release = "16.04" + sysreqs_platform = "ubuntu-16.04" ), bionic = list( - os = "ubuntu", - os_release = "18.04" + sysreqs_platform = "ubuntu-18.04" ), focal = list( - os = "ubuntu", - os_release = "20.04" + sysreqs_platform = "ubuntu-20.04" ), jammy = list( - os = "ubuntu", - os_release = "22.04" + sysreqs_platform = "ubuntu-2.04" ) ) @@ -177,7 +172,7 @@ dock_from_renv <- function( pkgs, FUN = function(x) { c( - list(package = x), + list(pkg = x), distro_args ) } @@ -188,18 +183,22 @@ dock_from_renv <- function( pkg_os, function(x) { do.call( - pkg_system_requirements_mem, + pkg_sysreqs_mem, x - ) + ) |> + pluck("packages") |> + keep_at("system_packages") }, .e = ~ character(0) - ) + ) |> + unlist() - pkg_installs <- unique(pkg_sysreqs) + pkg_installs <- unique(pkg_sysreqs) |> + lapply( function(.x) {paste0(install_cmd, " ", .x)}) if (length(unlist(pkg_installs)) == 0) { cat_bullet( diff --git a/dev/flat_dock_from_renv.Rmd b/dev/flat_dock_from_renv.Rmd index 3a44b37..b9673b6 100644 --- a/dev/flat_dock_from_renv.Rmd +++ b/dev/flat_dock_from_renv.Rmd @@ -53,8 +53,8 @@ available_distros <- c( ) #' @importFrom memoise memoise -pkg_system_requirements_mem <- memoise::memoise( - pak::pkg_system_requirements +pkg_sysreqs_mem <- memoise::memoise( + pak::pkg_sysreqs ) @@ -90,7 +90,8 @@ pkg_system_requirements_mem <- memoise::memoise( #' #' @importFrom attempt map_try_catch #' @importFrom glue glue -#' @importFrom pak pkg_system_requirements +#' @importFrom pak pkg_sysreqs +#' @importFrom purrr keep_at pluck #' @export dock_from_renv <- function( @@ -138,28 +139,22 @@ dock_from_renv <- function( distro_args <- switch( distro, centos7 = list( - os = "centos", - os_release = "7" + sysreqs_platform = "centos-7" ), centos8 = list( - os = "centos", - os_release = "8" + sysreqs_platform = "centos-8" ), xenial = list( - os = "ubuntu", - os_release = "16.04" + sysreqs_platform = "ubuntu-16.04" ), bionic = list( - os = "ubuntu", - os_release = "18.04" + sysreqs_platform = "ubuntu-18.04" ), focal = list( - os = "ubuntu", - os_release = "20.04" + sysreqs_platform = "ubuntu-20.04" ), jammy = list( - os = "ubuntu", - os_release = "22.04" + sysreqs_platform = "ubuntu-2.04" ) ) @@ -215,7 +210,7 @@ dock_from_renv <- function( pkgs, FUN = function(x) { c( - list(package = x), + list(pkg = x), distro_args ) } @@ -226,18 +221,22 @@ dock_from_renv <- function( pkg_os, function(x) { do.call( - pkg_system_requirements_mem, + pkg_sysreqs_mem, x - ) + ) |> + pluck("packages") |> + keep_at("system_packages") }, .e = ~ character(0) - ) + ) |> + unlist() - pkg_installs <- unique(pkg_sysreqs) + pkg_installs <- unique(pkg_sysreqs) |> + lapply( function(.x) {paste0(install_cmd, " ", .x)}) if (length(unlist(pkg_installs)) == 0) { cat_bullet( From 8d235a09f822174da3f2d1c6a00b5b694d08449c Mon Sep 17 00:00:00 2001 From: Vincent Guyader Date: Thu, 27 Jun 2024 22:02:45 +0000 Subject: [PATCH 2/4] update NEWS bump version --- DESCRIPTION | 5 +++-- NEWS.md | 1 + R/compact_sysreqs.R | 2 +- man/compact_sysreqs.Rd | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 1ca3eb3..9ba7bd6 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: dockerfiler Title: Easy Dockerfile Creation from R -Version: 0.2.2.9001 +Version: 0.2.2.9002 Authors@R: c( person("Colin", "Fay", , "contact@colinfay.me", role = c("cre", "aut"), comment = c(ORCID = "0000-0001-7343-1846")), @@ -38,7 +38,8 @@ Suggests: rmarkdown (>= 2.6), testthat (>= 3.0.0), withr -VignetteBuilder: knitr +VignetteBuilder: + knitr Config/fusen/version: 0.5.2 Config/testthat/edition: 3 Encoding: UTF-8 diff --git a/NEWS.md b/NEWS.md index e58862b..e35afa1 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,6 +1,7 @@ # 0.2.2.xxxx - remove sysreqs.r-hub.io to use {pak} instead for system requirement detection +- move from `pak::pkg_system_requirements` to `pak::pkg_sysreqs()` thanks to @B0ydT # dockerfile 0.2.2 diff --git a/R/compact_sysreqs.R b/R/compact_sysreqs.R index 41f374b..943f2db 100644 --- a/R/compact_sysreqs.R +++ b/R/compact_sysreqs.R @@ -1,6 +1,6 @@ #' Compact Sysreqs #' -#' @param pkg_installs pkg_sysreqs as vector, `pak::pkg_system_requirements` output +#' @param pkg_installs pkg_sysreqs as vector, `pak::pkg_sysreqs` output #' @param update_cmd command used to update packages, "apt-get update -y" by default #' @param install_cmd command used to install packages, "apt-get install -y" by default #' @param clean_cmd command used to clean package folder, "rm -rf /var/lib/apt/lists/*" by default diff --git a/man/compact_sysreqs.Rd b/man/compact_sysreqs.Rd index affe893..97fdbe0 100644 --- a/man/compact_sysreqs.Rd +++ b/man/compact_sysreqs.Rd @@ -12,7 +12,7 @@ compact_sysreqs( ) } \arguments{ -\item{pkg_installs}{pkg_sysreqs as vector, \code{pak::pkg_system_requirements} output} +\item{pkg_installs}{pkg_sysreqs as vector, \code{pak::pkg_sysreqs} output} \item{update_cmd}{command used to update packages, "apt-get update -y" by default} From 724a2790f244cd2dcad94928101db5eb59f62e02 Mon Sep 17 00:00:00 2001 From: Vincent Guyader Date: Sun, 30 Jun 2024 09:29:20 +0000 Subject: [PATCH 3/4] fix #11 --- DESCRIPTION | 5 ++--- R/dock_from_renv.R | 6 +++++- dev/config_attachment.yaml | 12 ++++++++++++ dev/config_fusen.yaml | 1 + dev/flat_dock_from_renv.Rmd | 6 +++++- man/dock_from_renv.Rd | 3 +++ vignettes/dockerfile-from-renv-lock.Rmd | 13 +++++-------- 7 files changed, 33 insertions(+), 13 deletions(-) create mode 100644 dev/config_attachment.yaml diff --git a/DESCRIPTION b/DESCRIPTION index 9ba7bd6..9e6c0c5 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -38,9 +38,8 @@ Suggests: rmarkdown (>= 2.6), testthat (>= 3.0.0), withr -VignetteBuilder: - knitr -Config/fusen/version: 0.5.2 +VignetteBuilder: knitr +Config/fusen/version: 0.6.0 Config/testthat/edition: 3 Encoding: UTF-8 LazyData: true diff --git a/R/dock_from_renv.R b/R/dock_from_renv.R index dd74421..e31190a 100644 --- a/R/dock_from_renv.R +++ b/R/dock_from_renv.R @@ -32,6 +32,7 @@ pkg_sysreqs_mem <- memoise::memoise( #' specifically `r dockerfiler::renv$initialize();toString(dockerfiler::renv$the$metadata$version)`, will be used. #' If you set it to `NULL`, the latest available version of renv will be used. #' @param use_pak boolean. If `TRUE` use pak to deal with dependencies during `renv::restore()`. FALSE by default +#' @param user Name of the user to specify in the Dockerfile with the USER instruction. Default is `NULL`, in which case the user from the FROM image is used. #' @importFrom utils getFromNamespace #' @return A R6 object of class `Dockerfile`. #' @details @@ -66,6 +67,7 @@ dock_from_renv <- function( expand = FALSE, extra_sysreqs = NULL, use_pak = FALSE, + user = NULL, renv_version ) { distro <- match.arg(distro, available_distros) @@ -83,7 +85,9 @@ dock_from_renv <- function( ), AS = AS ) - + if (!is.null(user)) { + dock$USER(user) + } # get renv version if (missing(renv_version)) { diff --git a/dev/config_attachment.yaml b/dev/config_attachment.yaml new file mode 100644 index 0000000..46e24ec --- /dev/null +++ b/dev/config_attachment.yaml @@ -0,0 +1,12 @@ +path.n: NAMESPACE +path.d: DESCRIPTION +dir.r: R +dir.v: vignettes +dir.t: tests +extra.suggests: ~ +pkg_ignore: ~ +document: yes +normalize: yes +inside_rmd: no +must.exist: yes +check_if_suggests_is_installed: yes diff --git a/dev/config_fusen.yaml b/dev/config_fusen.yaml index 49c242a..af07a3b 100644 --- a/dev/config_fusen.yaml +++ b/dev/config_fusen.yaml @@ -13,3 +13,4 @@ flat_dock_from_renv.Rmd: check: false document: false overwrite: 'yes' + clean: ask diff --git a/dev/flat_dock_from_renv.Rmd b/dev/flat_dock_from_renv.Rmd index b9673b6..efd2c33 100644 --- a/dev/flat_dock_from_renv.Rmd +++ b/dev/flat_dock_from_renv.Rmd @@ -75,6 +75,7 @@ pkg_sysreqs_mem <- memoise::memoise( #' specifically `r dockerfiler::renv$initialize();toString(dockerfiler::renv$the$metadata$version)`, will be used. #' If you set it to `NULL`, the latest available version of renv will be used. #' @param use_pak boolean. If `TRUE` use pak to deal with dependencies during `renv::restore()`. FALSE by default +#' @param user Name of the user to specify in the Dockerfile with the USER instruction. Default is `NULL`, in which case the user from the FROM image is used. #' @importFrom utils getFromNamespace #' @return A R6 object of class `Dockerfile`. #' @details @@ -104,6 +105,7 @@ dock_from_renv <- function( expand = FALSE, extra_sysreqs = NULL, use_pak = FALSE, + user = NULL, renv_version ) { distro <- match.arg(distro, available_distros) @@ -121,7 +123,9 @@ dock_from_renv <- function( ), AS = AS ) - + if (!is.null(user)) { + dock$USER(user) + } # get renv version if (missing(renv_version)) { diff --git a/man/dock_from_renv.Rd b/man/dock_from_renv.Rd index 5af0d40..d177359 100644 --- a/man/dock_from_renv.Rd +++ b/man/dock_from_renv.Rd @@ -14,6 +14,7 @@ dock_from_renv( expand = FALSE, extra_sysreqs = NULL, use_pak = FALSE, + user = NULL, renv_version ) } @@ -37,6 +38,8 @@ Will be installed with apt-get install.} \item{use_pak}{boolean. If \code{TRUE} use pak to deal with dependencies during \code{renv::restore()}. FALSE by default} +\item{user}{Name of the user to specify in the Dockerfile with the USER instruction. Default is \code{NULL}, in which case the user from the FROM image is used.} + \item{renv_version}{character. The renv version to use in the generated Dockerfile. By default, it is set to the version specified in the \code{renv.lock} file. If the \code{renv.lock} file does not specify a renv version, the version of renv bundled with dockerfiler, diff --git a/vignettes/dockerfile-from-renv-lock.Rmd b/vignettes/dockerfile-from-renv-lock.Rmd index 9eaa756..5063bfe 100644 --- a/vignettes/dockerfile-from-renv-lock.Rmd +++ b/vignettes/dockerfile-from-renv-lock.Rmd @@ -2,7 +2,7 @@ title: "Dockerfile from renv.lock" output: rmarkdown::html_vignette vignette: > - %\VignetteIndexEntry{dockerfile-from-renv-lock} + %\VignetteIndexEntry{Dockerfile from renv.lock} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- @@ -14,32 +14,28 @@ knitr::opts_chunk$set( ) ``` -```{r setup} +```{r} library(dockerfiler) ``` + + - # gen_base_image - - - # Create a Dockerfile from a renv.lock file - - ```{r example-dock_from_renv} #' \dontrun{ #' dock <- dock_from_renv("renv.lock", distro = "xenial") @@ -50,3 +46,4 @@ library(dockerfiler) + From 07697a6249038aadee0001b86209edbaf94a3742 Mon Sep 17 00:00:00 2001 From: Vincent Guyader Date: Sun, 30 Jun 2024 09:54:24 +0000 Subject: [PATCH 4/4] update news --- DESCRIPTION | 2 +- NEWS.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 9e6c0c5..b06e63b 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: dockerfiler Title: Easy Dockerfile Creation from R -Version: 0.2.2.9002 +Version: 0.2.2.9003 Authors@R: c( person("Colin", "Fay", , "contact@colinfay.me", role = c("cre", "aut"), comment = c(ORCID = "0000-0001-7343-1846")), diff --git a/NEWS.md b/NEWS.md index e35afa1..b521661 100644 --- a/NEWS.md +++ b/NEWS.md @@ -2,7 +2,7 @@ - remove sysreqs.r-hub.io to use {pak} instead for system requirement detection - move from `pak::pkg_system_requirements` to `pak::pkg_sysreqs()` thanks to @B0ydT - +- `dock_from_renv` allow to specify user to use in Dockerfile # dockerfile 0.2.2