676b05055cdbcd29f654e097a55d3020a406c927
[rnaseq-cwl-training.git] / bin / dependencies.R
1 install_required_packages <- function(lib = NULL, repos = getOption("repos")) {
2
3   if (is.null(lib)) {
4     lib <- .libPaths()
5   }
6
7   message("lib paths: ", paste(lib, collapse = ", "))
8   missing_pkgs <- setdiff(
9     c("rprojroot", "desc", "remotes", "renv"),
10     rownames(installed.packages(lib.loc = lib))
11   )
12
13   install.packages(missing_pkgs, lib = lib, repos = repos)
14
15 }
16
17 find_root <- function() {
18
19   cfg  <- rprojroot::has_file_pattern("^_config.y*ml$")
20   root <- rprojroot::find_root(cfg)
21
22   root
23 }
24
25 identify_dependencies <- function() {
26
27   root <- find_root()
28
29   required_pkgs <- unique(c(
30     ## Packages for episodes
31     renv::dependencies(file.path(root, "_episodes_rmd"), progress = FALSE, error = "ignore")$Package,
32     ## Packages for tools
33     renv::dependencies(file.path(root, "bin"), progress = FALSE, error = "ignore")$Package
34   ))
35
36   required_pkgs
37 }
38
39 create_description <- function(required_pkgs) {
40   d <- desc::description$new("!new")
41   lapply(required_pkgs, function(x) d$set_dep(x))
42   d$write("DESCRIPTION")
43 }
44
45 install_dependencies <- function(required_pkgs, ...) {
46
47   create_description(required_pkgs)
48   on.exit(file.remove("DESCRIPTION"))
49   remotes::install_deps(dependencies = TRUE, ...)
50
51   if (require("knitr") && packageVersion("knitr") < '1.9.19') {
52     stop("knitr must be version 1.9.20 or higher")
53   }
54
55 }