knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) is_ghactions <- identical(Sys.getenv("CI"), "true") && identical(Sys.getenv("GH_ACTIONS_KWB_R"), TRUE) local <- FALSE is_ghactions_and_all_pkgs_installed <- FALSE
For all Github repos also includes non R packages
pkgmeta::write_github_repos_json()
Now limit only "public" KWB-R repos which are R packages.
pkgs <- pkgmeta::get_github_packages()
# Define paths and resolve placeholders paths_list <- list( root_dir = tempdir(), pkglib = "<root_dir>/pkg-lib", pkgsource_dir = "<root_dir>/pkg-source", pkgnet_dir = "<root_dir>/pkgnet", pkgsource_zip_dir = "<pkgsource_dir>/zip", pkgsource_unzip_dir = "<pkgsource_dir>/unzip" ) paths <- kwb.utils::resolve(paths_list, root_dir = tempdir())
in own library required for "codemetar" and "pkgnet" reports
fs::dir_create(paths$pkglib, recursive = TRUE) withr::with_libpaths(new = paths$pkglib, code = { install.packages("remotes", repos = "https://cran.rstudio.org") }) for (pkg in pkgs$name) { withr::with_libpaths(new = paths$pkglib, code = { remotes::install_github( repo = sprintf("kwb-r/%s", pkg), dependencies = TRUE, upgrade = "always", auth_token = Sys.getenv("GITHUB_PAT") ) }) }
### On Travis already installed within .travis configuration ### https://github.com/KWB-R/pkgmeta/blob/master/.travis.yml ### with function pkgmeta::travis_pkg_install_script()
required for pkgnet "covr":
fs::dir_create( path = c(paths$pkgsource_zip_dir, paths$pkgsource_unzip_dir), recurse = TRUE ) for (pkg in pkgs$name) { try(pkgmeta::download_github( repo = sprintf("kwb-r/%s", pkg), dest_dir = paths$pkgsource_zip_dir, use_zip = TRUE, auth_token = Sys.getenv("GITHUB_PAT")) ) } zipfiles <- list.files(paths$pkgsource_zip_dir,full.names = TRUE) invisible(lapply(zipfiles, function(x) { message(sprintf("Unzipping %s to %s", x, paths$pkgsource_unzip_dir)) unzip(x, exdir = paths$pkgsource_unzip_dir) }))
Generating "codemetar.json" file
pkgs <- pkgmeta::get_github_packages() codemeta <- pkgmeta::create_pkg_codemeta(pkgs, libpath = paths$pkglib) pkgmeta::write_pkg_codemeta_json(codemeta)
all_pkgs_installed <- all(pkgs$name %in% installed.packages()[, "Package"]) is_ghactions_and_all_pkgs_installed <- is_ghactions && all_pkgs_installed
pkgs_codemetar <- pkgmeta::get_github_packages() codemeta <- pkgmeta::create_pkg_codemeta( pkgs, libpath = Sys.getenv("R_LIBS_USER") ) pkgmeta::write_pkg_codemeta_json(codemeta)
Create Reports with "pkgnet
fs::dir_create(paths$pkgnet_dir, recurse = TRUE) withr::with_libpaths(new = c(paths$pkglib, .libPaths()), code = for(pkg in pkgs$name) { print(sprintf("Write report for R package: %s", pkg )) pkg_src_unzipped <- dir(paths$pkgsource_unzip_dir, pattern = sprintf(".*%s-.*", pkg)) if (length(pkg_src_unzipped) > 1) { stop(sprintf( "Multiple unzipped pkg sources found in %s: %s.\n%s", paths$pkgsource_unzip_dir, paste(pkg_src_unzipped, collapse = ', '), "Please delete the oldest one(s) manually" )) #pkg_path <- file.path(paths$pkgsource_unzip_dir, pkg_src_unzipped), #sapply(pkg_path, function(x) {max(fs::dir_info(pkg_path[x])$modification_time)}) } if (length(pkg_src_unzipped) == 0L) { stop(sprintf( "No unzipped pkg sources found in %s", paths$pkgsource_unzip_dir )) } try(pkgnet::CreatePackageReport( pkg_name = pkg , pkg_path = file.path(paths$pkgsource_unzip_dir, pkg_src_unzipped), report_path = file.path(paths$pkgnet_dir, paste0(pkg, ".html")) )) })
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.