R/dockerise_project.R

Defines functions dockerise_project

dockerise_project <- function(project_folder,needed_packages=NULL,package_search=TRUE,build_folder=tempfolder(),image_name=NULL,build=TRUE){
  if(is.null(image_name)){
    image_name <- gsub(' ','_',return_last(strsplit(project_folder,'/')[[1]]))
  }

  if(!dir.exists(build_folder)){
    stop('Build folder must exist')
  }
  currentBuild <<- build_folder

  Rversion <- paste(R.Version()[c('major','minor')],collapse='.')

  if(package_search){
    Rfiles <- grep('*.R$',dir(project_folder,recursive = TRUE),value=TRUE)
    if(length(Rfiles)>0){
      paths <- sprintf('%s/%s',project_folder,Rfiles)
      found_packages <- unique(unlist(sapply(paths,find_used_packages)))
      needed_packages <- unique(c(needed_packages,found_packages))
    }
  }

  package_instructions <- create_package_instructions(neededPackages = needed_packages,prefer_install = TRUE,buildFolder = build_folder)

  folder_instructions <- copy_folder_instructions(project_folder,buildFolder = build_folder)

  base_instructions <- sprintf(
    paste(readLines(system.file("templates/basedockerfile",package='dockerise')),collapse='\n'),
    Rversion)

  all <- paste(  base_instructions,
                 package_instructions,
                 folder_instructions,
                 sep='\n\n'
  )

  writeLines(all,sprintf("%s/Dockerfile",build_folder))

  if(build){
    # initialwd <- getwd()
    # setwd(build_folder)
    # print(getwd())
    buildCommand <- sprintf("docker build -t \"%s\" \"%s\"",paste('dockerise/app',tolower(image_name),sep='/'),build_folder)
    print(buildCommand)
    system(buildCommand)
    # setwd(initialwd)
  }else{

  }
  return(list('folder'=build_folder,'respository'=paste('dockerise/project',tolower(image_name),sep='/')))

}
statisticiansix/dockerise documentation built on Nov. 5, 2019, 9:20 a.m.