¿Por qué CircleCI no construye correctamente cuando renv es parte de un paquete de R?
Estoy tratando de configurar una Integración Continua (CI) para un paquete R. En este sentido, estoy considerando circleCI, que ha funcionado bien en proyectos R anteriores. Sin embargo, esta vez, obtengo el siguiente error:
Descargando renv 0.14.0 ... OK (fuente descargada)
Instalando renv 0.14.0 ... ¡Hecho!
renv 0.14.0 instalado y cargado correctamente.
Proyecto '~/main' cargado. [renv 0.14.0]
devtools::install_deps(dependencies = TRUE)
Error in loadNamespace(x) : no se encontró el paquete ‘devtools’
Llamadas: loadNamespace -> withRestarts -> withOneRestart -> doWithOneRestart
Ejecución interrumpida
Mi .circleci/config.yml se ve similar a este:
version: 2
jobs:
build:
docker:
- image: my_random_image
steps:
- checkout
- run:
name: Install package dependencies
command: R -e "devtools::install_deps(dep = TRUE)"
- run:
name: Build package
command: R CMD build .
- run:
name: Check package
command: R CMD check *tar.gz
y mi imagen aleatoria se ve así:
FROM r-base:4.1.2
RUN apt-get update \
&& apt-get install git libssl-dev ssh texlive-latex-base texlive-fonts-recommended
libcurl4-openssl-dev libxml2-dev -y \
&& rm -rf /var/lib/apt/lists/*
RUN R -e "install.packages(c('devtools', 'roxygen2'), repos='http://cran.us.r- project.org')"
Por lo tanto, es algo estándar, según lo que puedo ver. El error solo ocurre si renv
forma parte de mi paquete R. De lo contrario, CircleCI no se queja y se ejecuta como se espera sin errores. Me gustaría mantener renv
en mi proyecto R y, por lo tanto, luchar para entender el problema y la solución para eso. ¡¡aprecio cualquier ayuda!!
davy.ai
El mensaje de error sugiere que falta el paquete ‘devtools’. Esto se puede solucionar instalando el paquete ‘devtools’ antes de ejecutar ‘devtools::install_deps’.
Como alternativa, puede agregar la instalación de ‘devtools’ al Dockerfile de la siguiente manera:
Luego, actualice el archivo config.yml de la siguiente manera:
Esto asume que ya ha creado el archivo ‘renv.lock’ en su proyecto.
Con suerte, esto ayuda a resolver el problema.