Skip to content

Commit 4d6ec7f

Browse files
authored
Merge pull request #920 from rstudio/dev
Promote dev to main
2 parents 0b2ab15 + ec4ddb2 commit 4d6ec7f

File tree

17 files changed

+171
-68
lines changed

17 files changed

+171
-68
lines changed

Justfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ BUILDX_PATH := ""
99

1010
RSC_VERSION := "2025.04.0"
1111
RSPM_VERSION := "2025.04.0-4"
12-
RSW_VERSION := "2024.12.1+563.pro5"
12+
RSW_VERSION := "2025.05.0+496.pro5"
1313

1414
DRIVERS_VERSION := "2023.05.0"
1515
DRIVERS_VERSION_RHEL := DRIVERS_VERSION + "-1"

docker-bake.hcl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ variable PACKAGE_MANAGER_VERSION {
88
}
99

1010
variable WORKBENCH_VERSION {
11-
default = "2024.12.1+563.pro5"
11+
default = "2025.05.0+496.pro5"
1212
}
1313

1414
variable DRIVERS_VERSION {
@@ -456,7 +456,7 @@ target "workbench-session" {
456456
contexts = {
457457
product-base-pro = "target:product-base-pro-${builds.os}-r${replace(builds.r_primary, ".", "-")}_${replace(builds.r_alternate, ".", "-")}-py${replace(builds.py_primary, ".", "-")}_${replace(builds.py_alternate, ".", "-")}"
458458
}
459-
459+
460460
matrix = WORKBENCH_SESSION_MATRIX
461461
args = {
462462
R_VERSION = builds.r_primary

r-session-complete/.env

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
R_VERSION=4.1.0
1+
R_VERSION=4.4.0
22
PYTHON_VERSION=3.9.5
3-
RSW_VERSION=2024.12.1+563.pro5
3+
RSW_VERSION=2025.05.0+496.pro5
44
DRIVERS_VERSION=2024.03.0-1

r-session-complete/Dockerfile.ubuntu2204

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ ARG R_VERSION_ALT=4.3.3
66
ARG PYTHON_VERSION=3.9.17
77
ARG PYTHON_VERSION_ALT=3.8.17
88
ARG JUPYTERLAB_VERSION=3.6.5
9-
ARG RSW_VERSION=2024.12.1+563.pro5
9+
ARG RSW_VERSION=2025.05.0+496.pro5
1010
ARG RSW_NAME=rstudio-workbench
1111
ARG RSW_DOWNLOAD_URL=https://download2.rstudio.org/server/jammy/amd64
1212
ARG SCRIPTS_DIR=/opt/positscripts

r-session-complete/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@
77

88
# Supported tags and respective Dockerfile links
99

10-
* [`jammy`, `ubuntu2204`, `jammy-2024.12.1`, `ubuntu2204-2024.12.1`](https://github.com/rstudio/rstudio-docker-products/blob/main/r-session-complete/Dockerfile.ubuntu2204)
10+
* [`jammy`, `ubuntu2204`, `jammy-2025.05.0`, `ubuntu2204-2025.05.0`](https://github.com/rstudio/rstudio-docker-products/blob/main/r-session-complete/Dockerfile.ubuntu2204)
1111

1212
# What are the r-session-complete images?
1313

1414
Images for R and Python sessions and jobs to be used RStudio Workbench, Launcher, and Kubernetes.
1515

16-
# Notice for support
16+
# Notice for support
1717

1818
1. This image may introduce **BREAKING** changes; as such we recommend:
1919
- Avoid using the `{operating-system}` tags to avoid unexpected version changes, and
@@ -47,7 +47,7 @@ Launcher, refer to the RStudio support article on [Using Docker images with
4747
RStudio Workbench, Launcher, and
4848
Kubernetes](https://support.rstudio.com/hc/en-us/articles/360019253393-Using-Docker-images-with-RStudio-Server-Pro-Launcher-and-Kubernetes).
4949

50-
We provide simple ways to extend and build the Dockerfiles. After you have cloned the repo, you can create your own
50+
We provide simple ways to extend and build the Dockerfiles. After you have cloned the repo, you can create your own
5151
containers fairly simply with the provided Justfile.
5252

5353
## Overview

workbench-for-google-cloud-workstations/.env

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
RSW_VERSION=2024.12.1+563.pro5
1+
RSW_VERSION=2025.05.0+496.pro5
22
RSW_TAG_VERSION=2024.12.1-563.pro5
33
RSW_DOWNLOAD_URL=https://download2.rstudio.org/server/jammy/amd64
44
RSW_NAME=rstudio-workbench

workbench-for-google-cloud-workstations/Dockerfile.ubuntu2204

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ ARG PYTHON_VERSION_ALT=3.10.14
1010
ARG PYTHON_VERSION_JUPYTER=3.10.14
1111
ARG JUPYTERLAB_VERSION=3.6.7
1212
ARG DRIVERS_VERSION=2023.05.0
13-
ARG RSW_VERSION=2024.12.1+563.pro5
13+
ARG RSW_VERSION=2025.05.0+496.pro5
1414
ARG RSW_NAME=rstudio-workbench
1515
ARG RSW_DOWNLOAD_URL=https://download2.rstudio.org/server/jammy/amd64
1616
ARG SCRIPTS_DIR=/opt/positscripts

workbench-for-microsoft-azure-ml/.env

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
RSW_VERSION=2024.12.1+563.pro5
1+
RSW_VERSION=2025.05.0+496.pro5
22
RSW_DOWNLOAD_URL=https://download2.rstudio.org/server/bionic/amd64
33
RSW_NAME=rstudio-workbench
44
PYTHON_VERSION=3.9.14

workbench-for-microsoft-azure-ml/Dockerfile.ubuntu2204

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ ARG PYTHON_VERSION=3.9.17
77
ARG PYTHON_VERSION_ALT=3.8.17
88
ARG PYTHON_VERSION_JUPYTER=3.8.17
99
ARG JUPYTERLAB_VERSION=3.6.7
10-
ARG RSW_VERSION=2024.12.1+563.pro5
10+
ARG RSW_VERSION=2025.05.0+496.pro5
1111
ARG RSW_NAME=rstudio-workbench
1212
ARG RSW_DOWNLOAD_URL=https://download2.rstudio.org/server/jammy/amd64
1313
ARG SCRIPTS_DIR=/opt/positscripts
@@ -178,5 +178,5 @@ LABEL \
178178
azure.ii.endpoints='[{"label":"connect","target":8787,"protocol":"http"}]' \
179179
org.opencontainers.image.description='A professional integrated development environment for data science teams using R and Python' \
180180
org.opencontainers.image.title='RStudio Workbench' \
181-
org.opencontainers.image.version='2024.12.1+563.pro5' \
181+
org.opencontainers.image.version='2025.05.0+496.pro5' \
182182
org.opencontainers.image.url='https://www.rstudio.com/products/workbench/'

workbench-session-init/Dockerfile.ubuntu2204

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ RUN apt-get update && \
88
apt-get install -y --no-install-recommends ca-certificates curl && \
99
rm -rf /var/lib/apt/lists/*
1010

11-
ARG RSW_VERSION=2024.12.1+563.pro5
11+
ARG RSW_VERSION=2025.05.0+496.pro5
1212
ARG GO_VERSION=1.22.2
1313

1414
# Download the RStudio Workbench session components and install Go

workbench-session-init/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ This directory contains a Dockerfile and script that will create an init contain
1212

1313
## Supported tags and respective Dockerfile links
1414

15-
* [`jammy-daily`, `ubuntu2204-daily`, `jammy-2024.12.1`, `ubuntu2204-2024.12.1`](https://github.com/rstudio/rstudio-docker-products/blob/main/workbench-session-init/Dockerfile.2204)
15+
* [`jammy-daily`, `ubuntu2204-daily`, `jammy-2025.05.0`, `ubuntu2204-2025.05.0`](https://github.com/rstudio/rstudio-docker-products/blob/main/workbench-session-init/Dockerfile.2204)
1616

1717
## Building
1818

@@ -34,7 +34,7 @@ You can observe what gets copied by the container:
3434

3535
```console
3636
mkdir init
37-
docker run --rm -v $(pwd)/init:/mnt/init rstudio/workbench-session-init:jammy-2024.12.1
37+
docker run --rm -v $(pwd)/init:/mnt/init rstudio/workbench-session-init:jammy-2025.05.0
3838
# The init directory has been populated with the Workbench session runtime components.
3939
```
4040

workbench-session-init/entrypoint/main.go

Lines changed: 34 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -19,24 +19,19 @@ var (
1919
// Read the PWB_SESSION_TYPE environment variable
2020
sessionType = os.Getenv("PWB_SESSION_TYPE")
2121

22-
// Set the copy options.
23-
// Preserve permissions, times, and owner.
24-
opt = cp.Options{
25-
PermissionControl: cp.PerservePermission,
26-
PreserveTimes: true,
27-
PreserveOwner: true,
28-
NumOfWorkers: 20,
22+
// List of dependencies common to all environments
23+
commonDeps = []string{
24+
"bin/pwb-supervisor",
2925
}
3026

3127
// List of dependencies common to all session types
32-
commonDeps = []string{
28+
commonSessionDeps = append([]string{
3329
"bin/git-credential-pwb",
3430
"bin/focal",
3531
"bin/jammy",
3632
"bin/noble",
3733
"bin/opensuse15",
3834
"bin/postback",
39-
"bin/pwb-supervisor",
4035
"bin/quarto",
4136
"bin/r-ldpath",
4237
"bin/rhel8",
@@ -46,32 +41,47 @@ var (
4641
"resources",
4742
"www",
4843
"www-symbolmaps",
49-
}
44+
}, commonDeps...)
5045

5146
// Map of session-specific dependencies
5247
sessionDeps = map[string][]string{
53-
"jupyter": {
48+
"jupyter": append([]string{
5449
"bin/jupyter-session-run",
55-
"bin/node",
5650
"extras",
57-
},
58-
"positron": {
51+
}, commonSessionDeps...),
52+
"positron": append([]string{
5953
"bin/positron-server",
6054
"bin/positron-session-run",
6155
"extras",
62-
},
63-
"rstudio": {
64-
"bin/node",
56+
}, commonSessionDeps...),
57+
"rstudio": append([]string{
6558
"bin/rsession-run",
66-
},
67-
"vscode": {
59+
"bin/copilot-language-server",
60+
}, commonSessionDeps...),
61+
"vscode": append([]string{
6862
"bin/pwb-code-server",
6963
"bin/vscode-session-run",
7064
"extras",
71-
},
65+
}, commonSessionDeps...),
66+
"adhoc": commonDeps,
7267
}
7368
)
7469

70+
func createCopyOptions(sessionType string) cp.Options {
71+
// adhoc sessions init container does not run as root so it can't preserve the owner.
72+
var preserveOwner bool = true
73+
if sessionType == "adhoc" {
74+
preserveOwner = false
75+
}
76+
77+
return cp.Options{
78+
PermissionControl: cp.PerservePermission,
79+
PreserveTimes: true,
80+
PreserveOwner: preserveOwner,
81+
NumOfWorkers: 20,
82+
}
83+
}
84+
7585
func main() {
7686
if sessionType == "" {
7787
fmt.Println("PWB_SESSION_TYPE environment variable is not set")
@@ -96,7 +106,8 @@ func main() {
96106
os.Exit(1)
97107
}
98108

99-
err = copyFiles(sourceDir, targetDir, filesToCopy)
109+
opt := createCopyOptions(sessionType)
110+
err = copyFiles(sourceDir, targetDir, filesToCopy, opt)
100111
if err != nil {
101112
fmt.Println(err)
102113
os.Exit(1)
@@ -106,13 +117,11 @@ func main() {
106117

107118
// getFilesToCopy returns the list of files to copy based on the session type.
108119
func getFilesToCopy(sessionType string) ([]string, error) {
109-
files := commonDeps
110120
if deps, ok := sessionDeps[sessionType]; ok {
111-
files = append(files, deps...)
121+
return deps, nil
112122
} else {
113123
return nil, fmt.Errorf("unknown session type: %s", sessionType)
114124
}
115-
return files, nil
116125
}
117126

118127
// validateTargetDir checks if the target directory exists and is empty.
@@ -150,7 +159,7 @@ func isDirEmpty(dir string) (bool, error) {
150159
// copyFiles copies the files from the source directory to the target directory.
151160
// It uses the otiai10/copy package to copy files, with options to preserve
152161
// permissions, times, and owner.
153-
func copyFiles(src, dst string, filesToCopy []string) error {
162+
func copyFiles(src, dst string, filesToCopy []string, opt cp.Options) error {
154163
fmt.Printf("Copying files from %s to %s\n", src, dst)
155164
start := time.Now()
156165

workbench-session-init/entrypoint/main_test.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,27 @@ func TestGetFilesToCopy(t *testing.T) {
1616
}{
1717
{
1818
sessionType: "jupyter",
19-
expected: append(commonDeps, sessionDeps["jupyter"]...),
19+
expected: sessionDeps["jupyter"],
2020
expectError: false,
2121
},
2222
{
2323
sessionType: "positron",
24-
expected: append(commonDeps, sessionDeps["positron"]...),
24+
expected: sessionDeps["positron"],
2525
expectError: false,
2626
},
2727
{
2828
sessionType: "rstudio",
29-
expected: append(commonDeps, sessionDeps["rstudio"]...),
29+
expected: sessionDeps["rstudio"],
3030
expectError: false,
3131
},
3232
{
3333
sessionType: "vscode",
34-
expected: append(commonDeps, sessionDeps["vscode"]...),
34+
expected: sessionDeps["vscode"],
35+
expectError: false,
36+
},
37+
{
38+
sessionType: "adhoc",
39+
expected: commonDeps,
3540
expectError: false,
3641
},
3742
{

workbench-session-init/test/goss.yaml

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,92 @@ file:
1111
exists: true
1212
filetype: file
1313
mode: "0755"
14+
# Should encompass commonDeps and sessionDeps listed in main.go
15+
/opt/session-components/bin/git-credential-pwb:
16+
exists: true
17+
filetype: file
18+
mode: "0755"
19+
/opt/session-components/bin/jammy:
20+
exists: true
21+
filetype: directory
22+
mode: "0755"
23+
/opt/session-components/bin/noble:
24+
exists: true
25+
filetype: directory
26+
mode: "0755"
27+
/opt/session-components/bin/opensuse15:
28+
exists: true
29+
filetype: directory
30+
mode: "0755"
31+
/opt/session-components/bin/postback:
32+
exists: true
33+
filetype: directory
34+
mode: "0755"
35+
/opt/session-components/bin/pwb-supervisor:
36+
exists: true
37+
filetype: file
38+
mode: "0755"
39+
/opt/session-components/bin/quarto:
40+
exists: true
41+
filetype: directory
42+
mode: "0755"
43+
/opt/session-components/bin/r-ldpath:
44+
exists: true
45+
filetype: file
46+
mode: "0755"
47+
/opt/session-components/bin/rhel8:
48+
exists: true
49+
filetype: directory
50+
mode: "0755"
51+
/opt/session-components/bin/rhel9:
52+
exists: true
53+
filetype: directory
54+
mode: "0755"
55+
/opt/session-components/bin/shared-run:
56+
exists: true
57+
filetype: file
58+
mode: "0755"
59+
/opt/session-components/R:
60+
exists: true
61+
filetype: directory
62+
mode: "0755"
63+
/opt/session-components/resources:
64+
exists: true
65+
filetype: directory
66+
mode: "0755"
67+
/opt/session-components/www:
68+
exists: true
69+
filetype: directory
70+
mode: "0755"
71+
/opt/session-components/www-symbolmaps:
72+
exists: true
73+
filetype: directory
74+
mode: "0755"
75+
/opt/session-components/bin/jupyter-session-run:
76+
exists: true
77+
filetype: file
78+
mode: "0755"
79+
/opt/session-components/extras:
80+
exists: true
81+
filetype: directory
82+
mode: "0755"
83+
/opt/session-components/bin/positron-server:
84+
exists: true
85+
filetype: directory
86+
mode: "0755"
87+
/opt/session-components/bin/positron-session-run:
88+
exists: true
89+
filetype: file
90+
mode: "0755"
91+
/opt/session-components/bin/rsession-run:
92+
exists: true
93+
filetype: file
94+
mode: "0755"
95+
/opt/session-components/bin/pwb-code-server:
96+
exists: true
97+
filetype: directory
98+
mode: "0755"
99+
/opt/session-components/bin/vscode-session-run:
100+
exists: true
101+
filetype: file
102+
mode: "0755"

workbench/.env

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
RSW_VERSION=2024.12.1+563.pro5
2-
RSW_DOWNLOAD_URL=https://download2.rstudio.org/server/bionic/amd64
1+
RSW_VERSION=2025.05.0+496.pro5
2+
RSW_DOWNLOAD_URL=https://download2.rstudio.org/server/jammy/amd64
33
RSW_NAME=rstudio-workbench
44
PYTHON_VERSION=3.9.17
55
PYTHON_VERSION_ALT=3.8.17
66
PYTHON_VERSION_JUPYTER=3.8.17
77
R_VERSION_ALT=4.1.3
8-
R_VERSION=4.2.3
8+
R_VERSION=4.4.0

0 commit comments

Comments
 (0)