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
43 lines
1.7 KiB
Text
43 lines
1.7 KiB
Text
FROM devxygmbh/r-alpine:4.4-3.20 AS build
|
|
|
|
# ARG GITHUB_PAT
|
|
RUN apk add --no-cache curl ca-certificates \
|
|
&& curl -fsSL https://raw.githubusercontent.com/nbafrank/uvr/main/install.sh \
|
|
| UVR_INSTALL_DIR=/usr/local/bin sh
|
|
|
|
# One uvr project drives both dependency installs below. UVR_LIBRARY points the
|
|
# syncs at the image's R library instead of the project-local .uvr/library/, so
|
|
# `Rscript app.R` finds the packages without a uvr-aware .Rprofile.
|
|
ENV UVR_LIBRARY=/usr/lib/R/library
|
|
RUN mkdir -p /uvr && cd /uvr && uvr init --here
|
|
|
|
COPY --link ./DESCRIPTION .
|
|
COPY --link ./R ./R
|
|
# COPY --link ./man .
|
|
COPY --link ./NAMESPACE .
|
|
COPY --link ./shiny/app.R /app/app.R
|
|
|
|
RUN ls -la
|
|
|
|
# install R package deps. uvr has no equivalent of bare `pak::pak()`, which
|
|
# reads the DESCRIPTION in the working directory, so extract the dependency
|
|
# names and hand them to `uvr add`.
|
|
RUN R -q --no-echo -e "d <- read.dcf('DESCRIPTION'); f <- intersect(colnames(d), c('Depends', 'Imports', 'LinkingTo')); p <- trimws(sub('[(].*', '', unlist(strsplit(paste(d[, f], collapse = ','), ',')))); writeLines(setdiff(p[nzchar(p)], c('R', rownames(installed.packages()))), '/tmp/deps.txt')" \
|
|
&& cd /uvr && xargs -r uvr add --no-install < /tmp/deps.txt \
|
|
&& uvr sync --install-system-deps
|
|
|
|
RUN R CMD INSTALL --no-docs --without-keep.source .
|
|
|
|
# install shiny app deps
|
|
RUN R -q -e "install.packages('renv'); pkgs <- renv::dependencies('/app/app.R')[['Package']]; pkgs = setdiff(pkgs, 'bincraft'); writeLines(pkgs, '/tmp/app-deps.txt')" \
|
|
&& cd /uvr && xargs -r uvr add --no-install < /tmp/app-deps.txt \
|
|
&& uvr sync --install-system-deps
|
|
|
|
ENV PGPASS=""
|
|
|
|
RUN echo "options(shiny.port=3838, shiny.host='0.0.0.0')" >> /root/.Rprofile
|
|
|
|
WORKDIR /app
|
|
EXPOSE 3838
|
|
|
|
CMD Rscript app.R
|