Last week I hit a spot of bother trying to test against R-devel using Rhub. The issue is now fixed but it was blocking all builds against R-devel for a few days.
While that was being resolved I decided to try using VSCode’s docker integration to test against the Rocker R-devel container locally. This turned out to be quite easy! So here’s how you can test locally against any R version that has a tagged Rocker Docker container version!
Prerequisites
To pull this off you’ll need:
- a local installation of Docker
- VSCode extensions for R, see Getting Started or Kun Ren’s excellent blog post.
- VSCode extensions for remote development with docker, see top left, below:
Step 1: ‘Reopen in container’
Click the little stylised >< icon in the bottom left corner. It’s bright purple in my screenshots. It will open the remote development menu. Choose Remote Containers: Reopen in container:
Step 2: ‘Add Development Container Configuration Files’
From the next menu you will be offered some default containers for Linux distributions. If you choose Show all definitions…, You will be offered R (community) - choose it!
Step 3: Wait for container to download
This starts the process of reopening your project in the container. You will have to wait for the container to download. This took a few minutes for me.
Step 4: Set the container tag version
Your project should have opened in the rocker/r-ver:latest
container. If you open an R terminal you should be able to confirm that R is the latest release version. This is pretty sweet, but what we want is to be running against rocker/r-ver:devel
.
To configure this we have to alter some files VSCode has placed in your project directory. You will have a new folder called .devcontainer
under the project root:
.
├── .Rbuildignore
├── .devcontainer
│ ├── Dockerfile
│ ├── devcontainer.json
│ └── library-scripts
│ └── common-debian.sh
We need to make a small change to Dockerfile
and devcontainer.json
.
In Dockerfile
, change the line right at the start that has:
ARG VARIANT="latest"
to
ARG VARIANT
The hardcoding of “latest” stops us being able to set it in the devcontainer.json
.
Now in devcontainer.json
, change this bit of JSON that has:
{
"name": "R (Community)",
"build": {
"dockerfile": "Dockerfile",
// Update VARIANT to pick a specific R version: latest, ... ,4.0.1 , 4.0.0
"args": { "VARIANT": "latest" }
}
to
{
"name": "R (Community)",
"build": {
"dockerfile": "Dockerfile",
// Update VARIANT to pick a specific R version: latest, ... ,4.0.1 , 4.0.0
"args": { "VARIANT": "devel" }
}
Make sure both of those are saved.
Step 5: Rebuild container
Using the stylised >< icon in the bottom left corner access the remote development menu and choose: Remote Containers: Rebuild container
The container will now rebuild via much the same process as step 3.
Step 6: Confirm you’re in R-Devel
Now when the project opens you can open an R terminal and run version
to confirm you’re running against devel:
Done!
And that’s it. Now you can run devtools::test()
and check()
againt R-devel.
We could also go back to previous releases with this method by setting other tags in the devcontainer.json
see available tags on the r-ver
container here - they go back to around 3.2!
Using the remote development menu (><) we can flip back to our local R environment by choosing Remote Containers: Reopen Locally.
After the container versions have been downloaded the first time, flipping back and forth between local and container environments via >< takes just a couple of seconds!