Skip to content

Commit 3521f17

Browse files
committed
Use posit-dev images for Workbench chart
Migrate rstudio-workbench Helm chart from legacy rstudio/ Docker Hub images to new ghcr.io/posit-dev/ container images. - workbench replaces rstudio/rstudio-workbench - workbench-session replaces rstudio/r-session-complete - Tag format changes from {os}{version} to {version}-{os} - Session tag format: R{rVersion}-python{pythonVersion}-{os} - image.tagPrefix replaced by image.os - session.image.tagPrefix replaced by os, rVersion, pythonVersion - Add session.defaultInitContainer for workbench-session-init - Add configmap unit tests for session-init container - Bump chart version to 0.20.0
1 parent 8120a7a commit 3521f17

File tree

7 files changed

+129
-22
lines changed

7 files changed

+129
-22
lines changed

charts/rstudio-workbench/Chart.yaml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: rstudio-workbench
22
description: Official Helm chart for Posit Workbench
3-
version: 0.10.13
3+
version: 0.20.0
44
apiVersion: v2
55
appVersion: 2026.01.2
66
icon:
@@ -18,10 +18,10 @@ dependencies:
1818
repository: https://helm.rstudio.com
1919
annotations:
2020
artifacthub.io/images: |
21-
- name: rstudio-workbench
22-
image: rstudio/rstudio-workbench:ubuntu2204-2026.01.2
23-
- name: r-session-complete
24-
image: rstudio/r-session-complete:ubuntu2204-2026.01.2
21+
- name: workbench
22+
image: posit/workbench:2026.01.2-ubuntu-24.04
23+
- name: workbench-session
24+
image: posit/workbench-session:R4.5.2-python3.14.3-ubuntu-24.04
2525
artifacthub.io/license: MIT
2626
artifacthub.io/links: |
2727
- name: Docker Images

charts/rstudio-workbench/NEWS.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
# Changelog
22

3+
## 0.20.0
4+
5+
- BREAKING: Default images now use `posit/workbench` instead of `rstudio/rstudio-workbench`
6+
- BREAKING: Session images now use `posit/workbench-session` instead of `rstudio/r-session-complete`
7+
- BREAKING: Image tag format changed from `{os}{version}` to `{version}-{os}`; session tag format changed to `R{rVersion}-python{pythonVersion}-{os}`
8+
- BREAKING: `image.tagPrefix` replaced by `image.os`; `session.image.tagPrefix` replaced by `session.image.os`, `session.image.rVersion`, and `session.image.pythonVersion`
9+
- Add `session.defaultInitContainer` for Workbench Session Init image (`posit/workbench-session-init`)
10+
311

412
## 0.10.13
513

charts/rstudio-workbench/README.md

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Posit Workbench
22

3-
![Version: 0.10.13](https://img.shields.io/badge/Version-0.10.13-informational?style=flat-square) ![AppVersion: 2026.01.2](https://img.shields.io/badge/AppVersion-2026.01.2-informational?style=flat-square)
3+
![Version: 0.20.0](https://img.shields.io/badge/Version-0.20.0-informational?style=flat-square) ![AppVersion: 2026.01.2](https://img.shields.io/badge/AppVersion-2026.01.2-informational?style=flat-square)
44

55
#### _Official Helm chart for Posit Workbench_
66

@@ -24,11 +24,11 @@ To ensure a stable production deployment:
2424

2525
## Installing the chart
2626

27-
To install the chart with the release name `my-release` at version 0.10.13:
27+
To install the chart with the release name `my-release` at version 0.20.0:
2828

2929
```{.bash}
3030
helm repo add rstudio https://helm.rstudio.com
31-
helm upgrade --install my-release rstudio/rstudio-workbench --version=0.10.13
31+
helm upgrade --install my-release rstudio/rstudio-workbench --version=0.20.0
3232
```
3333

3434
To explore other chart versions, look at:
@@ -615,9 +615,9 @@ Use of [Sealed secrets](https://github.com/bitnami-labs/sealed-secrets) disables
615615
| homeStorage.volumeName | string | `""` | the volumeName passed along to the persistentVolumeClaim. Optional |
616616
| image.imagePullPolicy | string | `"IfNotPresent"` | the imagePullPolicy for the main pod image |
617617
| image.imagePullSecrets | list | `[]` | an array of kubernetes secrets for pulling the main pod image from private registries |
618-
| image.repository | string | `"rstudio/rstudio-workbench"` | the repository to use for the main pod image |
618+
| image.os | string | `"ubuntu-24.04"` | The OS version for the image tag (e.g. ubuntu-24.04, ubuntu-22.04). Only used if tag is not defined |
619+
| image.repository | string | `"posit/workbench"` | the repository to use for the main pod image |
619620
| image.tag | string | `""` | Overrides the image tag whose default is the chart appVersion. |
620-
| image.tagPrefix | string | `"ubuntu2204-"` | A tag prefix for the server image (common selection: ubuntu2204-). Only used if tag is not defined |
621621
| ingress.annotations | object | `{}` | |
622622
| ingress.enabled | bool | `false` | |
623623
| ingress.hosts | string | `nil` | |
@@ -698,10 +698,20 @@ Use of [Sealed secrets](https://github.com/bitnami-labs/sealed-secrets) disables
698698
| serviceMonitor.namespace | string | `""` | Namespace to create the ServiceMonitor in (usually the same as the one in which the Prometheus Operator is running). Defaults to the release namespace |
699699
| session.defaultConfigMount | bool | `true` | Whether to automatically mount the config.session configuration into session pods. If launcher.namespace is different from Release Namespace, then the chart will duplicate the session configmap in both namespaces to facilitate this |
700700
| session.defaultHomeMount | bool | `true` | Whether to automatically add the homeStorage PVC to the session (i.e. via the `launcher-mounts` file) |
701+
| session.defaultInitContainer | object | `{"enabled":true,"imagePullPolicy":"","os":"ubuntu-24.04","repository":"posit/workbench-session-init","resources":{},"securityContext":{},"tag":""}` | Image definition for the default Workbench Session InitContainer |
702+
| session.defaultInitContainer.enabled | bool | `true` | Whether to enable the defaultInitContainer. Copies session runtime components into a shared volume for the session container. |
703+
| session.defaultInitContainer.imagePullPolicy | string | `""` | The imagePullPolicy for the default initContainer |
704+
| session.defaultInitContainer.os | string | `"ubuntu-24.04"` | The OS version for the image tag (e.g. ubuntu-24.04, ubuntu-22.04). Only used if tag is not defined |
705+
| session.defaultInitContainer.repository | string | `"posit/workbench-session-init"` | The repository to use for the Session InitContainer image |
706+
| session.defaultInitContainer.resources | object | `{}` | Optional resources for the default initContainer |
707+
| session.defaultInitContainer.securityContext | object | `{}` | The securityContext for the default initContainer |
708+
| session.defaultInitContainer.tag | string | `""` | Overrides the image tag whose default is the chart appVersion. |
701709
| session.defaultSecretMountPath | string | `"/mnt/session-secret/"` | The path to mount the sessionSecret (from `config.sessionSecret`) onto the server and session pods |
702-
| session.image.repository | string | `"rstudio/r-session-complete"` | The repository to use for the session image |
703-
| session.image.tag | string | `""` | A tag override for the session image. Overrides the "tagPrefix" above, if set. Default tag is `{{ tagPrefix }}{{ version }}` |
704-
| session.image.tagPrefix | string | `"ubuntu2204-"` | A tag prefix for session images (common selections: ubuntu2204-, centos7-). Only used if tag is not defined |
710+
| session.image.os | string | `"ubuntu-24.04"` | The OS version for the session image tag (e.g. ubuntu-24.04, ubuntu-22.04). Only used if tag is not defined |
711+
| session.image.pythonVersion | string | `"3.14.3"` | The Python version for the session image tag. Only used if tag is not defined |
712+
| session.image.rVersion | string | `"4.5.2"` | The R version for the session image tag. Only used if tag is not defined |
713+
| session.image.repository | string | `"posit/workbench-session"` | The repository to use for the session image |
714+
| session.image.tag | string | `""` | A tag override for the session image. Overrides rVersion, pythonVersion, and os. Default tag is `R{{ rVersion }}-python{{ pythonVersion }}-{{ os }}` |
705715
| shareProcessNamespace | bool | `false` | whether to provide `shareProcessNamespace` to the pod. |
706716
| sharedStorage.accessModes | list | `["ReadWriteMany"]` | accessModes defined for the storage PVC (represented as YAML) |
707717
| sharedStorage.annotations | object | `{"helm.sh/resource-policy":"keep"}` | Define the annotations for the Persistent Volume Claim resource |

charts/rstudio-workbench/templates/_helpers.tpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ If release name contains chart name it will be used as a full name.
2929
containers:
3030
- name: rstudio
3131
{{- $defaultVersion := .Values.versionOverride | default $.Chart.AppVersion }}
32-
{{- $imageTag := .Values.image.tag | default (printf "%s%s" .Values.image.tagPrefix $defaultVersion )}}
32+
{{- $imageTag := .Values.image.tag | default (printf "%s-%s" $defaultVersion .Values.image.os )}}
3333
image: "{{ .Values.image.repository }}:{{ $imageTag }}"
3434
{{- with .Values.pod.lifecycle }}
3535
lifecycle:

charts/rstudio-workbench/templates/configmap-general.yaml

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{{- /* Define the default values that will be merged over */}}
22
{{- $defaultVersion := .Values.versionOverride | default $.Chart.AppVersion }}
3-
{{- $sessionTag := .Values.session.image.tag | default (printf "%s%s" .Values.session.image.tagPrefix $defaultVersion ) }}
3+
{{- $sessionTag := .Values.session.image.tag | default (printf "R%s-python%s-%s" .Values.session.image.rVersion .Values.session.image.pythonVersion .Values.session.image.os ) }}
44
{{- $defaultImages := list (printf "%s:%s" .Values.session.image.repository $sessionTag) }}
55
{{- $defaultOverrides := list }}
66
{{- $sessionTemplate := deepCopy .Values.launcher.templateValues }}
@@ -39,6 +39,29 @@
3939
{{- end }}
4040
{{- end }}
4141
{{- end }}
42+
{{- if .Values.session.defaultInitContainer.enabled }}
43+
{{- /* session-init container: copies session runtime components into a shared volume */ -}}
44+
{{- $initTag := .Values.session.defaultInitContainer.tag | default (printf "%s-%s" $defaultVersion .Values.session.defaultInitContainer.os) }}
45+
{{- $initImage := printf "%s:%s" .Values.session.defaultInitContainer.repository $initTag }}
46+
{{- $initPullPolicy := default "IfNotPresent" .Values.session.defaultInitContainer.imagePullPolicy }}
47+
{{- $sessionComponentsVolume := dict "name" "session-components" "emptyDir" (dict) }}
48+
{{- $sessionComponentsMount := dict "name" "session-components" "mountPath" "/opt/session-components" }}
49+
{{- $initContainerJson := dict "name" "workbench-session-init" "image" $initImage "imagePullPolicy" $initPullPolicy "resources" .Values.session.defaultInitContainer.resources "securityContext" .Values.session.defaultInitContainer.securityContext "volumeMounts" (list $sessionComponentsMount) }}
50+
{{- /* for non-template path (job-json-overrides) */ -}}
51+
{{- $initOverride := dict "name" "defaultSessionInitContainer" "target" "/spec/template/spec/initContainers/0" "json" $initContainerJson }}
52+
{{- $volumeOverride := dict "name" "defaultSessionComponentsVolume" "target" "/spec/template/spec/volumes/-" "json" $sessionComponentsVolume }}
53+
{{- $mountOverride := dict "name" "defaultSessionComponentsMount" "target" "/spec/template/spec/containers/0/volumeMounts/-" "json" $sessionComponentsMount }}
54+
{{- $defaultOverrides = concat $defaultOverrides (list $initOverride $volumeOverride $mountOverride) }}
55+
{{- /* for template path */ -}}
56+
{{- if .Values.launcher.useTemplates }}
57+
{{- $initList := append $sessionTemplate.pod.initContainers $initContainerJson }}
58+
{{- $_ := set $sessionTemplate.pod "initContainers" $initList }}
59+
{{- $volumeList3 := append $sessionTemplate.pod.volumes $sessionComponentsVolume }}
60+
{{- $_ := set $sessionTemplate.pod "volumes" $volumeList3 }}
61+
{{- $mountList3 := append $sessionTemplate.pod.volumeMounts $sessionComponentsMount }}
62+
{{- $_ := set $sessionTemplate.pod "volumeMounts" $mountList3 }}
63+
{{- end }}
64+
{{- end }}
4265
{{- if .Values.launcher.useTemplates }}
4366
{{- /* this sets defaultOverrides to be empty if we are using templating */ -}}
4467
{{- $defaultOverrides = list }}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
suite: Workbench ConfigMap
2+
templates:
3+
- configmap-general.yaml
4+
- configmap-prestart.yaml
5+
- configmap-secret.yaml
6+
- configmap-session.yaml
7+
tests:
8+
- it: should include session-init container in template data by default
9+
template: configmap-general.yaml
10+
documentIndex: 1
11+
asserts:
12+
- matchRegex:
13+
path: data["rstudio-library-templates-data.tpl"]
14+
pattern: "workbench-session-init"
15+
- matchRegex:
16+
path: data["rstudio-library-templates-data.tpl"]
17+
pattern: "posit/workbench-session-init:2026.01.2-ubuntu-24.04"
18+
- matchRegex:
19+
path: data["rstudio-library-templates-data.tpl"]
20+
pattern: "session-components"
21+
22+
- it: should use custom session-init image when tag is overridden
23+
template: configmap-general.yaml
24+
documentIndex: 1
25+
set:
26+
session:
27+
defaultInitContainer:
28+
enabled: true
29+
repository: "custom-repo/session-init"
30+
tag: "custom-tag"
31+
asserts:
32+
- matchRegex:
33+
path: data["rstudio-library-templates-data.tpl"]
34+
pattern: "custom-repo/session-init:custom-tag"
35+
36+
- it: should not include session-init container when disabled
37+
template: configmap-general.yaml
38+
documentIndex: 1
39+
set:
40+
session:
41+
defaultInitContainer:
42+
enabled: false
43+
asserts:
44+
- notMatchRegex:
45+
path: data["rstudio-library-templates-data.tpl"]
46+
pattern: "workbench-session-init"

charts/rstudio-workbench/values.yaml

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,32 @@ session:
2121
# -- The path to mount the sessionSecret (from `config.sessionSecret`) onto the server and session pods
2222
defaultSecretMountPath: /mnt/session-secret/
2323
image:
24-
# -- A tag prefix for session images (common selections: ubuntu2204-, centos7-). Only used if tag is not defined
25-
tagPrefix: ubuntu2204-
24+
# -- The OS version for the session image tag (e.g. ubuntu-24.04, ubuntu-22.04). Only used if tag is not defined
25+
os: "ubuntu-24.04"
26+
# -- The R version for the session image tag. Only used if tag is not defined
27+
rVersion: "4.5.2"
28+
# -- The Python version for the session image tag. Only used if tag is not defined
29+
pythonVersion: "3.14.3"
2630
# -- The repository to use for the session image
27-
repository: "rstudio/r-session-complete"
28-
# -- A tag override for the session image. Overrides the "tagPrefix" above, if set. Default tag is `{{ tagPrefix }}{{ version }}`
31+
repository: "posit/workbench-session"
32+
# -- A tag override for the session image. Overrides rVersion, pythonVersion, and os. Default tag is `R{{ rVersion }}-python{{ pythonVersion }}-{{ os }}`
2933
tag: ""
34+
# -- Image definition for the default Workbench Session InitContainer
35+
defaultInitContainer:
36+
# -- Whether to enable the defaultInitContainer. Copies session runtime components into a shared volume for the session container.
37+
enabled: true
38+
# -- The repository to use for the Session InitContainer image
39+
repository: "posit/workbench-session-init"
40+
# -- The OS version for the image tag (e.g. ubuntu-24.04, ubuntu-22.04). Only used if tag is not defined
41+
os: "ubuntu-24.04"
42+
# -- Overrides the image tag whose default is the chart appVersion.
43+
tag: ""
44+
# -- The imagePullPolicy for the default initContainer
45+
imagePullPolicy: ""
46+
# -- Optional resources for the default initContainer
47+
resources: {}
48+
# -- The securityContext for the default initContainer
49+
securityContext: {}
3050

3151
sharedStorage:
3252
# -- whether to create the persistentVolumeClaim for shared storage
@@ -193,9 +213,9 @@ homeStorage:
193213

194214
image:
195215
# -- the repository to use for the main pod image
196-
repository: rstudio/rstudio-workbench
197-
# -- A tag prefix for the server image (common selection: ubuntu2204-). Only used if tag is not defined
198-
tagPrefix: ubuntu2204-
216+
repository: posit/workbench
217+
# -- The OS version for the image tag (e.g. ubuntu-24.04, ubuntu-22.04). Only used if tag is not defined
218+
os: "ubuntu-24.04"
199219
# -- Overrides the image tag whose default is the chart appVersion.
200220
tag: ""
201221
# -- the imagePullPolicy for the main pod image

0 commit comments

Comments
 (0)