I am part of a team maintaining internal Docker/Singularity images that include R packages as dependencies. We are not building off of the Bioconductor or R images, as we have other requirements to meet.
With the release of Bioconductor 3.16, one of the packages we explicitly rely on is no longer available:
package 'ensemblVEP' is not available for Bioconductor version '3.16'
Looking in the repository listings, it appears that ensemblVEP
lacks any source or binary packages in 3.16 at this time: https://bioconductor.org/packages/release/bioc/html/ensemblVEP.html
I understand that the package updating has more to do with the ensemblVEP
team than anything on Bioconductor's side. We don't really have the time available right now to wait for it to update. What I need to know is:
In a Dockerfile, what is the correct way to force Bioconductor to use version 3.15?
My current approach is roughly:
RUN R -e " \
options(Ncpus = $(nproc)); \
library(BiocManager); \
BiocManager::version(); \
BiocManager::install(update = TRUE, ask = FALSE, version = '3.15'); \
"
Which would then be followed by blocks to install the packages we require.
This seems like it should work based on documentation I've located, but I'm receiving errors after it seems to succeed in updating multiple packages:
Error in .install_github(todo, lib = lib, lib.loc = lib.loc, repos = repos, :
argument "update" is missing, with no default
Calls: <Anonymous> ... .install_updated_version -> .install -> .install_github
When I try to look into that error, I'm taken to the Bioconductor Github for install.R
: https://github.com/Bioconductor/BiocManager/blob/master/R/install.R
While I was able to parse some of this, I'm unsure what's actually failing here. As far as I can tell I've supplied everything I should be.
Is there some additional parameter I need to pass for this to process correctly non-interactively?
Is there a way to specify/force install version BiocManager 3.15 from the start? If I can avoid installing 3.16 only to immediately downgrade a lot of packages that will keep my build times down and bypass the error/issue I'm seeing with that process. When I tried install.packages('BiocManager', version = '3.15')
it fails and when I try install.packages('https://cran.r-project.org/src/contrib/Archive/BiocManager/BiocManager_1.30.17.tar.gz', repos=NULL, type='source')
it installs 3.16.
Thanks in advance and let me know if additional information is needed.
As soon as I posted this question, my container started to build successfully and deploy using 3.15 and install the package we need.
I'm still curious both for myself and any who run into something similar if there's a true correct way to do this.