Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ charts/<chart-name>/
### Documentation Generation
- READMEs are auto-generated using helm-docs from `README.md.gotmpl` templates
- Never edit `README.md` directly - edit the `.gotmpl` template
- CI auto-generates and commits docs back to PRs
- Run `just docs` locally before committing — CI will reject uncommitted changes

## Critical Workflow Requirements

Expand Down
2 changes: 1 addition & 1 deletion charts/rstudio-workbench/Chart.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: rstudio-workbench
description: Official Helm chart for Posit Workbench
version: 0.10.13
version: 0.11.0
apiVersion: v2
appVersion: 2026.01.2
icon:
Expand Down
11 changes: 10 additions & 1 deletion charts/rstudio-workbench/NEWS.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,20 @@
# Changelog


## 0.11.0

- **BREAKING**: Change default session image from `rstudio/r-session-complete` to `rstudio/workbench-session` and enable session component delivery via init containers by default.
Set `components.enabled: false` and `session.image.repository: rstudio/r-session-complete` to restore the previous behavior
- Add top-level `components` key for configuring session component init containers
- Add `components.positron` for updating the Positron IDE version independently
of a Workbench release. A default Positron version is already delivered by the
`workbench-session-init` container. Set `components.positron.version` to
override it with a specific version

## 0.10.13

- Bump Workbench version to 2026.01.2


## 0.10.12

- Fix invalid JSON in default `positron-user-settings.json`
Expand Down
46 changes: 41 additions & 5 deletions charts/rstudio-workbench/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Posit Workbench

![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)
![Version: 0.11.0](https://img.shields.io/badge/Version-0.11.0-informational?style=flat-square) ![AppVersion: 2026.01.2](https://img.shields.io/badge/AppVersion-2026.01.2-informational?style=flat-square)

#### _Official Helm chart for Posit Workbench_

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

## Installing the chart

To install the chart with the release name `my-release` at version 0.10.13:
To install the chart with the release name `my-release` at version 0.11.0:

```{.bash}
helm repo add rstudio https://helm.rstudio.com
helm upgrade --install my-release rstudio/rstudio-workbench --version=0.10.13
helm upgrade --install my-release rstudio/rstudio-workbench --version=0.11.0
```

To explore other chart versions, look at:
Expand Down Expand Up @@ -172,6 +172,35 @@ Alternatively, database passwords may be set during `helm install` with the foll

`--set config.secret.'database\.conf'.password="<YOUR_PASSWORD_HERE>"`

## Session images

By default, session pods use the `rstudio/workbench-session` image with an init container
(`rstudio/workbench-session-init`) that delivers Workbench session components at pod startup.

To use the classic all-in-one `r-session-complete` image instead (which bundles all components
into a single image), disable session components and change the session image:

```yaml
session:
image:
repository: "rstudio/r-session-complete"
components:
enabled: false
```

### Positron

To enable Positron IDE support, set a Positron version under `components.positron`:

```yaml
components:
positron:
version: "2026.03.0"
```

This configures an init container that delivers Positron binaries and documentation to
session pods. The version determines both the image tag and the server-side mount path.

## General principles

- In most places, we opt to pass Helm values directly into ConfigMaps. We automatically translate these into the
Expand Down Expand Up @@ -572,6 +601,13 @@ Use of [Sealed secrets](https://github.com/bitnami-labs/sealed-secrets) disables
| chronicleAgent.workbenchApiKey.value | string | `""` | Workbench API key as a raw string to set as the `CHRONICLE_WORKBENCH_APIKEY` environment variable (not recommended) |
| chronicleAgent.workbenchApiKey.valueFrom | object | `{}` | Workbench API key as a `valueFrom` reference (ex. a Kubernetes Secret reference) to set as the `CHRONICLE_WORKBENCH_APIKEY` environment variable (recommended) |
| command | list | `[]` | command is the pod container's run command. By default, it uses the container's default. However, the chart expects a container using `supervisord` for startup |
| components | object | `{"enabled":true,"positron":{"image":{"repository":"rstudio/workbench-positron-init","tag":""},"version":""},"sessionInit":{"image":{"repository":"rstudio/workbench-session-init","tag":""}}}` | Session component delivery via init containers. When enabled (default), the chart configures rserver.conf so the launcher injects init containers into session pods at startup. Set `enabled: false` and change `session.image.repository` to `rstudio/r-session-complete` to use the classic all-in-one session image instead. |
| components.enabled | bool | `true` | Enable session component delivery via init containers. When false, no init containers are configured and session.image must be a self-contained image like r-session-complete. |
| components.positron.image.repository | string | `"rstudio/workbench-positron-init"` | The image repository for the Positron init container |
| components.positron.image.tag | string | `""` | A tag override for the Positron init container image. Defaults to the positron version |
| components.positron.version | string | `""` | A Positron version to enable the Positron init container for session pods. When set, configures rserver.conf with the Positron init container settings and attaches a Positron init container to the Workbench server pod. |
| components.sessionInit.image.repository | string | `"rstudio/workbench-session-init"` | The repository for the session init container image |
| components.sessionInit.image.tag | string | `""` | A tag override for the session init container. Default tag is the chart appVersion (or versionOverride) |
| config.database | object | `{"conf":{"existingSecret":"","value":""}}` | a map of database connection config files. Mounted to `/mnt/secret-configmap/rstudio/database.conf` with 0600 permissions |
| config.database.conf.existingSecret | string | `""` | Secret for database connection config. Will take precedence over `config.database.conf.value`. Key: 'database.conf' |
| config.database.conf.value | string | `""` | Database connection config. Will only be used if `config.database.conf.existingSecret` is not set. |
Expand Down Expand Up @@ -699,9 +735,9 @@ Use of [Sealed secrets](https://github.com/bitnami-labs/sealed-secrets) disables
| 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 |
| session.defaultHomeMount | bool | `true` | Whether to automatically add the homeStorage PVC to the session (i.e. via the `launcher-mounts` file) |
| session.defaultSecretMountPath | string | `"/mnt/session-secret/"` | The path to mount the sessionSecret (from `config.sessionSecret`) onto the server and session pods |
| session.image.repository | string | `"rstudio/r-session-complete"` | The repository to use for the session image |
| session.image.repository | string | `"rstudio/workbench-session"` | The repository to use for the session image |
| session.image.tag | string | `""` | A tag override for the session image. Overrides the "tagPrefix" above, if set. Default tag is `{{ tagPrefix }}{{ version }}` |
| session.image.tagPrefix | string | `"ubuntu2204-"` | A tag prefix for session images (common selections: ubuntu2204-, centos7-). Only used if tag is not defined |
| session.image.tagPrefix | string | `"ubuntu2204-"` | A tag prefix for session images (common selections: ubuntu2204-). Only used if tag is not defined |
| shareProcessNamespace | bool | `false` | whether to provide `shareProcessNamespace` to the pod. |
| sharedStorage.accessModes | list | `["ReadWriteMany"]` | accessModes defined for the storage PVC (represented as YAML) |
| sharedStorage.annotations | object | `{"helm.sh/resource-policy":"keep"}` | Define the annotations for the Persistent Volume Claim resource |
Expand Down
29 changes: 29 additions & 0 deletions charts/rstudio-workbench/README.md.gotmpl
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,35 @@ Alternatively, database passwords may be set during `helm install` with the foll

`--set config.secret.'database\.conf'.password="<YOUR_PASSWORD_HERE>"`

## Session images

By default, session pods use the `rstudio/workbench-session` image with an init container
(`rstudio/workbench-session-init`) that delivers Workbench session components at pod startup.

To use the classic all-in-one `r-session-complete` image instead (which bundles all components
into a single image), disable session components and change the session image:

```yaml
session:
image:
repository: "rstudio/r-session-complete"
components:
enabled: false
```

### Positron

To enable Positron IDE support, set a Positron version under `components.positron`:
Copy link
Copy Markdown
Contributor

@skyeturriff skyeturriff Apr 1, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We might want to adjust wording here, it kind of sounds like Positron won't work without it. Something closer to what was added to the NEWS entry would make sense I think.

Suggested change
To enable Positron IDE support, set a Positron version under `components.positron`:
Positron IDE is available by default. The `workbench-session-init` container delivers a bundled Positron version alongside other session components.
To update Positron independently of a Workbench release, set a version under `components.positron`:
components:
positron:
version: "2026.03.0"
This attaches a separate init container that delivers the specified Positron version and its documentation, overriding the bundled version.


```yaml
components:
positron:
version: "2026.03.0"
```

This configures an init container that delivers Positron binaries and documentation to
session pods. The version determines both the image tag and the server-side mount path.

## General principles

- In most places, we opt to pass Helm values directly into ConfigMaps. We automatically translate these into the
Expand Down
8 changes: 8 additions & 0 deletions charts/rstudio-workbench/templates/_helpers.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,10 @@ containers:
mountPath: "/var/lib/rstudio-launcher/Kubernetes/service.tpl"
subPath: "service.tpl"
{{- end }}
{{- if and .Values.components.enabled .Values.components.positron.version }}
- name: positron-components
mountPath: {{ printf "/usr/lib/rstudio-server/bin/positron-server/%s" .Values.components.positron.version | quote }}
{{- end }}
{{- if .Values.pod.volumeMounts }}
{{- toYaml .Values.pod.volumeMounts | nindent 4 }}
{{- end }}
Expand Down Expand Up @@ -416,6 +420,10 @@ volumes:
name: {{ include "rstudio-workbench.fullname" .}}-templates
defaultMode: {{ .Values.config.defaultMode.server }}
{{- end }}
{{- if and .Values.components.enabled .Values.components.positron.version }}
- name: positron-components
emptyDir: {}
{{- end }}
{{- if .Values.pod.volumes }}
{{ toYaml .Values.pod.volumes }}
{{- end }}
Expand Down
12 changes: 12 additions & 0 deletions charts/rstudio-workbench/templates/configmap-general.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,18 @@
{{- $defaultIDEServiceName := include "rstudio-workbench.fullname" . }}
{{- $defaultIDEServiceURL := printf "http://%s.%s.svc.cluster.local:80" $defaultIDEServiceName $.Release.Namespace }}
{{- $defaultRServerConfigValues := dict "launcher-sessions-callback-address" ($defaultIDEServiceURL) }}
{{- if and .Values.launcher.enabled .Values.components.enabled }}
{{- $initTag := .Values.components.sessionInit.image.tag | default $defaultVersion }}
{{- $_ := set $defaultRServerConfigValues "launcher-sessions-auto-update" 1 }}
{{- $_ := set $defaultRServerConfigValues "launcher-sessions-init-container-image-name" .Values.components.sessionInit.image.repository }}
{{- $_ := set $defaultRServerConfigValues "launcher-sessions-init-container-image-tag" $initTag }}
{{- if .Values.components.positron.version }}
{{- $positronTag := .Values.components.positron.image.tag | default .Values.components.positron.version }}
{{- $_ := set $defaultRServerConfigValues "launcher-positron-init-container-enabled" 1 }}
{{- $_ := set $defaultRServerConfigValues "launcher-positron-init-container-image-name" .Values.components.positron.image.repository }}
{{- $_ := set $defaultRServerConfigValues "launcher-positron-init-container-image-tag" $positronTag }}
{{- end }}
{{- end }}
{{- $defaultRServerConfig := dict "rserver.conf" ($defaultRServerConfigValues) }}
{{- $defaultLauncherK8sConfigValues := dict "kubernetes-namespace" (default $.Release.Namespace .Values.launcher.namespace) }}
{{- if .Values.launcher.useTemplates }}
Expand Down
12 changes: 11 additions & 1 deletion charts/rstudio-workbench/templates/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -101,11 +101,21 @@ spec:
{{- toYaml . | nindent 8 }}
{{- end }}
terminationGracePeriodSeconds: {{ .Values.pod.terminationGracePeriodSeconds }}
{{- if or .Values.initContainers .Values.chronicleAgent.enabled }}
{{- if or .Values.initContainers .Values.chronicleAgent.enabled (and .Values.components.enabled .Values.components.positron.version) }}
initContainers:
{{- with .Values.initContainers }}
{{- toYaml . | nindent 8 }}
{{- end }}
{{- if and .Values.components.enabled .Values.components.positron.version }}
- name: positron-init
image: "{{ .Values.components.positron.image.repository }}:{{ .Values.components.positron.image.tag | default .Values.components.positron.version }}"
env:
- name: PWB_POSITRON_TARGET
value: "positron,positron-docs"
volumeMounts:
- name: positron-components
mountPath: /mnt/init
{{- end }}
{{- if .Values.chronicleAgent.enabled }}
- name: chronicle-agent
{{- if .Values.chronicleAgent.image.sha }}
Expand Down
Loading
Loading