Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
92de375
Accept ordered config files and deprecate the map form for Workbench
khusmann Sep 25, 2026
f403ce0
Document that only sections are ordered, not options within them
khusmann Sep 25, 2026
5a4b785
Write r-versions lint values as a DCF string
khusmann Sep 29, 2026
4d51ca8
Document r-versions as DCF and sort pam volume mounts
khusmann Sep 29, 2026
b647123
Warn on any map form and guard repos.conf against a missing CRAN entry
khusmann Sep 29, 2026
7a57723
Route session config files to a renderer by filename
khusmann Sep 29, 2026
568b0a2
Correct the profiles array-append example, which described behavior t…
khusmann Sep 29, 2026
84e924f
Follow the profiles helper rename
khusmann Sep 30, 2026
e510d20
Note the profiles whitespace change in NEWS
khusmann Sep 30, 2026
4fe6aa1
Guard that files documented as lists ship no chart default
khusmann Sep 30, 2026
bcf2581
Derive the map-default guard from the deprecation warning
khusmann Sep 30, 2026
00c5327
Warn when an order-agnostic ini file is written as a list
khusmann Sep 30, 2026
33449c7
Route config files through one filename table and warn on unrecognize…
khusmann Sep 30, 2026
18e41c8
Merge branch 'ordered-config-library' into ordered-config-workbench
khusmann Sep 30, 2026
7a5b7a3
Repeat keys for program_options files, keep CRAN in repos.conf maps, …
khusmann Sep 30, 2026
f7000b4
Pin legacy config shapes to their main renders and cover the new guards
khusmann Sep 30, 2026
c3c6615
Bring Workbench NEWS and README in line with per-file multi-values an…
khusmann Sep 30, 2026
de0092e
Merge branch 'ordered-config-library' into ordered-config-workbench
khusmann Sep 30, 2026
2d5ec7e
Route every launcher profiles file and pip.conf through the table, sa…
khusmann Sep 30, 2026
0d8b644
Drop the pam mount ordering fix, which lands separately in #955
khusmann Sep 30, 2026
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
4 changes: 2 additions & 2 deletions 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.22.2
version: 0.23.0
apiVersion: v2
appVersion: 2026.09.0
icon: https://raw.githubusercontent.com/rstudio/helm/main/images/posit-icon-fullcolor.svg
Expand All @@ -13,7 +13,7 @@ maintainers:
url: https://github.com/sol-eng
dependencies:
- name: rstudio-library
version: 0.1.35
version: 0.1.38
repository: https://helm.rstudio.com
annotations:
artifacthub.io/images: |
Expand Down
112 changes: 112 additions & 0 deletions charts/rstudio-workbench/NEWS.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,117 @@
# Changelog

## 0.23.0

- Config files whose behavior depends on the order of their sections or entries can now be written
as a list, putting `- ` in front of each section or entry, and are rendered in the order written.
This covers `config.server.profiles`, `config.server.launcher\.*\.resources\.conf`,
`config.profiles.launcher\.*\.profiles\.conf` (and the deprecated `config.server` location of
those files), and `config.session.repos\.conf`:

```yaml
config:
server:
profiles:
- "*":
max-memory-mb: 1024
- "@analysts":
max-memory-mb: 4096
session:
repos.conf:
- Internal: https://pkgs.example.com/internal
- CRAN: https://packagemanager.posit.co/cran/latest
```

Written as a map, these files are still rendered as before - sorted by name - and the chart now
prints a `WARNING` in `NOTES.txt` saying so, since sorting silently changes what they do. The map
form is not going away; it is simply the wrong form for these four files. The raw string form
(`profiles: |`) keeps the written order and is unaffected.
- A list of values for one option is now written the way the file's parser expects. Files read by
boost `program_options` - `rserver.conf`, `rsession.conf`, the `launcher.<cluster>.conf` plugin
files, `jupyter.conf`, `vscode.conf`, `positron.conf` - repeat the key, one line per value, as
the chart always did at the top level of a file:

```yaml
config:
server:
rserver.conf:
www-allow-origin: [a.example.com, b.example.com] # www-allow-origin=a.example.com
# www-allow-origin=b.example.com
```

Files read by boost `property_tree`, which rejects a repeated key - `profiles`, `launcher.conf`,
`logging.conf`, `repos.conf`, and the `launcher.*.resources.conf` and `launcher.*.profiles.conf`
files - comma-join them (`container-images=a,b`), as `config.profiles` always did. Either way the
same applies inside a `[section]`, where a list previously rendered as `key=[a b]`. An empty list
(`container-images: []`) renders nothing rather than `container-images=[]`.

`config.session.pip\.conf` is the exception: pip is not Workbench, and it writes several values
as one value continued over indented lines, which the chart does not produce. A repeated key
makes pip refuse the whole file, so a list of values in `pip.conf` now fails the render with a
message saying to write the file as a string. It previously rendered `extra-index-url=[a b]`.

`config.secret`, `config.sessionSecret`, `config.startupCustom` and `config.startupUserProvisioning`
keep repeating the key at the top level of a file, as before. `config.sssd.conf` comma-joins
(`domains=a,b`), which is sssd's own syntax; it previously rendered `domains=[a b]`.
- `config.session` files are now rendered according to their format rather than the shape of the
value written. `r-versions` and `notifications.conf` are DCF (`Key: Value`, records separated by
a blank line), `*.json` files are JSON, and everything else stays ini. Previously all of them
were rendered as ini, so `r-versions` came out as `Key=Value` and Workbench discarded it,
logging `does not point to a valid directory` for each line. Resolves
https://github.com/rstudio/helm/issues/948. A file written as a raw string is still passed
through unchanged.

**Your R version list may change on upgrade.** If you wrote `r-versions` as a list of records,
Workbench has been ignoring it and scanning for R on its own; it now reads your entries. Entries
whose `Path` no longer exists are logged and skipped. The same goes for `*.json` session files
written as a map, which Workbench has been ignoring as invalid JSON.
- **BREAKING**: a file written as a list must give each section or entry its own `- `, holding a
single key. This rejects shapes that previously rendered something unusable: several sections
crammed into one entry (a missing `- `), which rendered as `name=map[key:value]`; and a multi-field
record, which was only ever used for `config.session.r-versions` and emitted `Key=Value` where
Workbench parses that file as DCF (`Key: Value`) - see https://github.com/rstudio/helm/issues/948.
Write `r-versions` as a string (`r-versions: |`), which is passed through unchanged. An entry with
no value (`- "*":` with nothing under it) also fails; it rendered as `*=<nil>`.
- **BREAKING**: a list entry holding several options in a file without sections, such as
`rsession.conf: [{session-timeout-minutes: 60, session-save-action-default: none}]`, now fails
where it used to render one line per option. Write the file as a map instead.
- **BREAKING**: an option's value must be a single value or a list of single values. ini files have
no nesting, so a map there (`limits: {cpu: 1}`) rendered as `limits=map[cpu:1]`; it now fails.
- `config.session.repos\.conf` now defaults to a list, so that its order is kept. A `repos.conf`
you write as a map still gets the chart's `CRAN` entry when it has none, as it did when the
default was a map. A list replaces the default, so it must name a `CRAN` entry itself - Workbench
ignores the whole file without one - and the chart now fails if it does not. A string without a
`CRAN=` line prints a `WARNING` instead. With a map, Helm itself also logs `destination for
rstudio-workbench.config.session.repos.conf is a table. Ignoring non-table value (...)` on every
command: that is the chart's default list being set aside in favor of your map, it is harmless,
and it goes away once the file is written as a list.
- `config.server.rserver\.conf`, `launcher\.conf`, `launcher\.kubernetes\.conf`, and
`positron\.conf` written as a list now fail with a message saying to write them as a map. The
chart merges its own settings into these files, which a list silently dropped - `launcher\.conf`
lost the `[server]` section the launcher needs. `rserver\.conf` written as a string now fails with
the same message instead of a template type error. The other three still accept a string, which
is used as the whole file and so replaces those settings too (`kubernetes-namespace` and
`use-templating`, the rootless `secure-cookie-key-file`, the Positron `exe`); the message and
README now say so, where before they only said a string was accepted.
- `launcher.*.profiles.conf` no longer starts with a blank line. Profiles files now render through
the same helper as every other ini file, which places the blank line between sections rather than
before the first one. Nothing reads it - the file is parsed with an ini parser that skips blank
lines - but it changes the rendered file, so the config checksum shifts and pods restart once on
upgrade.
- The chart now warns when any other ini file is written as a *list*. Helm merges a map with the
chart's defaults for a file but replaces them with a list, so the list form drops any default the
chart ships for that file. Write those files as a map unless you need to control section order.
Files that are not ini (`r-versions`, `notifications.conf`, `*.json`) are exempt, since a list is
how you legitimately write those.
- `config.server` files are now rendered by format too, the same way `config.session` already is.
A single table in the chart gives each configuration file its format, and both ConfigMaps read
from it. `config.server.*.json` files written as a map are now rendered as JSON rather than ini.
- The chart now warns when a configuration file it does not recognize is written as a map or a
list. Such a file is still rendered as ini with repeated keys, which is what the chart has always
done, but ini is a guess for a file the chart knows nothing about, and a wrong guess renders a
file that looks fine and is ignored by the product. Give the file's contents as text to render it
exactly as written. `Renviron.site` is recognized and does not warn.

## 0.22.2

- Bump Workbench version to 2026.09.0
Expand Down
Loading
Loading