|
1 | 1 | # At the top |
2 | | -ARG RENV_CACHE=/root/.local/share/renv |
| 2 | +ARG RENV_CACHE=/root/.cache/R/renv/ |
3 | 3 | ARG PIP_CACHE=/root/.cache/pip |
4 | 4 |
|
5 | 5 | # Base image |
6 | 6 | FROM rocker/verse:latest |
7 | 7 |
|
8 | 8 | # Set environment variables so renv/pip use them |
| 9 | +ENV R_CACHE_DIR=/root/.cache/R/ |
9 | 10 | ENV RENV_PATHS_CACHE=${RENV_CACHE} |
10 | 11 | ENV PIP_CACHE_DIR=${PIP_CACHE} |
11 | 12 |
|
@@ -52,23 +53,23 @@ ENV DEBIAN_FRONTEND=noninteractive |
52 | 53 | # RUN mkdir -p ${RENV_CACHE} ${PIP_CACHE} |
53 | 54 |
|
54 | 55 | # Install tinytex system-wide (for LaTeX support) |
55 | | -RUN Rscript -e "install.packages('tinytex'); tinytex::install_tinytex(force=T)" |
| 56 | +RUN --mount=type=cache,target=${R_CACHE_DIR} Rscript -e "install.packages('tinytex'); tinytex::install_tinytex(force=T)" |
56 | 57 |
|
57 | 58 | # Install minimal R packages for system-level support |
58 | | -RUN Rscript -e "install.packages(c('digest','devtools','renv','reticulate'))" |
| 59 | +RUN --mount=type=cache,target=${R_CACHE_DIR} Rscript -e "install.packages(c('digest','devtools','renv','reticulate','yaml'))" |
59 | 60 |
|
60 | 61 | # Copy renv.lock and renv directory for layer caching, install R dependencies via renv |
61 | 62 | COPY renv.lock /project/renv.lock |
62 | 63 | COPY renv /project/renv |
63 | | -RUN R -e "renv::restore(lockfile = '/project/renv.lock', prompt = FALSE)" |
| 64 | + |
| 65 | +# Restore R deps from renv.lock using persistent cache |
| 66 | +RUN --mount=type=cache,target=${R_CACHE_DIR} Rscript -e 'renv::restore(lockfile = '/project/renv.lock', prompt = FALSE)' |
64 | 67 |
|
65 | 68 | # Copy Python requirements file if exists (cached separately) |
66 | 69 | COPY setup/requirements.txt ${REQ_FILE} |
67 | | -RUN python3 -m venv /root/.virtualenvs/venv && \ |
| 70 | +RUN --mount=type=cache,target=${PIP_CACHE_DIR} python3 -m venv /root/.virtualenvs/venv && \ |
68 | 71 | "${VENV_PATH}/bin/pip" install --cache-dir "${PIP_CACHE_DIR}" -r "${REQ_FILE}" |
69 | 72 |
|
70 | | - |
71 | | - |
72 | 73 | # Copy the rest of the project |
73 | 74 | COPY . /project |
74 | 75 | WORKDIR /project |
|
0 commit comments