bincraft dropped pak in favour of uvr, so the pipelines, helper scripts and images in this repo move with it. - add local/uvr-install.sh as the single replacement for pak::pak(); it bootstraps a pinned uvr, mints a throwaway project under TMPDIR and runs `uvr add --no-install` + `uvr sync --library`, because `uvr add` refuses to run outside a project and only `sync` honours --library - install bincraft via its Forgejo spec (forgejo::codefloe.com/rpkgs/ bincraft@<tag>) instead of a git:: URL, keeping the git ls-remote tag resolution - pass UVR_R_BIN/UVR_TARGET_LIB from install-bincraft.R so the per-R-minor passes target their own R and library - replace R_PKG_CACHE_DIR with UVR_CACHE_DIR/UVR_PACKAGES_DIR on the persistent volume, preserving the amd64-off/arm64-on split - drop trim_pkgcache_metadata() and its test; uvr's cache does not grow the way pkgcache's _metadata dir did - let uvr install system requirements from its vendored r-system-requirements rules, replacing pak::sysreqs_db_update() - migrate the shiny app image, the alpine reprex and the CRAN loading test; ship uvr-install.sh in the build-one image - track the uvr pin with renovate
45 lines
1.8 KiB
Shell
45 lines
1.8 KiB
Shell
docker run --rm -it --platform linux/arm64 alpine sh
|
|
|
|
apk add --no-cache R R-dev g++ curl ca-certificates
|
|
|
|
curl -fsSL https://raw.githubusercontent.com/nbafrank/uvr/main/install.sh | UVR_INSTALL_DIR=/usr/local/bin sh
|
|
|
|
# `uvr add` always writes to .uvr/library/; only `uvr sync` honours UVR_LIBRARY,
|
|
# so add without installing and let the sync place the packages.
|
|
export UVR_LIBRARY=/usr/lib/R/library
|
|
mkdir -p /uvr && cd /uvr && uvr init --here
|
|
uvr add --no-install gert purrr && uvr sync --install-system-deps
|
|
|
|
R
|
|
|
|
package_name <- "DoE.base"
|
|
gert::git_clone(sprintf("https://github.com/cran/%s", package_name),
|
|
path = sprintf("%s/%s", tempdir(), "tmp1"),
|
|
verbose = FALSE
|
|
)
|
|
# Retrieve all tags
|
|
all_tags <- gert::git_tag_list(repo = sprintf("%s/%s", tempdir(), "tmp1"))
|
|
# filter out tags that start with R- (= non-valid ones)
|
|
all_tags <- all_tags[!grepl("R-", all_tags$name), ]
|
|
|
|
unlink(sprintf("%s/%s", tempdir(), "tmp1"), force = TRUE, recursive = TRUE)
|
|
tag <- all_tags$name
|
|
package_name <- rep(package_name, length(tag))
|
|
|
|
# uvr has no `pak::local_install_deps()`; read the DESCRIPTION of the checkout
|
|
# and `uvr add` the dependency names instead.
|
|
purrr::walk2(package_name[1], tag, \(x, y) {
|
|
print(y)
|
|
system("git config --global advice.detachedHead false")
|
|
src <- sprintf("/tmp/%s_%s", x[1], y)
|
|
system2("git", args = c(
|
|
"clone", "-q", sprintf("--branch=%s", tail(y, 1)),
|
|
sprintf("https://github.com/cran/%s", x[1]), src
|
|
))
|
|
d <- read.dcf(file.path(src, "DESCRIPTION"))
|
|
f <- intersect(colnames(d), c("Depends", "Imports", "LinkingTo"))
|
|
deps <- trimws(sub("[(].*", "", unlist(strsplit(paste(d[, f], collapse = ","), ","))))
|
|
deps <- setdiff(deps[nzchar(deps)], "R")
|
|
system2("uvr", c("add", "--no-install", deps))
|
|
system2("uvr", c("sync", "--install-system-deps"))
|
|
})
|