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