diff --git a/Justfile b/Justfile index 434a66529..51e37a612 100644 --- a/Justfile +++ b/Justfile @@ -96,7 +96,7 @@ test-connect-interpreter-versions: helm template ./charts/rstudio-connect \ --set launcher.enabled=false \ --show-only templates/deployment.yaml | \ - grep "image\:.*rstudio-connect.*" | \ + grep "image\:.*posit/connect\:.*" | \ awk -F": " '{print $2}' | \ xargs) diff --git a/README.md b/README.md index a2a28c50b..ddec615e8 100644 --- a/README.md +++ b/README.md @@ -3,11 +3,23 @@ [![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/rstudio)](https://artifacthub.io/packages/search?repo=rstudio) [![GitHub license](https://img.shields.io/github/license/rstudio/helm.svg)](https://github.com/rstudio/helm/blob/main/LICENSE) +> [!IMPORTANT] +> **Chart version 0.20.0 contains breaking changes:** +> +> - Default images moved from `rstudio/` and `ghcr.io/rstudio/` to +> `posit/` on [Docker Hub](https://hub.docker.com/u/posit) and +> `ghcr.io/posit-dev/` on [GitHub Container Registry (GHCR)](https://github.com/orgs/posit-dev/packages). +> - The default tag format changed from `{tagPrefix}{appVersion}` to +> `{appVersion}-{os}`. +> +> If you are upgrading from an earlier version, read the +> [image migration guide](https://docs.posit.co/helm/docs/migrating-to-posit-images.html) first. + ## Usage 1. Install [Helm](https://helm.sh). Please refer to Helm's [documentation](https://helm.sh/docs/) for more information on getting started. -2. Add the RStudio Helm repo: +2. Add the Helm repo: ```console helm repo add rstudio https://helm.rstudio.com diff --git a/_quarto.yml b/_quarto.yml index fccaa0d5d..51dcbe4c4 100644 --- a/_quarto.yml +++ b/_quarto.yml @@ -16,6 +16,7 @@ project: - examples/workbench/README.md - examples/connect/README.md - docs/customize.md + - docs/migrating-to-posit-images.qmd - "*.qmd" filters: @@ -51,6 +52,8 @@ website: contents: - text: Overview file: index.qmd + - text: Image migration guide + file: docs/migrating-to-posit-images.qmd - section: "Posit Workbench" contents: - text: Overview diff --git a/charts/rstudio-connect/Chart.yaml b/charts/rstudio-connect/Chart.yaml index f1730cbe4..cb35bbeb8 100644 --- a/charts/rstudio-connect/Chart.yaml +++ b/charts/rstudio-connect/Chart.yaml @@ -1,15 +1,15 @@ name: rstudio-connect description: Official Helm chart for Posit Connect -version: 0.9.5 +version: 0.20.0 apiVersion: v2 appVersion: 2026.04.1 icon: https://raw.githubusercontent.com/rstudio/helm/main/images/posit-icon-fullcolor.svg -home: https://www.rstudio.com +home: https://posit.co sources: - https://github.com/rstudio/helm maintainers: - name: sol-eng - email: docker@rstudio.com + email: docker@posit.co url: https://github.com/sol-eng dependencies: - name: rstudio-library @@ -17,18 +17,30 @@ dependencies: repository: https://helm.rstudio.com annotations: artifacthub.io/images: | - - name: rstudio-connect - image: rstudio/rstudio-connect:ubuntu2204-2026.04.1 + - name: connect + image: posit/connect:2026.04.1-ubuntu-24.04 + - name: connect-content-init + image: posit/connect-content-init:2026.04.1-ubuntu-24.04 artifacthub.io/license: MIT artifacthub.io/links: | - - name: Docker Images - url: https://github.com/rstudio/rstudio-docker-products - - name: RStudio Community - url: https://community.rstudio.com/c/r-admin/5 - name: About Connect - url: https://www.rstudio.com/products/connect/ - - name: About RStudio Team - url: https://www.rstudio.com/products/team/ + url: https://posit.co/products/enterprise/connect/ + - name: Connect Documentation + url: https://docs.posit.co/connect/ + - name: Posit Helm Documentation + url: https://docs.posit.co/helm + - name: Container Images + url: https://github.com/posit-dev/images-connect + - name: Posit Community Forum + url: https://forum.posit.co/c/posit-professional-hosted + - name: GitHub Discussions + url: https://github.com/posit-dev/images/discussions + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + artifacthub.io/recommendations: | + - url: https://artifacthub.io/packages/helm/rstudio/rstudio-workbench + - url: https://artifacthub.io/packages/helm/rstudio/rstudio-pm + - url: https://artifacthub.io/packages/helm/rstudio/posit-chronicle keywords: - "data science" - "machine learning" diff --git a/charts/rstudio-connect/NEWS.md b/charts/rstudio-connect/NEWS.md index 9db3699fb..d993399d5 100644 --- a/charts/rstudio-connect/NEWS.md +++ b/charts/rstudio-connect/NEWS.md @@ -1,5 +1,18 @@ # Changelog +## 0.20.0 + +- **BREAKING**: Default images now pull from the `posit/` namespace on Docker Hub + - `image.repository` changed from `ghcr.io/rstudio/rstudio-connect` to `posit/connect` + - `launcher.defaultInitContainer.repository` changed to `posit/connect-content-init` + - `backends.kubernetes.defaultInitContainer.repository` changed to `posit/connect-content-init` + - Default content images updated to `posit/connect-content` + - Image tag format changed from `{tagPrefix}{appVersion}` to `{appVersion}-{os}` + - `image.tagPrefix` replaced by `image.os`; same for `launcher.defaultInitContainer` and `backends.kubernetes.defaultInitContainer` + - Update chart metadata links and branding. +- **BREAKING**: Remove `launcher.customRuntimeYaml`, `launcher.additionalRuntimeImages`, and bundled `default-runtime.yaml` / `default-runtime-pro.yaml`. Use `executionEnvironments` instead. +- Default Python executable updated to 3.14.4 + ## 0.9.5 - Bump Connect version to 2026.04.1 diff --git a/charts/rstudio-connect/README.md b/charts/rstudio-connect/README.md index 524951b73..e2a0b9689 100644 --- a/charts/rstudio-connect/README.md +++ b/charts/rstudio-connect/README.md @@ -1,6 +1,6 @@ # Posit Connect -![Version: 0.9.5](https://img.shields.io/badge/Version-0.9.5-informational?style=flat-square) ![AppVersion: 2026.04.1](https://img.shields.io/badge/AppVersion-2026.04.1-informational?style=flat-square) +![Version: 0.20.0](https://img.shields.io/badge/Version-0.20.0-informational?style=flat-square) ![AppVersion: 2026.04.1](https://img.shields.io/badge/AppVersion-2026.04.1-informational?style=flat-square) #### _Official Helm chart for Posit Connect_ @@ -30,11 +30,11 @@ To ensure reproducibility in your environment and insulate yourself from future ## Installing the chart -To install the chart with the release name `my-release` at version 0.9.5: +To install the chart with the release name `my-release` at version 0.20.0: ```{.bash} helm repo add rstudio https://helm.rstudio.com -helm upgrade --install my-release rstudio/rstudio-connect --version=0.9.5 +helm upgrade --install my-release rstudio/rstudio-connect --version=0.20.0 ``` To explore other chart versions, look at: @@ -45,6 +45,12 @@ helm search repo rstudio/rstudio-connect -l ## Upgrade guidance +### 0.20.0 + +- Chart version 0.20.0 switches default images from `ghcr.io/rstudio/` to the `posit/` namespace on Docker Hub (also available at `ghcr.io/posit-dev/`). See the [migration guide](https://docs.posit.co/helm/docs/migrating-to-posit-images.html) for details. +- Image tag format changed from `{tagPrefix}{appVersion}` to `{appVersion}-{os}`. The chart will fail with a clear error if you have `image.tagPrefix` set — replace it with `image.os`. +- `launcher.customRuntimeYaml` and `launcher.additionalRuntimeImages` have been removed. Use `executionEnvironments` instead. + ### 0.9.0 - Chart version 0.9.0 adds support for the direct Kubernetes runner via `backends.kubernetes.enabled`. See the [upgrade guide](https://docs.posit.co/helm/examples/connect/upgrade-launcher-to-kubernetes/launcher-to-kubernetes.html) for details on transitioning from `launcher.enabled`. @@ -199,8 +205,8 @@ can be set and the release can be upgraded to include the new value. This chart supports [declarative management of execution environments](https://docs.posit.co/connect/admin/appendix/off-host/execution-environments/#declarative-management) via `ExecutionEnvironments.ConfigFilePath`. Requires Connect version 2026.03.0 or later. -Unlike the legacy `launcher.customRuntimeYaml`, changes to `executionEnvironments` -take effect on every `helm upgrade` without requiring a pod restart or database reset. +Changes to `executionEnvironments` take effect on every `helm upgrade` without +requiring a pod restart or database reset. When `executionEnvironments` is set, the chart renders the list into a dedicated ConfigMap and mounts it into the Connect pod. Connect only manages the execution @@ -268,11 +274,11 @@ The Helm `config` values are converted into the `rstudio-connect.gcfg` service c | args | list | `[]` | The pod's run arguments. By default, it uses the container's default | | backends.kubernetes.defaultInitContainer.enabled | bool | `true` | Whether to enable the defaultInitContainer. If disabled, you must ensure that the session components are available another way. Changing the default setting is an advanced option and not recommended. For more information on how Connect uses the session init container refer to https://docs.posit.co/connect/admin/appendix/off-host/arch-overview/#runtime-init-container | | backends.kubernetes.defaultInitContainer.imagePullPolicy | string | `""` | The imagePullPolicy for the default initContainer | -| backends.kubernetes.defaultInitContainer.repository | string | `"ghcr.io/rstudio/rstudio-connect-content-init"` | The repository to use for the Content InitContainer image | +| backends.kubernetes.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 | +| backends.kubernetes.defaultInitContainer.repository | string | `"posit/connect-content-init"` | The repository to use for the Content InitContainer image | | backends.kubernetes.defaultInitContainer.resources | object | `{}` | Optional resources for the default initContainer | | backends.kubernetes.defaultInitContainer.securityContext | object | `{}` | The securityContext for the default initContainer | | backends.kubernetes.defaultInitContainer.tag | string | `""` | Overrides the image tag whose default is the chart appVersion. | -| backends.kubernetes.defaultInitContainer.tagPrefix | string | `"ubuntu2204-"` | A tag prefix for the Content InitContainer image (common selections: jammy-, ubuntu2204-). Only used if tag is not defined | | backends.kubernetes.defaultResourceJobBase | object | `{}` | defaultResourceJobBase is an optional Kubernetes Job definition used as the base when launching content jobs. The chart automatically adds the init container and runtime volume when backends.kubernetes.defaultInitContainer.enabled is true. Only set this if you need to customize the job (e.g., add sidecars, node selectors, tolerations). https://kubernetes.io/docs/concepts/workloads/controllers/job/ | | backends.kubernetes.defaultResourceServiceBase | object | `{}` | defaultResourceServiceBase contains the Kubernetes Service definition which is used as an overlay "base" when creating a content job's Service in Kubernetes. Conceptually this is similar to a Kustomize base. Connect then applies any required Service configuration on-top of the overlay base to produce a final Service definition. https://kubernetes.io/docs/concepts/services-networking/service/ https://kubernetes.io/docs/tasks/manage-kubernetes-objects/kustomization/#bases-and-overlays | | backends.kubernetes.enabled | bool | `false` | Whether to enable off-host execution for running content-jobs in remote Kubernetes pods. | @@ -297,31 +303,29 @@ The Helm `config` values are converted into the `rstudio-connect.gcfg` service c | command | list | `[]` | The pod's run command. By default, it uses the container's default | | config | object | [Posit Connect Configuration Reference](https://docs.posit.co/connect/admin/appendix/off-host/helm-reference/) | A nested map of maps that generates the rstudio-connect.gcfg file | | deployment.annotations | object | `{}` | Additional annotations to add to the rstudio-connect deployment | -| executionEnvironments | list | `[]` (disabled) | Optional list of execution environments to manage declaratively. Requires Connect version 2026.03.0 or later. When set, the chart renders these into a ConfigMap, mounts it into the Connect pod, and sets ExecutionEnvironments.ConfigFilePath in the Connect configuration. Unlike launcher.customRuntimeYaml, changes take effect on every helm upgrade without requiring a pod restart or database reset. | +| executionEnvironments | list | `[]` (disabled) | Optional list of execution environments to manage declaratively. Requires Connect version 2026.03.0 or later. When set, the chart renders these into a ConfigMap, mounts it into the Connect pod, and sets ExecutionEnvironments.ConfigFilePath in the Connect configuration. Changes take effect on every helm upgrade without requiring a pod restart or database reset. | | extraObjects | list | `[]` | Extra objects to deploy (value evaluated as a template) | | fullnameOverride | string | `""` | The full name of the release (can be overridden) | -| image | object | `{"imagePullPolicy":"IfNotPresent","imagePullSecrets":[],"repository":"ghcr.io/rstudio/rstudio-connect","tag":"","tagPrefix":"ubuntu2204-"}` | Defines the Posit Connect image to deploy | +| image | object | `{"imagePullPolicy":"IfNotPresent","imagePullSecrets":[],"os":"ubuntu-24.04","repository":"posit/connect","tag":""}` | Defines the Posit Connect image to deploy | | image.imagePullPolicy | string | `"IfNotPresent"` | The imagePullPolicy for the main pod image | | image.imagePullSecrets | list | `[]` | an array of kubernetes secrets for pulling the main pod image from private registries | -| image.repository | string | `"ghcr.io/rstudio/rstudio-connect"` | The repository to use for the main pod image | +| 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 | +| image.repository | string | `"posit/connect"` | The repository to use for the main pod image | | image.tag | string | `""` | Overrides the image tag whose default is the chart appVersion. | -| image.tagPrefix | string | `"ubuntu2204-"` | A tag prefix for the server image (common selections: jammy-, ubuntu2204-). Only used if tag is not defined | | ingress.annotations | object | `{}` | | | ingress.enabled | bool | `false` | | | ingress.hosts | string | `nil` | | | ingress.ingressClassName | string | `""` | The ingressClassName for the ingress resource. Only used for clusters that support networking.k8s.io/v1 Ingress resources | | ingress.tls | list | `[]` | | | initContainers | bool | `false` | The initContainer spec that will be used verbatim | -| launcher.additionalRuntimeImages | list | `[]` | Deprecated, use `executionEnvironments` instead. Optional. Additional images to append to the end of the "launcher.customRuntimeYaml" (in the "images" key). If `customRuntimeYaml` is a "map", then "additionalRuntimeImages" will only be used if it is a "list". | -| launcher.customRuntimeYaml | string | `""` | Deprecated, use `executionEnvironments` instead. Optional. The runtime.yaml definition of Kubernetes runtime containers. If set to "base", will pull in the default runtime.yaml file. If set to "pro", will pull in the "pro" versions of the default runtime images (i.e. including the pro drivers at the cost of a larger image). Starting with Connect v2023.05.0, this configuration is used to bootstrap the initial set of execution environments the first time the server starts. If any execution environments already exist in the database, these values are ignored; execution environments are not created or modified during subsequent restarts. | -| launcher.defaultInitContainer | object | `{"enabled":true,"imagePullPolicy":"","repository":"ghcr.io/rstudio/rstudio-connect-content-init","resources":{},"securityContext":{},"tag":"","tagPrefix":"ubuntu2204-"}` | Image definition for the default Posit Connect Content InitContainer | +| launcher.defaultInitContainer | object | `{"enabled":true,"imagePullPolicy":"","os":"ubuntu-24.04","repository":"posit/connect-content-init","resources":{},"securityContext":{},"tag":""}` | Image definition for the default Posit Connect Content InitContainer | | launcher.defaultInitContainer.enabled | bool | `true` | Whether to enable the defaultInitContainer. If disabled, you must ensure that the session components are available another way. | | launcher.defaultInitContainer.imagePullPolicy | string | `""` | The imagePullPolicy for the default initContainer | -| launcher.defaultInitContainer.repository | string | `"ghcr.io/rstudio/rstudio-connect-content-init"` | The repository to use for the Content InitContainer image | +| launcher.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 | +| launcher.defaultInitContainer.repository | string | `"posit/connect-content-init"` | The repository to use for the Content InitContainer image | | launcher.defaultInitContainer.resources | object | `{}` | Optional resources for the default initContainer | | launcher.defaultInitContainer.securityContext | object | `{}` | The securityContext for the default initContainer | | launcher.defaultInitContainer.tag | string | `""` | Overrides the image tag whose default is the chart appVersion. | -| launcher.defaultInitContainer.tagPrefix | string | `"ubuntu2204-"` | A tag prefix for the Content InitContainer image (common selections: jammy-, ubuntu2204-). Only used if tag is not defined | | launcher.enabled | bool | `true` | Whether to enable the launcher | | launcher.extraTemplates | object | `{}` | extra templates to render in the template directory. | | launcher.includeDefaultTemplates | bool | `true` | whether to include the default `job.tpl` and `service.tpl` files included with the chart | diff --git a/charts/rstudio-connect/README.md.gotmpl b/charts/rstudio-connect/README.md.gotmpl index bb511abd9..b1601d9c5 100644 --- a/charts/rstudio-connect/README.md.gotmpl +++ b/charts/rstudio-connect/README.md.gotmpl @@ -10,6 +10,12 @@ ## Upgrade guidance +### 0.20.0 + +- Chart version 0.20.0 switches default images from `ghcr.io/rstudio/` to the `posit/` namespace on Docker Hub (also available at `ghcr.io/posit-dev/`). See the [migration guide](https://docs.posit.co/helm/docs/migrating-to-posit-images.html) for details. +- Image tag format changed from `{tagPrefix}{appVersion}` to `{appVersion}-{os}`. The chart will fail with a clear error if you have `image.tagPrefix` set — replace it with `image.os`. +- `launcher.customRuntimeYaml` and `launcher.additionalRuntimeImages` have been removed. Use `executionEnvironments` instead. + ### 0.9.0 - Chart version 0.9.0 adds support for the direct Kubernetes runner via `backends.kubernetes.enabled`. See the [upgrade guide](https://docs.posit.co/helm/examples/connect/upgrade-launcher-to-kubernetes/launcher-to-kubernetes.html) for details on transitioning from `launcher.enabled`. @@ -139,8 +145,8 @@ can be set and the release can be upgraded to include the new value. This chart supports [declarative management of execution environments](https://docs.posit.co/connect/admin/appendix/off-host/execution-environments/#declarative-management) via `ExecutionEnvironments.ConfigFilePath`. Requires Connect version 2026.03.0 or later. -Unlike the legacy `launcher.customRuntimeYaml`, changes to `executionEnvironments` -take effect on every `helm upgrade` without requiring a pod restart or database reset. +Changes to `executionEnvironments` take effect on every `helm upgrade` without +requiring a pod restart or database reset. When `executionEnvironments` is set, the chart renders the list into a dedicated ConfigMap and mounts it into the Connect pod. Connect only manages the execution diff --git a/charts/rstudio-connect/default-runtime-pro.yaml b/charts/rstudio-connect/default-runtime-pro.yaml deleted file mode 100644 index a94522a2d..000000000 --- a/charts/rstudio-connect/default-runtime-pro.yaml +++ /dev/null @@ -1,98 +0,0 @@ -name: Kubernetes -images: - - - name: ghcr.io/rstudio/content-pro:r3.6.3-py3.8.19-ubuntu2204 - python: - installations: - - - path: /opt/python/3.8.19/bin/python3 - version: 3.8.19 - r: - installations: - - - path: /opt/R/3.6.3/bin/R - version: 3.6.3 - quarto: - installations: - - path: /opt/quarto/1.3.450/bin/quarto - version: 1.3.450 - - - name: ghcr.io/rstudio/content-pro:r4.0.5-py3.9.19-ubuntu2204 - python: - installations: - - - path: /opt/python/3.9.19/bin/python3 - version: 3.9.19 - r: - installations: - - - path: /opt/R/4.0.5/bin/R - version: 4.0.5 - quarto: - installations: - - path: /opt/quarto/1.3.450/bin/quarto - version: 1.3.450 - - - name: ghcr.io/rstudio/content-pro:r4.1.3-py3.10.14-ubuntu2204 - python: - installations: - - - path: /opt/python/3.10.14/bin/python3 - version: 3.10.14 - r: - installations: - - - path: /opt/R/4.1.3/bin/R - version: 4.1.3 - quarto: - installations: - - path: /opt/quarto/1.3.450/bin/quarto - version: 1.3.450 - - - name: ghcr.io/rstudio/content-pro:r4.2.3-py3.11.9-ubuntu2204 - python: - installations: - - - path: /opt/python/3.11.9/bin/python3 - version: 3.11.9 - r: - installations: - - - path: /opt/R/4.2.3/bin/R - version: 4.2.3 - quarto: - installations: - - path: /opt/quarto/1.3.450/bin/quarto - version: 1.3.450 - - - name: ghcr.io/rstudio/content-pro:r4.3.3-py3.12.3-ubuntu2204 - python: - installations: - - - path: /opt/python/3.12.3/bin/python3 - version: 3.12.3 - r: - installations: - - - path: /opt/R/4.3.3/bin/R - version: 4.3.3 - quarto: - installations: - - path: /opt/quarto/1.4.553/bin/quarto - version: 1.4.553 - - - name: ghcr.io/rstudio/content-pro:r4.4.0-py3.12.3-ubuntu2204 - python: - installations: - - - path: /opt/python/3.12.3/bin/python3 - version: 3.12.3 - r: - installations: - - - path: /opt/R/4.4.0/bin/R - version: 4.4.0 - quarto: - installations: - - path: /opt/quarto/1.4.553/bin/quarto - version: 1.4.553 diff --git a/charts/rstudio-connect/default-runtime.yaml b/charts/rstudio-connect/default-runtime.yaml deleted file mode 100644 index 888a763a0..000000000 --- a/charts/rstudio-connect/default-runtime.yaml +++ /dev/null @@ -1,98 +0,0 @@ -name: Kubernetes -images: - - - name: ghcr.io/rstudio/content-base:r3.6.3-py3.8.19-ubuntu2204 - python: - installations: - - - path: /opt/python/3.8.19/bin/python3 - version: 3.8.19 - r: - installations: - - - path: /opt/R/3.6.3/bin/R - version: 3.6.3 - quarto: - installations: - - path: /opt/quarto/1.3.450/bin/quarto - version: 1.3.450 - - - name: ghcr.io/rstudio/content-base:r4.0.5-py3.9.19-ubuntu2204 - python: - installations: - - - path: /opt/python/3.9.19/bin/python3 - version: 3.9.19 - r: - installations: - - - path: /opt/R/4.0.5/bin/R - version: 4.0.5 - quarto: - installations: - - path: /opt/quarto/1.3.450/bin/quarto - version: 1.3.450 - - - name: ghcr.io/rstudio/content-base:r4.1.3-py3.10.14-ubuntu2204 - python: - installations: - - - path: /opt/python/3.10.14/bin/python3 - version: 3.10.14 - r: - installations: - - - path: /opt/R/4.1.3/bin/R - version: 4.1.3 - quarto: - installations: - - path: /opt/quarto/1.3.450/bin/quarto - version: 1.3.450 - - - name: ghcr.io/rstudio/content-base:r4.2.3-py3.11.9-ubuntu2204 - python: - installations: - - - path: /opt/python/3.11.9/bin/python3 - version: 3.11.9 - r: - installations: - - - path: /opt/R/4.2.3/bin/R - version: 4.2.3 - quarto: - installations: - - path: /opt/quarto/1.3.450/bin/quarto - version: 1.3.450 - - - name: ghcr.io/rstudio/content-base:r4.3.3-py3.12.3-ubuntu2204 - python: - installations: - - - path: /opt/python/3.12.3/bin/python3 - version: 3.12.3 - r: - installations: - - - path: /opt/R/4.3.3/bin/R - version: 4.3.3 - quarto: - installations: - - path: /opt/quarto/1.4.553/bin/quarto - version: 1.4.553 - - - name: ghcr.io/rstudio/content-base:r4.4.0-py3.12.3-ubuntu2204 - python: - installations: - - - path: /opt/python/3.12.3/bin/python3 - version: 3.12.3 - r: - installations: - - - path: /opt/R/4.4.0/bin/R - version: 4.4.0 - quarto: - installations: - - path: /opt/quarto/1.4.553/bin/quarto - version: 1.4.553 diff --git a/charts/rstudio-connect/lint/complex-values.yaml b/charts/rstudio-connect/lint/complex-values.yaml index 994c28a54..14c7cd237 100644 --- a/charts/rstudio-connect/lint/complex-values.yaml +++ b/charts/rstudio-connect/lint/complex-values.yaml @@ -11,8 +11,8 @@ strategy: maxSurge: "100%" maxUnavailable: 0 image: - repository: rstudio/rstudio-connect - tag: 1.8.4-11 + repository: ghcr.io/posit-dev/connect + tag: 2026.04.0-ubuntu-24.04 imagePullPolicy: "IfNotPresent" imagePullSecrets: - name: "some-secret" diff --git a/charts/rstudio-connect/lint/launcher-advanced-values.yaml b/charts/rstudio-connect/lint/launcher-advanced-values.yaml deleted file mode 100644 index 014df5736..000000000 --- a/charts/rstudio-connect/lint/launcher-advanced-values.yaml +++ /dev/null @@ -1,35 +0,0 @@ -rbac: - create: true - serviceAccount: - create: true - name: "connect-service-account" -securityContext: null -sharedStorage: - create: true -launcher: - enabled: true - additionalRuntimeImages: - - name: ghcr.io/rstudio/content-base:r4.1.0-py3.9.2-bionic - python: - installations: - - path: /opt/python/3.9.2/bin/python3.9 - version: 3.9.2 - r: - installations: - - path: /opt/R/4.1.0/bin/R - version: 4.1.0 - customRuntimeYaml: - name: Kubernetes - images: - - - name: ghcr.io/rstudio/content-base:r3.1.3-py2.7.18-bionic - python: - installations: - - - path: /opt/python/2.7.18/bin/python2.7 - version: 2.7.18 - r: - installations: - - - path: /opt/R/3.1.3/bin/R - version: 3.1.3 diff --git a/charts/rstudio-connect/lint/launcher-advanced2-values.yaml b/charts/rstudio-connect/lint/launcher-advanced2-values.yaml deleted file mode 100644 index ff43deef6..000000000 --- a/charts/rstudio-connect/lint/launcher-advanced2-values.yaml +++ /dev/null @@ -1,38 +0,0 @@ -rbac: - create: true - serviceAccount: - create: true -securityContext: null -sharedStorage: - create: true -launcher: - enabled: true - defaultInitContainer: - enabled: true - securityContext: - allowPrivilegedEscalation: false - additionalRuntimeImages: | - - name: ghcr.io/rstudio/content-base:r4.1.0-py3.9.2-bionic - python: - installations: - - path: /opt/python/3.9.2/bin/python3.9 - version: 3.9.2 - r: - installations: - - path: /opt/R/4.1.0/bin/R - version: 4.1.0 - customRuntimeYaml: | - name: Kubernetes - images: - - - name: ghcr.io/rstudio/content-base:r3.1.3-py2.7.18-bionic - python: - installations: - - - path: /opt/python/2.7.18/bin/python2.7 - version: 2.7.18 - r: - installations: - - - path: /opt/R/3.1.3/bin/R - version: 3.1.3 diff --git a/charts/rstudio-connect/lint/launcher-advanced3-values.yaml b/charts/rstudio-connect/lint/launcher-advanced3-values.yaml deleted file mode 100644 index af86dd337..000000000 --- a/charts/rstudio-connect/lint/launcher-advanced3-values.yaml +++ /dev/null @@ -1,20 +0,0 @@ -rbac: - create: true - serviceAccount: - create: true -securityContext: null -sharedStorage: - create: true -launcher: - enabled: true - customRuntimeYaml: pro - additionalRuntimeImages: - - name: ghcr.io/rstudio/content-base:r4.1.0-py3.9.2-bionic - python: - installations: - - path: /opt/python/3.9.2/bin/python3.9 - version: 3.9.2 - r: - installations: - - path: /opt/R/4.1.0/bin/R - version: 4.1.0 diff --git a/charts/rstudio-connect/templates/NOTES.txt b/charts/rstudio-connect/templates/NOTES.txt index 805b109b9..c1ff54f93 100644 --- a/charts/rstudio-connect/templates/NOTES.txt +++ b/charts/rstudio-connect/templates/NOTES.txt @@ -70,6 +70,26 @@ Please consider removing this configuration value. {{- fail "\n\n`launcher.contentInitContainer` values are now stored at `launcher.defaultInitContainer`" }} {{- end }} +{{- if .Values.launcher.customRuntimeYaml }} + {{- fail "\n\n`launcher.customRuntimeYaml` has been removed. Use `executionEnvironments` for declarative management of execution environments." }} +{{- end }} + +{{- if .Values.launcher.additionalRuntimeImages }} + {{- fail "\n\n`launcher.additionalRuntimeImages` has been removed. Use `executionEnvironments` for declarative management of execution environments." }} +{{- end }} + +{{- if .Values.image.tagPrefix }} + {{- fail "\n\n`image.tagPrefix` has been removed. Use `image.os` instead (e.g. `ubuntu-24.04`). The image tag format is now `{version}-{os}`." }} +{{- end }} + +{{- if .Values.launcher.defaultInitContainer.tagPrefix }} + {{- fail "\n\n`launcher.defaultInitContainer.tagPrefix` has been removed. Use `launcher.defaultInitContainer.os` instead (e.g. `ubuntu-24.04`). The image tag format is now `{version}-{os}`." }} +{{- end }} + +{{- if .Values.backends.kubernetes.defaultInitContainer.tagPrefix }} + {{- fail "\n\n`backends.kubernetes.defaultInitContainer.tagPrefix` has been removed. Use `backends.kubernetes.defaultInitContainer.os` instead (e.g. `ubuntu-24.04`). The image tag format is now `{version}-{os}`." }} +{{- end }} + {{- if .Values.pod.serviceAccountName }} {{- fail "\n\n`pod.serviceAccountName` is no longer used. Use `rbac.serviceAccount.name` instead." }} diff --git a/charts/rstudio-connect/templates/_helpers.tpl b/charts/rstudio-connect/templates/_helpers.tpl index c27634658..2f4bbc4f0 100644 --- a/charts/rstudio-connect/templates/_helpers.tpl +++ b/charts/rstudio-connect/templates/_helpers.tpl @@ -72,9 +72,6 @@ app.kubernetes.io/instance: {{ .Release.Name }} {{- if .Values.launcher.enabled }} {{- $namespace := default $.Release.Namespace .Values.launcher.namespace }} {{- $launcherSettingsDict := dict "Enabled" ("true") "Kubernetes" ("true") "KubernetesNamespace" ($namespace) "KubernetesProfilesConfig" ("/etc/rstudio-connect/launcher/launcher.kubernetes.profiles.conf") }} - {{- if include "rstudio-connect.runtimeYaml" . }} - {{- $_ := set $launcherSettingsDict "ClusterDefinition" (list "/etc/rstudio-connect/runtime.yaml") }} - {{- end }} {{- if and (or .Values.sharedStorage.create .Values.sharedStorage.mount) .Values.sharedStorage.mountContent }} {{- $dataDirPVCName := default (print (include "rstudio-connect.fullname" .) "-shared-storage" ) .Values.sharedStorage.name }} {{- $_ := set $launcherSettingsDict "DataDirPVCName" $dataDirPVCName }} @@ -128,59 +125,6 @@ app.kubernetes.io/instance: {{ .Release.Name }} {{- include "rstudio-library.config.gcfg" ( mergeOverwrite $defaultConfig $configCopy ) }} {{- end -}} -{{/* - - Define the runtime.yaml file - - If a string: - - if "pro" - use pro runtime.yaml - - If additionalRuntimeImages is a string, append - - if "base" - use base runtime.yaml - - If additionalRuntimeImages is a string, append - - otherwise use the string verbatim - - If additionalRuntimeImages is a string, append - - If a map, pass it to "toYaml" - - If additionalRuntimeImages is a list, append - - Otherwise use the base runtime.yaml - - When we append additionalRuntimeImages as a string, we presume that - the end of the runtimeImages file is still in the context of the "images" key -*/}} -{{- define "rstudio-connect.runtimeYaml" -}} - {{- $runtimeYaml := deepCopy (.Values.launcher.customRuntimeYaml | default "") }} - {{- $additionalImages := deepCopy .Values.launcher.additionalRuntimeImages }} - {{- if kindIs "string" $runtimeYaml }} - {{- if eq $runtimeYaml "pro" }} - {{- .Files.Get "default-runtime-pro.yaml" }} - {{- include "rstudio-connect.additionalImagesString" $additionalImages }} - {{- else if eq $runtimeYaml "base" }} - {{- .Files.Get "default-runtime.yaml" }} - {{- include "rstudio-connect.additionalImagesString" $additionalImages }} - {{- else }} - {{- /* Allow verbatim output */ -}} - {{- $runtimeYaml }} - {{- include "rstudio-connect.additionalImagesString" $additionalImages }} - {{- end }} - {{- else if kindIs "map" $runtimeYaml }} - {{- /* - only include additionalImages if it is a list. - otherwise it is possible the keys could be mismatched - */ -}} - {{- if kindIs "list" $additionalImages }} - {{- $_ := set $runtimeYaml "images" (append $runtimeYaml.images $additionalImages) }} - {{- end }} - {{- toYaml $runtimeYaml }} - {{- end }} -{{- end -}} - -{{- define "rstudio-connect.additionalImagesString" }} - {{- if . }} - {{- if kindIs "string" . }} - {{- . | nindent 2 }} - {{- else }} - {{- toYaml . | nindent 2 }} - {{- end }} - {{- end }} -{{- end }} - {{- define "rstudio-connect.pod.annotations" -}} {{- range $key,$value := $.Values.pod.annotations -}} {{ $key }}: {{ $value | quote }} @@ -207,7 +151,7 @@ app.kubernetes.io/instance: {{ .Release.Name }} {{- if .Values.backends.kubernetes.defaultInitContainer.enabled }} {{- /* build init container image tag */}} {{- $defaultVersion := .Values.versionOverride | default $.Chart.AppVersion }} - {{- $tag := .Values.backends.kubernetes.defaultInitContainer.tag | default (printf "%s%s" .Values.backends.kubernetes.defaultInitContainer.tagPrefix $defaultVersion) }} + {{- $tag := .Values.backends.kubernetes.defaultInitContainer.tag | default (printf "%s-%s" $defaultVersion .Values.backends.kubernetes.defaultInitContainer.os) }} {{- $image := printf "%s:%s" .Values.backends.kubernetes.defaultInitContainer.repository $tag }} {{- /* build the init container */}} {{- $initVolumeMount := dict "name" "rsc-volume" "mountPath" "/mnt/rstudio-connect-runtime/" }} diff --git a/charts/rstudio-connect/templates/configmap.yaml b/charts/rstudio-connect/templates/configmap.yaml index e8c3681a2..1b83785e6 100644 --- a/charts/rstudio-connect/templates/configmap.yaml +++ b/charts/rstudio-connect/templates/configmap.yaml @@ -26,11 +26,6 @@ data: {{- end }} {{- $sessionTemplate := deepCopy .Values.launcher.templateValues }} {{- if .Values.launcher.enabled }} - {{- $runtimeYamlContent := include "rstudio-connect.runtimeYaml" . }} - {{- if $runtimeYamlContent }} - runtime.yaml: | - {{- $runtimeYamlContent | nindent 4 }} - {{- end }} {{- /* configuration for job customization (also used below) */ -}} {{- /* 1 - volume */ -}} {{- $emptyRscVolume := dict "name" ("rsc-volume") "emptydir" (dict) }} @@ -46,7 +41,7 @@ data: {{- $jobJsonRuntimeMountExt := dict "target" ("/spec/template/spec/containers/0/volumeMounts/-") "name" ("defaultRuntimeContainerVolumeMountExt") "json" ( $rscVolumeMountExt ) }} {{- /* 3 - init container */ -}} {{- $defaultVersion := .Values.versionOverride | default $.Chart.AppVersion }} - {{- $initContainerImageTag := .Values.launcher.defaultInitContainer.tag | default (printf "%s%s" .Values.launcher.defaultInitContainer.tagPrefix $defaultVersion )}} + {{- $initContainerImageTag := .Values.launcher.defaultInitContainer.tag | default (printf "%s-%s" $defaultVersion .Values.launcher.defaultInitContainer.os )}} {{- $initContainerImage := print .Values.launcher.defaultInitContainer.repository ":" ( $initContainerImageTag ) }} {{- $initContainerPullPolicy := default "IfNotPresent" .Values.launcher.defaultInitContainer.imagePullPolicy }} {{- $initContainerResources := .Values.launcher.defaultInitContainer.resources }} diff --git a/charts/rstudio-connect/templates/deployment.yaml b/charts/rstudio-connect/templates/deployment.yaml index e59ce50e1..061aa38a2 100644 --- a/charts/rstudio-connect/templates/deployment.yaml +++ b/charts/rstudio-connect/templates/deployment.yaml @@ -140,7 +140,7 @@ spec: containers: - name: connect {{- $defaultVersion := .Values.versionOverride | default $.Chart.AppVersion }} - {{- $imageTag := .Values.image.tag | default (printf "%s%s" .Values.image.tagPrefix $defaultVersion )}} + {{- $imageTag := .Values.image.tag | default (printf "%s-%s" $defaultVersion .Values.image.os )}} image: "{{ .Values.image.repository }}:{{ $imageTag }}" env: {{- if .Values.pod.haste }} @@ -168,11 +168,6 @@ spec: {{- if .Values.command }} command: {{ toYaml .Values.command | indent 10 }} - {{- else if (include "rstudio-connect.oheEnabled" .) }} - command: - - tini - - -s - - -- {{- end }} {{- if .Values.args }} args: @@ -209,11 +204,6 @@ spec: {{- end }} {{- end }} {{- if .Values.launcher.enabled }} - {{- if include "rstudio-connect.runtimeYaml" . }} - - name: rstudio-connect-config - mountPath: "/etc/rstudio-connect/runtime.yaml" - subPath: "runtime.yaml" - {{- end }} - name: rstudio-connect-config mountPath: "/etc/rstudio-connect/launcher/launcher.kubernetes.profiles.conf" subPath: "launcher.kubernetes.profiles.conf" diff --git a/charts/rstudio-connect/tests/deprecated_keys_test.yaml b/charts/rstudio-connect/tests/deprecated_keys_test.yaml new file mode 100644 index 000000000..974c8c537 --- /dev/null +++ b/charts/rstudio-connect/tests/deprecated_keys_test.yaml @@ -0,0 +1,63 @@ +suite: Connect Deprecated Keys +templates: + - NOTES.txt +tests: + - it: should fail when launcher.customRuntimeYaml is set + set: + launcher: + enabled: true + customRuntimeYaml: "base" + sharedStorage: + create: true + asserts: + - failedTemplate: + errorPattern: "launcher.customRuntimeYaml.*has been removed.*executionEnvironments" + + - it: should fail when launcher.additionalRuntimeImages is set + set: + launcher: + enabled: true + additionalRuntimeImages: + - name: ghcr.io/my-org/content-base:r4.4.0-py3.11.3-jammy + sharedStorage: + create: true + asserts: + - failedTemplate: + errorPattern: "launcher.additionalRuntimeImages.*has been removed.*executionEnvironments" + + - it: should fail when image.tagPrefix is set + set: + image: + tagPrefix: "ubuntu2204-" + sharedStorage: + create: true + asserts: + - failedTemplate: + errorPattern: "image.tagPrefix.*has been removed.*image.os" + + - it: should fail when launcher.defaultInitContainer.tagPrefix is set + set: + launcher: + enabled: true + defaultInitContainer: + tagPrefix: "ubuntu2204-" + sharedStorage: + create: true + asserts: + - failedTemplate: + errorPattern: "launcher.defaultInitContainer.tagPrefix.*has been removed.*launcher.defaultInitContainer.os" + + - it: should fail when backends.kubernetes.defaultInitContainer.tagPrefix is set + set: + launcher: + enabled: false + backends: + kubernetes: + enabled: true + defaultInitContainer: + tagPrefix: "ubuntu2204-" + sharedStorage: + create: true + asserts: + - failedTemplate: + errorPattern: "backends.kubernetes.defaultInitContainer.tagPrefix.*has been removed.*backends.kubernetes.defaultInitContainer.os" diff --git a/charts/rstudio-connect/tests/execution_environments_test.yaml b/charts/rstudio-connect/tests/execution_environments_test.yaml index e60dbfc4b..919fe0848 100644 --- a/charts/rstudio-connect/tests/execution_environments_test.yaml +++ b/charts/rstudio-connect/tests/execution_environments_test.yaml @@ -187,7 +187,6 @@ tests: set: launcher: enabled: true - customRuntimeYaml: "pro" sharedStorage: create: true mount: true @@ -270,114 +269,3 @@ tests: asserts: - failedTemplate: errorMessage: "executionEnvironments[0].name is required" - - # ============================================================================= - # configmap.yaml - runtime.yaml key omitted when customRuntimeYaml is empty - # ============================================================================= - - - it: should not include runtime.yaml key in configmap when customRuntimeYaml is empty (default) - template: configmap.yaml - documentIndex: 0 - set: - launcher: - enabled: true - asserts: - - notExists: - path: data["runtime.yaml"] - - - it: should not include runtime.yaml key in configmap when customRuntimeYaml is null - template: configmap.yaml - documentIndex: 0 - set: - launcher: - enabled: true - customRuntimeYaml: null - asserts: - - notExists: - path: data["runtime.yaml"] - - - it: should include runtime.yaml key in configmap when customRuntimeYaml is "base" - template: configmap.yaml - documentIndex: 0 - set: - launcher: - enabled: true - customRuntimeYaml: "base" - asserts: - - exists: - path: data["runtime.yaml"] - - - it: should include runtime.yaml key in configmap when customRuntimeYaml is "pro" - template: configmap.yaml - documentIndex: 0 - set: - launcher: - enabled: true - customRuntimeYaml: "pro" - asserts: - - exists: - path: data["runtime.yaml"] - - # ============================================================================= - # configmap.yaml - ClusterDefinition omitted when customRuntimeYaml is empty - # ============================================================================= - - - it: should not set ClusterDefinition in gcfg when customRuntimeYaml is empty (default) - template: configmap.yaml - documentIndex: 0 - set: - launcher: - enabled: true - asserts: - - notMatchRegex: - path: data["rstudio-connect.gcfg"] - pattern: "ClusterDefinition" - - - it: should set ClusterDefinition in gcfg when customRuntimeYaml is "base" - template: configmap.yaml - documentIndex: 0 - set: - launcher: - enabled: true - customRuntimeYaml: "base" - asserts: - - matchRegex: - path: data["rstudio-connect.gcfg"] - pattern: "ClusterDefinition = /etc/rstudio-connect/runtime.yaml" - - # ============================================================================= - # deployment.yaml - runtime.yaml volumeMount omitted when customRuntimeYaml is empty - # ============================================================================= - - - it: should not mount runtime.yaml when customRuntimeYaml is empty (default) - template: deployment.yaml - set: - launcher: - enabled: true - sharedStorage: - create: true - mount: true - asserts: - - notContains: - path: spec.template.spec.containers[0].volumeMounts - content: - name: rstudio-connect-config - mountPath: "/etc/rstudio-connect/runtime.yaml" - subPath: "runtime.yaml" - - - it: should mount runtime.yaml when customRuntimeYaml is "base" - template: deployment.yaml - set: - launcher: - enabled: true - customRuntimeYaml: "base" - sharedStorage: - create: true - mount: true - asserts: - - contains: - path: spec.template.spec.containers[0].volumeMounts - content: - name: rstudio-connect-config - mountPath: "/etc/rstudio-connect/runtime.yaml" - subPath: "runtime.yaml" diff --git a/charts/rstudio-connect/tests/kubernetes_test.yaml b/charts/rstudio-connect/tests/kubernetes_test.yaml index 8c73f0665..eacc6e8ae 100644 --- a/charts/rstudio-connect/tests/kubernetes_test.yaml +++ b/charts/rstudio-connect/tests/kubernetes_test.yaml @@ -784,7 +784,7 @@ tests: pattern: "name: connect-content-init" - matchRegex: path: data["job.yaml"] - pattern: "image: ghcr.io/rstudio/rstudio-connect-content-init:ubuntu2204-" + pattern: "image: posit/connect-content-init:\\d+\\.\\d+\\.\\d+-ubuntu-24\\.04" - matchRegex: path: data["job.yaml"] pattern: "name: connect-content" @@ -1065,7 +1065,7 @@ tests: - notExists: path: spec.template.metadata.annotations["checksum/config-prestart"] - # Test 7: Init image tag precedence — explicit tag overrides tagPrefix+appVersion + # Test 7: Init image tag precedence — explicit tag overrides os+appVersion - it: should use explicit defaultInitContainer.tag when set template: configmap.yaml values: @@ -1081,9 +1081,9 @@ tests: asserts: - matchRegex: path: data["job.yaml"] - pattern: "image: ghcr.io/rstudio/rstudio-connect-content-init:custom-tag-1.2.3" + pattern: "image: posit/connect-content-init:custom-tag-1.2.3" - - it: should use tagPrefix plus appVersion when tag is not set + - it: should use appVersion-os when tag is not set template: configmap.yaml values: - kubernetes-values.yaml @@ -1094,11 +1094,11 @@ tests: kubernetes: enabled: true defaultInitContainer: - tagPrefix: "jammy-" + os: "ubuntu-22.04" asserts: - matchRegex: path: data["job.yaml"] - pattern: "image: ghcr.io/rstudio/rstudio-connect-content-init:jammy-\\d+\\.\\d+\\.\\d+" + pattern: "image: posit/connect-content-init:\\d+\\.\\d+\\.\\d+-ubuntu-22\\.04" - it: should preserve user-provided sidecar and nodeSelector in job base template: configmap.yaml @@ -1132,3 +1132,25 @@ tests: - matchRegex: path: data["job.yaml"] pattern: "name: connect-content" + + - it: should set default prestart args when backends.kubernetes is enabled + template: deployment.yaml + values: + - kubernetes-values.yaml + asserts: + - equal: + path: spec.template.spec.containers[0].args + value: + - /scripts/prestart.bash + - /usr/local/bin/startup.sh + + - it: should mount prestart script when backends.kubernetes is enabled + template: deployment.yaml + values: + - kubernetes-values.yaml + asserts: + - contains: + path: spec.template.spec.containers[0].volumeMounts + content: + name: rstudio-connect-prestart + mountPath: "/scripts/" diff --git a/charts/rstudio-connect/values.yaml b/charts/rstudio-connect/values.yaml index a1c67fa95..73c9fa747 100644 --- a/charts/rstudio-connect/values.yaml +++ b/charts/rstudio-connect/values.yaml @@ -72,9 +72,9 @@ revisionHistoryLimit: 3 # -- Defines the Posit Connect image to deploy image: # -- The repository to use for the main pod image - repository: ghcr.io/rstudio/rstudio-connect - # -- A tag prefix for the server image (common selections: jammy-, ubuntu2204-). Only used if tag is not defined - tagPrefix: ubuntu2204- + repository: posit/connect + # -- The OS version for the image tag (e.g. ubuntu-24.04, ubuntu-22.04). Only used if tag is not defined + os: "ubuntu-24.04" # -- Overrides the image tag whose default is the chart appVersion. tag: "" # -- The imagePullPolicy for the main pod image @@ -317,9 +317,9 @@ backends: # https://docs.posit.co/connect/admin/appendix/off-host/arch-overview/#runtime-init-container enabled: true # -- The repository to use for the Content InitContainer image - repository: ghcr.io/rstudio/rstudio-connect-content-init - # -- A tag prefix for the Content InitContainer image (common selections: jammy-, ubuntu2204-). Only used if tag is not defined - tagPrefix: ubuntu2204- + repository: posit/connect-content-init + # -- The OS version for the image tag (e.g. ubuntu-24.04, ubuntu-22.04). Only used if tag is not defined + os: "ubuntu-24.04" # -- Overrides the image tag whose default is the chart appVersion. tag: "" # -- The imagePullPolicy for the default initContainer @@ -350,18 +350,6 @@ launcher: enabled: true # -- The namespace to launch sessions into. Uses the Release namespace by default namespace: "" - # -- Deprecated, use `executionEnvironments` instead. Optional. The runtime.yaml definition of Kubernetes runtime containers. - # If set to "base", will pull in the default runtime.yaml file. - # If set to "pro", will pull in the "pro" versions of the default runtime images (i.e. including the pro drivers at the - # cost of a larger image). - # Starting with Connect v2023.05.0, this configuration is used to bootstrap the initial set of execution environments - # the first time the server starts. If any execution environments already exist in the database, these values are ignored; - # execution environments are not created or modified during subsequent restarts. - customRuntimeYaml: "" - # -- Deprecated, use `executionEnvironments` instead. Optional. Additional images to append to the end of - # the "launcher.customRuntimeYaml" (in the "images" key). - # If `customRuntimeYaml` is a "map", then "additionalRuntimeImages" will only be used if it is a "list". - additionalRuntimeImages: [] # -- User definition of launcher.kubernetes.profiles.conf for job customization launcherKubernetesProfilesConf: {} # -- Whether to use launcher templates when launching sessions. Defaults to true @@ -421,9 +409,9 @@ launcher: # -- Whether to enable the defaultInitContainer. If disabled, you must ensure that the session components are available another way. enabled: true # -- The repository to use for the Content InitContainer image - repository: ghcr.io/rstudio/rstudio-connect-content-init - # -- A tag prefix for the Content InitContainer image (common selections: jammy-, ubuntu2204-). Only used if tag is not defined - tagPrefix: ubuntu2204- + repository: posit/connect-content-init + # -- The OS version for the image tag (e.g. ubuntu-24.04, ubuntu-22.04). Only used if tag is not defined + os: "ubuntu-24.04" # -- Overrides the image tag whose default is the chart appVersion. tag: "" # -- The imagePullPolicy for the default initContainer @@ -443,8 +431,7 @@ launcher: # Requires Connect version 2026.03.0 or later. # When set, the chart renders these into a ConfigMap, mounts it into the Connect pod, # and sets ExecutionEnvironments.ConfigFilePath in the Connect configuration. -# Unlike launcher.customRuntimeYaml, changes take effect on every helm upgrade -# without requiring a pod restart or database reset. +# Changes take effect on every helm upgrade without requiring a pod restart or database reset. # @default -- `[]` (disabled) executionEnvironments: [] # - name: ghcr.io/my-org/connect-runtime:ubuntu22 @@ -502,14 +489,13 @@ config: # For Off-Host Execution, Python versions are defined by the set of Execution Environments # https://docs.posit.co/connect/admin/python/ Executable: - - /opt/python/3.12.11/bin/python - - /opt/python/3.13.9/bin/python + - /opt/python/3.14.4/bin/python Quarto: Enabled: true # Note: The `Executable` listed below is only used for Local Execution. # For Off-Host Execution, Quarto versions are defined by the set of Execution Environments # https://docs.posit.co/connect/admin/quarto/ - Executable: "/opt/quarto/1.8.25/bin/quarto" + Executable: "/usr/local/bin/quarto" TensorFlow: Enabled: true # For off-host Execution, TensorFlow versions are defined by the set of Execution Environments https://docs.posit.co/connect/admin/tensorflow/ diff --git a/charts/rstudio-pm/Chart.yaml b/charts/rstudio-pm/Chart.yaml index 1ba489c32..b1998e933 100644 --- a/charts/rstudio-pm/Chart.yaml +++ b/charts/rstudio-pm/Chart.yaml @@ -1,33 +1,44 @@ name: rstudio-pm description: Official Helm chart for Posit Package Manager -version: 0.5.57 +version: 0.20.0 apiVersion: v2 appVersion: 2026.04.2 icon: https://raw.githubusercontent.com/rstudio/helm/main/images/posit-icon-fullcolor.svg -home: https://www.rstudio.com +home: https://posit.co sources: - https://github.com/rstudio/helm - - https://github.com/rstudio/rstudio-docker-products maintainers: - name: sol-eng - email: docker@rstudio.com - url: https://github.com/rstudio/helm + email: docker@posit.co + url: https://github.com/sol-eng dependencies: - name: rstudio-library version: 0.1.31 repository: https://helm.rstudio.com annotations: artifacthub.io/images: | - - name: rstudio-package-manager - image: rstudio/rstudio-package-manager:ubuntu2204-2026.04.2 + - name: package-manager + image: posit/package-manager:2026.04.2-ubuntu-24.04 artifacthub.io/license: MIT artifacthub.io/links: | - - name: RStudio Community - url: https://community.rstudio.com/c/r-admin/5 - name: About Package Manager url: https://posit.co/products/enterprise/package-manager/ + - name: Package Manager Documentation + url: https://docs.posit.co/rspm/ + - name: Posit Helm Documentation + url: https://docs.posit.co/helm + - name: Container Images + url: https://github.com/posit-dev/images-package-manager + - name: Posit Community Forum + url: https://forum.posit.co/c/posit-professional-hosted + - name: GitHub Discussions + url: https://github.com/posit-dev/images/discussions - name: About Posit Team url: https://posit.co/products/enterprise/team/ + artifacthub.io/recommendations: | + - url: https://artifacthub.io/packages/helm/rstudio/rstudio-connect + - url: https://artifacthub.io/packages/helm/rstudio/rstudio-workbench + - url: https://artifacthub.io/packages/helm/rstudio/posit-chronicle keywords: - "data science" - "machine learning" diff --git a/charts/rstudio-pm/NEWS.md b/charts/rstudio-pm/NEWS.md index 729f2ce76..6cff3b858 100644 --- a/charts/rstudio-pm/NEWS.md +++ b/charts/rstudio-pm/NEWS.md @@ -1,5 +1,13 @@ # Changelog +## 0.20.0 + +- **BREAKING**: Default images now pull from the `posit/` namespace on Docker Hub + - `image.repository` changed from `rstudio/rstudio-package-manager` to `posit/package-manager` + - Image tag format changed from `{tagPrefix}{appVersion}` to `{appVersion}-{os}` + - `image.tagPrefix` replaced by `image.os` + - Update chart metadata links and branding. + ## 0.5.57 - Update default Posit Package Manager version to 2026.04.2 diff --git a/charts/rstudio-pm/README.md b/charts/rstudio-pm/README.md index 2b3c6c564..d459e0a21 100644 --- a/charts/rstudio-pm/README.md +++ b/charts/rstudio-pm/README.md @@ -1,6 +1,6 @@ # Posit Package Manager -![Version: 0.5.57](https://img.shields.io/badge/Version-0.5.57-informational?style=flat-square) ![AppVersion: 2026.04.2](https://img.shields.io/badge/AppVersion-2026.04.2-informational?style=flat-square) +![Version: 0.20.0](https://img.shields.io/badge/Version-0.20.0-informational?style=flat-square) ![AppVersion: 2026.04.2](https://img.shields.io/badge/AppVersion-2026.04.2-informational?style=flat-square) #### _Official Helm chart for Posit Package Manager_ @@ -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.5.57: +To install the chart with the release name `my-release` at version 0.20.0: ```{.bash} helm repo add rstudio https://helm.rstudio.com -helm upgrade --install my-release rstudio/rstudio-pm --version=0.5.57 +helm upgrade --install my-release rstudio/rstudio-pm --version=0.20.0 ``` To explore other chart versions, look at: @@ -39,6 +39,11 @@ helm search repo rstudio/rstudio-pm -l ## Upgrade guidance +### 0.20.0 + +- Chart version 0.20.0 switches default images from `rstudio/` to the `posit/` namespace on Docker Hub (also available at `ghcr.io/posit-dev/`). See the [migration guide](https://docs.posit.co/helm/docs/migrating-to-posit-images.html) for details. +- Image tag format changed from `{tagPrefix}{appVersion}` to `{appVersion}-{os}`. The chart will fail with a clear error if you have `image.tagPrefix` set — replace it with `image.os`. + ### 0.4.0 - When upgrading to version 0.4.0 or later, the Package Manager service moves from running as `root` to running as @@ -209,9 +214,9 @@ The Helm `config` values are converted into the `rstudio-pm.gcfg` service config | fullnameOverride | string | `""` | the full name of the release (can be overridden) | | image.imagePullPolicy | string | `"IfNotPresent"` | the imagePullPolicy for the main pod image | | image.imagePullSecrets | list | `[]` | an array of kubernetes secrets for pulling the main pod image from private registries | -| image.repository | string | `"rstudio/rstudio-package-manager"` | the repository to use for the main pod image | -| image.tag | string | `""` | the tag to use for the main pod image | -| image.tagPrefix | string | `"ubuntu2204-"` | A tag prefix for the server image (common selection: ubuntu2204-). Only used if tag is not defined | +| 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 | +| image.repository | string | `"posit/package-manager"` | the repository to use for the main pod image | +| image.tag | string | `""` | the tag to use for the main pod image. Overrides os and appVersion | | ingress.annotations | object | `{}` | | | ingress.enabled | bool | `false` | | | ingress.hosts | string | `nil` | | diff --git a/charts/rstudio-pm/README.md.gotmpl b/charts/rstudio-pm/README.md.gotmpl index 4a77167eb..5d172cce8 100644 --- a/charts/rstudio-pm/README.md.gotmpl +++ b/charts/rstudio-pm/README.md.gotmpl @@ -10,6 +10,11 @@ ## Upgrade guidance +### 0.20.0 + +- Chart version 0.20.0 switches default images from `rstudio/` to the `posit/` namespace on Docker Hub (also available at `ghcr.io/posit-dev/`). See the [migration guide](https://docs.posit.co/helm/docs/migrating-to-posit-images.html) for details. +- Image tag format changed from `{tagPrefix}{appVersion}` to `{appVersion}-{os}`. The chart will fail with a clear error if you have `image.tagPrefix` set — replace it with `image.os`. + ### 0.4.0 - When upgrading to version 0.4.0 or later, the Package Manager service moves from running as `root` to running as diff --git a/charts/rstudio-pm/lint/all-values.yaml b/charts/rstudio-pm/lint/all-values.yaml index 6df3a720a..fee133af6 100644 --- a/charts/rstudio-pm/lint/all-values.yaml +++ b/charts/rstudio-pm/lint/all-values.yaml @@ -1,6 +1,6 @@ image: - repository: rstudio/rstudio-package-manager - tag: 1.1.6.1-5 + repository: posit/package-manager + tag: 2026.04.2-ubuntu-24.04 imagePullPolicy: Always imagePullSecrets: - name: "some-secret" diff --git a/charts/rstudio-pm/templates/NOTES.txt b/charts/rstudio-pm/templates/NOTES.txt index c42bf6955..2b4dea2be 100644 --- a/charts/rstudio-pm/templates/NOTES.txt +++ b/charts/rstudio-pm/templates/NOTES.txt @@ -36,3 +36,7 @@ WARNING: `image.pullPolicy` value has been removed in chart version 0.2.7. Pleas NOTE: `pod.serviceAccountName` is deprecated and will be removed in the future. Please use `serviceAccount.name` instead. {{- end }} + +{{- if .Values.image.tagPrefix }} + {{- fail "\n\n`image.tagPrefix` has been removed. Use `image.os` instead (e.g. `ubuntu-24.04`). The image tag format is now `{version}-{os}`." }} +{{- end }} diff --git a/charts/rstudio-pm/templates/deployment.yaml b/charts/rstudio-pm/templates/deployment.yaml index 8dbaf1f8c..4664ebc38 100644 --- a/charts/rstudio-pm/templates/deployment.yaml +++ b/charts/rstudio-pm/templates/deployment.yaml @@ -81,7 +81,7 @@ spec: containers: - name: rspm {{- $defaultVersion := .Values.versionOverride | default $.Chart.AppVersion }} - {{- $imageTag := .Values.image.tag | default (printf "%s%s" .Values.image.tagPrefix $defaultVersion )}} + {{- $imageTag := .Values.image.tag | default (printf "%s-%s" $defaultVersion .Values.image.os )}} image: "{{ .Values.image.repository }}:{{ $imageTag }}" env: {{- include "rstudio-library.license-env" (dict "license" ( .Values.license ) "product" ("rstudio-pm") "envVarPrefix" ("RSPM") "fullName" (include "rstudio-pm.fullname" .)) | nindent 8 }} diff --git a/charts/rstudio-pm/tests/deprecated_keys_test.yaml b/charts/rstudio-pm/tests/deprecated_keys_test.yaml new file mode 100644 index 000000000..ac869b84b --- /dev/null +++ b/charts/rstudio-pm/tests/deprecated_keys_test.yaml @@ -0,0 +1,11 @@ +suite: Package Manager Deprecated Keys +templates: + - NOTES.txt +tests: + - it: should fail when image.tagPrefix is set + set: + image: + tagPrefix: "ubuntu2204-" + asserts: + - failedTemplate: + errorPattern: "image.tagPrefix.*has been removed.*image.os" diff --git a/charts/rstudio-pm/values.yaml b/charts/rstudio-pm/values.yaml index a79e8f366..00a74664d 100644 --- a/charts/rstudio-pm/values.yaml +++ b/charts/rstudio-pm/values.yaml @@ -33,10 +33,10 @@ sharedStorage: image: # -- the repository to use for the main pod image - repository: rstudio/rstudio-package-manager - # -- A tag prefix for the server image (common selection: ubuntu2204-). Only used if tag is not defined - tagPrefix: ubuntu2204- - # -- the tag to use for the main pod image + repository: posit/package-manager + # -- The OS version for the image tag (e.g. ubuntu-24.04, ubuntu-22.04). Only used if tag is not defined + os: "ubuntu-24.04" + # -- the tag to use for the main pod image. Overrides os and appVersion tag: "" # -- the imagePullPolicy for the main pod image imagePullPolicy: IfNotPresent diff --git a/charts/rstudio-workbench/Chart.yaml b/charts/rstudio-workbench/Chart.yaml index 266f67037..6c0175ba2 100644 --- a/charts/rstudio-workbench/Chart.yaml +++ b/charts/rstudio-workbench/Chart.yaml @@ -1,16 +1,15 @@ name: rstudio-workbench description: Official Helm chart for Posit Workbench -version: 0.11.2 +version: 0.20.0 apiVersion: v2 appVersion: 2026.04.0 -icon: - https://raw.githubusercontent.com/rstudio/helm/main/images/posit-icon-fullcolor.svg -home: https://www.rstudio.com +icon: https://raw.githubusercontent.com/rstudio/helm/main/images/posit-icon-fullcolor.svg +home: https://posit.co sources: - https://github.com/rstudio/helm maintainers: - name: sol-eng - email: docker@rstudio.com + email: docker@posit.co url: https://github.com/sol-eng dependencies: - name: rstudio-library @@ -18,20 +17,30 @@ dependencies: repository: https://helm.rstudio.com annotations: artifacthub.io/images: | - - name: rstudio-workbench - image: rstudio/rstudio-workbench:ubuntu2204-2026.04.0 - - name: r-session-complete - image: rstudio/r-session-complete:ubuntu2204-2026.04.0 + - name: workbench + image: posit/workbench:2026.04.0-ubuntu-24.04 + - name: workbench-session-init + image: posit/workbench-session-init:2026.04.0-ubuntu-24.04 artifacthub.io/license: MIT artifacthub.io/links: | - - name: Docker Images - url: https://github.com/rstudio/rstudio-docker-products - - name: RStudio Community - url: https://community.rstudio.com/c/r-admin/5 - name: About Workbench - url: https://www.rstudio.com/products/workbench/ - - name: About RStudio Team - url: https://www.rstudio.com/products/team/ + url: https://posit.co/products/enterprise/workbench/ + - name: Workbench Documentation + url: https://docs.posit.co/ide/server-pro/ + - name: Posit Helm Documentation + url: https://docs.posit.co/helm + - name: Container Images + url: https://github.com/posit-dev/images-workbench + - name: Posit Community Forum + url: https://forum.posit.co/c/posit-professional-hosted + - name: GitHub Discussions + url: https://github.com/posit-dev/images/discussions + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + artifacthub.io/recommendations: | + - url: https://artifacthub.io/packages/helm/rstudio/rstudio-connect + - url: https://artifacthub.io/packages/helm/rstudio/rstudio-pm + - url: https://artifacthub.io/packages/helm/rstudio/posit-chronicle keywords: - data science - machine learning @@ -43,3 +52,4 @@ keywords: - jupyter - vscode - rstudio + - posit diff --git a/charts/rstudio-workbench/NEWS.md b/charts/rstudio-workbench/NEWS.md index 65eb64ba5..0e027dfe2 100644 --- a/charts/rstudio-workbench/NEWS.md +++ b/charts/rstudio-workbench/NEWS.md @@ -1,5 +1,17 @@ # Changelog +## 0.20.0 + +- **BREAKING**: Default images now pull from the `posit/` namespace on Docker Hub + - `image.repository` changed from `rstudio/rstudio-workbench` to `posit/workbench` + - `session.image.repository` changed from `rstudio/workbench-session` to `posit/workbench-session` + - `components.sessionInit.image.repository` changed to `posit/workbench-session-init` + - `components.positron.image.repository` changed to `posit/workbench-positron-init` + - Image tag format changed from `{tagPrefix}{appVersion}` to `{appVersion}-{os}` + - `image.tagPrefix` replaced by `image.os` + - `session.image.tagPrefix` replaced by `session.image.os`, `session.image.rVersion`, `session.image.pythonVersion` + - `versionOverride` no longer affects the session image tag (use `session.image.rVersion`, `session.image.pythonVersion`, `session.image.os` instead) + - Update chart metadata links and branding. ## 0.11.2 diff --git a/charts/rstudio-workbench/README.md b/charts/rstudio-workbench/README.md index c84eb1053..784078580 100644 --- a/charts/rstudio-workbench/README.md +++ b/charts/rstudio-workbench/README.md @@ -1,6 +1,6 @@ # Posit Workbench -![Version: 0.11.2](https://img.shields.io/badge/Version-0.11.2-informational?style=flat-square) ![AppVersion: 2026.04.0](https://img.shields.io/badge/AppVersion-2026.04.0-informational?style=flat-square) +![Version: 0.20.0](https://img.shields.io/badge/Version-0.20.0-informational?style=flat-square) ![AppVersion: 2026.04.0](https://img.shields.io/badge/AppVersion-2026.04.0-informational?style=flat-square) #### _Official Helm chart for Posit Workbench_ @@ -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.11.2: +To install the chart with the release name `my-release` at version 0.20.0: ```{.bash} helm repo add rstudio https://helm.rstudio.com -helm upgrade --install my-release rstudio/rstudio-workbench --version=0.11.2 +helm upgrade --install my-release rstudio/rstudio-workbench --version=0.20.0 ``` To explore other chart versions, look at: @@ -62,7 +62,7 @@ To function, this chart requires the following: * If using load balancing (by setting `replicas > 1`), you need similar storage defined for `sharedStorage` to store shared project configuration. However, you can also configure the product to store its shared data underneath `/home` by setting `config.server.rserver\.conf.server-shared-storage-path=/home/some-shared-dir`. -* A method to join the deployed `rstudio-workbench` container to your auth domain. The default `rstudio/rstudio-workbench` image has `sssd` installed and started by default. +* A method to join the deployed `rstudio-workbench` container to your auth domain. The default `posit/workbench` image has `sssd` installed and started by default. You can include `sssd` configuration in `config.userProvisioning` like so: ```yaml @@ -172,29 +172,32 @@ Alternatively, database passwords may be set during `helm install` with the foll `--set config.secret.'database\.conf'.password=""` +## Upgrade guidance + +### 0.20.0 + +- Chart version 0.20.0 switches default images from `rstudio/` to the `posit/` namespace on Docker Hub (also available at `ghcr.io/posit-dev/`). See the [migration guide](https://docs.posit.co/helm/docs/migrating-to-posit-images.html) for details. +- Image tag format changed from `{tagPrefix}{appVersion}` to `{appVersion}-{os}`. The chart will fail with a clear error if you have `image.tagPrefix` or `session.image.tagPrefix` set. +- Session image tag is now constructed from `session.image.rVersion`, `session.image.pythonVersion`, and `session.image.os` (format: `R{rVersion}-python{pythonVersion}-{os}`). + ## 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. +By default, session pods use the `posit/workbench-session` image (also available +at `ghcr.io/posit-dev/workbench-session`) with an init container +(`posit/workbench-session-init`) that delivers Workbench session components at +pod startup. -### Upgrading from 0.10.x +The session image tag is constructed from three values: `session.image.rVersion`, +`session.image.pythonVersion`, and `session.image.os`. Override +`session.image.tag` to bypass this construction entirely. -Chart defaults require no additional configuration, but the default -`session.image.tag` now pins an explicit R/Python matrix (see `values.yaml`) -because `rstudio/workbench-session` does not publish Workbench-version-shaped -tags. Review the pinned tag against -[hub.docker.com/r/rstudio/workbench-session/tags](https://hub.docker.com/r/rstudio/workbench-session/tags) -during each Workbench upgrade. +### Upgrading from 0.11.x -If you pin `session.image.repository: rstudio/r-session-complete`, also set -`components.enabled: false` to preserve the previous behavior. The -`r-session-complete` tag format (``) still works there. +If you use default values, no action is needed. If you customized session images: -If you adopt the init-container pattern with a custom session image, confirm -that the image does not already include Workbench session components (only -language runtimes, system tools, and similar dependencies). Otherwise, the init -container repeats work that the image already performs. +- Replace `session.image.tagPrefix` with `session.image.os`, `session.image.rVersion`, and `session.image.pythonVersion` +- Replace `session.image.repository: rstudio/workbench-session` with `posit/workbench-session` +- If you pinned `session.image.tag` to an old-format string (e.g., `ubuntu2204-r4.5.2_4.4.3-py3.13.9_3.12.11`), verify that tag exists in the `posit/workbench-session` repository or update to the new format For platform-level upgrade steps, see the [Posit Workbench administrator guide](https://docs.posit.co/ide/server-pro/). @@ -632,12 +635,12 @@ 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 | object | `{"enabled":true,"positron":{"image":{"repository":"posit/workbench-positron-init","tag":""},"version":""},"sessionInit":{"image":{"repository":"posit/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.repository | string | `"posit/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.repository | string | `"posit/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' | @@ -682,9 +685,9 @@ Use of [Sealed secrets](https://github.com/bitnami-labs/sealed-secrets) disables | homeStorage.volumeName | string | `""` | the volumeName passed along to the persistentVolumeClaim. Optional | | image.imagePullPolicy | string | `"IfNotPresent"` | the imagePullPolicy for the main pod image | | image.imagePullSecrets | list | `[]` | an array of kubernetes secrets for pulling the main pod image from private registries | -| image.repository | string | `"rstudio/rstudio-workbench"` | the repository to use for the main pod image | +| 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 | +| image.repository | string | `"posit/workbench"` | the repository to use for the main pod image | | image.tag | string | `""` | Overrides the image tag whose default is the chart appVersion. | -| image.tagPrefix | string | `"ubuntu2204-"` | A tag prefix for the server image (common selection: ubuntu2204-). Only used if tag is not defined | | ingress.annotations | object | `{}` | | | ingress.enabled | bool | `false` | | | ingress.hosts | string | `nil` | | @@ -767,9 +770,11 @@ 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/workbench-session"` | The repository to use for the session image | -| session.image.tag | string | `"ubuntu2204-r4.5.2_4.4.3-py3.13.9_3.12.11"` | A tag override for the session image. Pinned to an explicit R/Python matrix because `rstudio/workbench-session` publishes tags by language runtime version, not by Workbench release (unlike `rstudio/r-session-complete`). Pick a published tag from https://hub.docker.com/r/rstudio/workbench-session/tags. | -| session.image.tagPrefix | string | `"ubuntu2204-"` | A tag prefix for session images (common selections: ubuntu2204-). Only used if tag is not defined. The `rstudio/workbench-session` default repository does not publish tags in `{{ tagPrefix }}{{ appVersion }}` form — see the pinned tag below — so `tagPrefix` is effectively unused for the default session image. | +| 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 | +| session.image.pythonVersion | string | `"3.14.3"` | The Python version for the session image tag. Only used if tag is not defined | +| session.image.rVersion | string | `"4.5.2"` | The R version for the session image tag. Only used if tag is not defined | +| session.image.repository | string | `"posit/workbench-session"` | The repository to use for the session image | +| session.image.tag | string | `""` | A tag override for the session image. When empty, the chart computes the tag as `R{{ rVersion }}-python{{ pythonVersion }}-{{ os }}` | | 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 | @@ -793,7 +798,7 @@ Use of [Sealed secrets](https://github.com/bitnami-labs/sealed-secrets) disables | userPassword.existingSecret | string | `""` | Existing Secret for userPassword. Will take precedence over `userPassword.value`. Key: 'password' | | userPassword.value | string | `"rstudio"` | userPassword determines the password of the created user. Will only be used if `userPassword.existingSecret` is not set. | | userUid | string | `"10000"` | userUid determines the UID of the created user | -| versionOverride | string | `""` | A Workbench version to override the "tag" for the RStudio Workbench image and the session images. Necessary until https://github.com/helm/helm/issues/8194 | +| versionOverride | string | `""` | A Workbench version to override the "tag" for the server image and session-init container. Does not affect the session image tag, which is controlled by session.image.rVersion, session.image.pythonVersion, and session.image.os. Necessary until https://github.com/helm/helm/issues/8194 | | xdgConfigDirs | string | `"/mnt/dynamic:/mnt/session-configmap:/mnt/secret-configmap:/mnt/configmap:/mnt/load-balancer/"` | The XDG config dirs (directories where configuration will be read from). Do not change without good reason. | | xdgConfigDirsExtra | list | `[]` | A list of additional XDG config dir paths | diff --git a/charts/rstudio-workbench/README.md.gotmpl b/charts/rstudio-workbench/README.md.gotmpl index 36dbf5f2e..df7239fb9 100644 --- a/charts/rstudio-workbench/README.md.gotmpl +++ b/charts/rstudio-workbench/README.md.gotmpl @@ -33,7 +33,7 @@ To function, this chart requires the following: * If using load balancing (by setting `replicas > 1`), you need similar storage defined for `sharedStorage` to store shared project configuration. However, you can also configure the product to store its shared data underneath `/home` by setting `config.server.rserver\.conf.server-shared-storage-path=/home/some-shared-dir`. -* A method to join the deployed `rstudio-workbench` container to your auth domain. The default `rstudio/rstudio-workbench` image has `sssd` installed and started by default. +* A method to join the deployed `rstudio-workbench` container to your auth domain. The default `posit/workbench` image has `sssd` installed and started by default. You can include `sssd` configuration in `config.userProvisioning` like so: ```yaml @@ -118,29 +118,32 @@ Alternatively, database passwords may be set during `helm install` with the foll `--set config.secret.'database\.conf'.password=""` +## Upgrade guidance + +### 0.20.0 + +- Chart version 0.20.0 switches default images from `rstudio/` to the `posit/` namespace on Docker Hub (also available at `ghcr.io/posit-dev/`). See the [migration guide](https://docs.posit.co/helm/docs/migrating-to-posit-images.html) for details. +- Image tag format changed from `{tagPrefix}{appVersion}` to `{appVersion}-{os}`. The chart will fail with a clear error if you have `image.tagPrefix` or `session.image.tagPrefix` set. +- Session image tag is now constructed from `session.image.rVersion`, `session.image.pythonVersion`, and `session.image.os` (format: `R{rVersion}-python{pythonVersion}-{os}`). + ## 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. +By default, session pods use the `posit/workbench-session` image (also available +at `ghcr.io/posit-dev/workbench-session`) with an init container +(`posit/workbench-session-init`) that delivers Workbench session components at +pod startup. -### Upgrading from 0.10.x +The session image tag is constructed from three values: `session.image.rVersion`, +`session.image.pythonVersion`, and `session.image.os`. Override +`session.image.tag` to bypass this construction entirely. -Chart defaults require no additional configuration, but the default -`session.image.tag` now pins an explicit R/Python matrix (see `values.yaml`) -because `rstudio/workbench-session` does not publish Workbench-version-shaped -tags. Review the pinned tag against -[hub.docker.com/r/rstudio/workbench-session/tags](https://hub.docker.com/r/rstudio/workbench-session/tags) -during each Workbench upgrade. +### Upgrading from 0.11.x -If you pin `session.image.repository: rstudio/r-session-complete`, also set -`components.enabled: false` to preserve the previous behavior. The -`r-session-complete` tag format (``) still works there. +If you use default values, no action is needed. If you customized session images: -If you adopt the init-container pattern with a custom session image, confirm -that the image does not already include Workbench session components (only -language runtimes, system tools, and similar dependencies). Otherwise, the init -container repeats work that the image already performs. +- Replace `session.image.tagPrefix` with `session.image.os`, `session.image.rVersion`, and `session.image.pythonVersion` +- Replace `session.image.repository: rstudio/workbench-session` with `posit/workbench-session` +- If you pinned `session.image.tag` to an old-format string (e.g., `ubuntu2204-r4.5.2_4.4.3-py3.13.9_3.12.11`), verify that tag exists in the `posit/workbench-session` repository or update to the new format For platform-level upgrade steps, see the [Posit Workbench administrator guide](https://docs.posit.co/ide/server-pro/). diff --git a/charts/rstudio-workbench/templates/NOTES.txt b/charts/rstudio-workbench/templates/NOTES.txt index cfd1c0a64..d8a21ee1a 100644 --- a/charts/rstudio-workbench/templates/NOTES.txt +++ b/charts/rstudio-workbench/templates/NOTES.txt @@ -53,8 +53,16 @@ Please consider removing this configuration value. {{- fail "\n\n`serviceAccountName` is no longer used. Use `rbac.serviceAccount.name` instead"}} {{- end }} +{{- if .Values.image.tagPrefix }} + {{- fail "\n\n`image.tagPrefix` has been removed. Use `image.os` instead (e.g. `ubuntu-24.04`). The image tag format is now `{version}-{os}`." }} +{{- end }} + +{{- if .Values.session.image.tagPrefix }} + {{- fail "\n\n`session.image.tagPrefix` has been removed. Use `session.image.os`, `session.image.rVersion`, and `session.image.pythonVersion` instead. The session image tag format is now `R{rVersion}-python{pythonVersion}-{os}`." }} +{{- end }} + {{- if and .Values.components.enabled (eq .Values.session.image.repository "rstudio/r-session-complete") }} -{{ print "\n\nWARNING: `components.enabled=true` is combined with `session.image.repository: rstudio/r-session-complete`. The init containers configured by `components.enabled` deliver session components that are already baked into `r-session-complete`, so this combination is likely unintended.\n\nEither:\n - Keep the new default: `session.image.repository: rstudio/workbench-session` (with `components.enabled: true`), or\n - Restore the previous behavior: set `components.enabled: false` along with `session.image.repository: rstudio/r-session-complete`." }} +{{ print "\n\nWARNING: `components.enabled=true` is combined with `session.image.repository: rstudio/r-session-complete`. The init containers configured by `components.enabled` deliver session components that are already baked into `r-session-complete`, so this combination is likely unintended.\n\nEither:\n - Keep the new default: `session.image.repository: posit/workbench-session` (with `components.enabled: true`), or\n - Restore the previous behavior: set `components.enabled: false` along with `session.image.repository: rstudio/r-session-complete`." }} {{- end }} {{- if and (hasKey (get .Values.config.server "rserver.conf") "monitor-graphite-enabled") (not .Values.prometheus.legacy) }} diff --git a/charts/rstudio-workbench/templates/_helpers.tpl b/charts/rstudio-workbench/templates/_helpers.tpl index 26abe95db..4973da6c4 100644 --- a/charts/rstudio-workbench/templates/_helpers.tpl +++ b/charts/rstudio-workbench/templates/_helpers.tpl @@ -29,7 +29,7 @@ If release name contains chart name it will be used as a full name. containers: - name: rstudio {{- $defaultVersion := .Values.versionOverride | default $.Chart.AppVersion }} - {{- $imageTag := .Values.image.tag | default (printf "%s%s" .Values.image.tagPrefix $defaultVersion )}} + {{- $imageTag := .Values.image.tag | default (printf "%s-%s" $defaultVersion .Values.image.os )}} image: "{{ .Values.image.repository }}:{{ $imageTag }}" {{- with .Values.pod.lifecycle }} lifecycle: diff --git a/charts/rstudio-workbench/templates/configmap-general.yaml b/charts/rstudio-workbench/templates/configmap-general.yaml index 6757a8a6a..ef1ef5743 100644 --- a/charts/rstudio-workbench/templates/configmap-general.yaml +++ b/charts/rstudio-workbench/templates/configmap-general.yaml @@ -1,6 +1,6 @@ {{- /* Define the default values that will be merged over */}} {{- $defaultVersion := .Values.versionOverride | default $.Chart.AppVersion }} -{{- $sessionTag := .Values.session.image.tag | default (printf "%s%s" .Values.session.image.tagPrefix $defaultVersion ) }} +{{- $sessionTag := .Values.session.image.tag | default (printf "R%s-python%s-%s" .Values.session.image.rVersion .Values.session.image.pythonVersion .Values.session.image.os ) }} {{- $defaultImages := list (printf "%s:%s" .Values.session.image.repository $sessionTag) }} {{- $defaultOverrides := list }} {{- $sessionTemplate := deepCopy .Values.launcher.templateValues }} diff --git a/charts/rstudio-workbench/tests/configmap_test.yaml b/charts/rstudio-workbench/tests/configmap_test.yaml index cbeae3844..bfdc81f48 100644 --- a/charts/rstudio-workbench/tests/configmap_test.yaml +++ b/charts/rstudio-workbench/tests/configmap_test.yaml @@ -15,7 +15,7 @@ tests: pattern: "launcher-sessions-auto-update=1" - matchRegex: path: data["rserver.conf"] - pattern: "launcher-sessions-init-container-image-name=rstudio/workbench-session-init" + pattern: "launcher-sessions-init-container-image-name=posit/workbench-session-init" - matchRegex: path: data["rserver.conf"] pattern: "launcher-sessions-init-container-image-tag=\\d+\\.\\d+\\.\\d+" @@ -26,7 +26,7 @@ tests: asserts: - matchRegex: path: data["launcher.kubernetes.profiles.conf"] - pattern: "default-container-image=rstudio/workbench-session:" + pattern: "default-container-image=posit/workbench-session:" # -- Components disabled (classic mode) - it: should not include session-init settings when components are disabled @@ -121,7 +121,7 @@ tests: pattern: "launcher-positron-init-container-enabled=1" - matchRegex: path: data["rserver.conf"] - pattern: "launcher-positron-init-container-image-name=rstudio/workbench-positron-init" + pattern: "launcher-positron-init-container-image-name=posit/workbench-positron-init" - matchRegex: path: data["rserver.conf"] pattern: "launcher-positron-init-container-image-tag=2026.03.0-213" diff --git a/charts/rstudio-workbench/tests/deployment_test.yaml b/charts/rstudio-workbench/tests/deployment_test.yaml index 1b9c9c09c..876e2b817 100644 --- a/charts/rstudio-workbench/tests/deployment_test.yaml +++ b/charts/rstudio-workbench/tests/deployment_test.yaml @@ -741,7 +741,7 @@ tests: path: 'spec.template.spec.initContainers[?(@.name=="positron-init")]' - equal: path: 'spec.template.spec.initContainers[?(@.name=="positron-init")].image' - value: "rstudio/workbench-positron-init:2026.03.0-213" + value: "posit/workbench-positron-init:2026.03.0-213" - equal: path: 'spec.template.spec.initContainers[?(@.name=="positron-init")].env[0].name' value: "PWB_POSITRON_TARGET" @@ -777,7 +777,7 @@ tests: asserts: - equal: path: 'spec.template.spec.initContainers[?(@.name=="positron-init")].image' - value: "rstudio/workbench-positron-init:custom-build-abc123" + value: "posit/workbench-positron-init:custom-build-abc123" - it: should use custom positron image repository in init container template: deployment.yaml diff --git a/charts/rstudio-workbench/tests/notes_test.yaml b/charts/rstudio-workbench/tests/notes_test.yaml index bb8f4dfcb..0175f9a5b 100644 --- a/charts/rstudio-workbench/tests/notes_test.yaml +++ b/charts/rstudio-workbench/tests/notes_test.yaml @@ -19,7 +19,7 @@ tests: enabled: true session: image: - repository: "rstudio/workbench-session" + repository: "posit/workbench-session" asserts: - notMatchRegexRaw: pattern: "WARNING.*components\\.enabled=true.*r-session-complete" @@ -34,3 +34,20 @@ tests: asserts: - notMatchRegexRaw: pattern: "WARNING.*components\\.enabled=true.*r-session-complete" + + - it: should fail when image.tagPrefix is set + set: + image: + tagPrefix: "ubuntu2204-" + asserts: + - failedTemplate: + errorPattern: "image.tagPrefix.*has been removed.*image.os" + + - it: should fail when session.image.tagPrefix is set + set: + session: + image: + tagPrefix: "ubuntu2204-" + asserts: + - failedTemplate: + errorPattern: "session.image.tagPrefix.*has been removed.*session.image.os" diff --git a/charts/rstudio-workbench/values.yaml b/charts/rstudio-workbench/values.yaml index 42984531f..c7830ff6d 100644 --- a/charts/rstudio-workbench/values.yaml +++ b/charts/rstudio-workbench/values.yaml @@ -3,7 +3,7 @@ nameOverride: "" # -- the full name of the release (can be overridden) fullnameOverride: "" -# -- A Workbench version to override the "tag" for the RStudio Workbench image and the session images. Necessary until https://github.com/helm/helm/issues/8194 +# -- A Workbench version to override the "tag" for the server image and session-init container. Does not affect the session image tag, which is controlled by session.image.rVersion, session.image.pythonVersion, and session.image.os. Necessary until https://github.com/helm/helm/issues/8194 versionOverride: "" # -- Settings for enabling server diagnostics @@ -21,17 +21,16 @@ session: # -- The path to mount the sessionSecret (from `config.sessionSecret`) onto the server and session pods defaultSecretMountPath: /mnt/session-secret/ image: - # -- A tag prefix for session images (common selections: ubuntu2204-). Only used if tag is not defined. - # The `rstudio/workbench-session` default repository does not publish tags in `{{ tagPrefix }}{{ appVersion }}` - # form — see the pinned tag below — so `tagPrefix` is effectively unused for the default session image. - tagPrefix: ubuntu2204- + # -- The OS version for the session image tag (e.g. ubuntu-24.04, ubuntu-22.04). Only used if tag is not defined + os: "ubuntu-24.04" + # -- The R version for the session image tag. Only used if tag is not defined + rVersion: "4.5.2" + # -- The Python version for the session image tag. Only used if tag is not defined + pythonVersion: "3.14.3" # -- The repository to use for the session image - repository: "rstudio/workbench-session" - # -- A tag override for the session image. Pinned to an explicit R/Python matrix because - # `rstudio/workbench-session` publishes tags by language runtime version, not by Workbench release - # (unlike `rstudio/r-session-complete`). Pick a published tag from - # https://hub.docker.com/r/rstudio/workbench-session/tags. - tag: "ubuntu2204-r4.5.2_4.4.3-py3.13.9_3.12.11" + repository: "posit/workbench-session" + # -- A tag override for the session image. When empty, the chart computes the tag as `R{{ rVersion }}-python{{ pythonVersion }}-{{ os }}` + 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. @@ -44,7 +43,7 @@ components: sessionInit: image: # -- The repository for the session init container image - repository: "rstudio/workbench-session-init" + repository: "posit/workbench-session-init" # -- A tag override for the session init container. Default tag is the chart appVersion (or versionOverride) tag: "" positron: @@ -54,7 +53,7 @@ components: version: "" image: # -- The image repository for the Positron init container - repository: "rstudio/workbench-positron-init" + repository: "posit/workbench-positron-init" # -- A tag override for the Positron init container image. Defaults to the positron version tag: "" @@ -229,9 +228,9 @@ homeStorage: image: # -- the repository to use for the main pod image - repository: rstudio/rstudio-workbench - # -- A tag prefix for the server image (common selection: ubuntu2204-). Only used if tag is not defined - tagPrefix: ubuntu2204- + repository: posit/workbench + # -- The OS version for the image tag (e.g. ubuntu-24.04, ubuntu-22.04). Only used if tag is not defined + os: "ubuntu-24.04" # -- Overrides the image tag whose default is the chart appVersion. tag: "" # -- the imagePullPolicy for the main pod image diff --git a/docs/migrating-to-posit-images.qmd b/docs/migrating-to-posit-images.qmd new file mode 100644 index 000000000..41fb504e8 --- /dev/null +++ b/docs/migrating-to-posit-images.qmd @@ -0,0 +1,216 @@ +--- +category: "Upgrade" +--- + +# Migrating to Posit images + +Chart version 0.20.0 replaces the `rstudio/` and `ghcr.io/rstudio/` default images with new images under `posit/` on [Docker Hub](https://hub.docker.com/u/posit) and `ghcr.io/posit-dev/` on [GitHub Container Registry](https://github.com/orgs/posit-dev/packages) (GHCR). + +Docker Hub applies [rate limits](https://docs.docker.com/docker-hub/usage/) to unauthenticated and free-tier pulls. For production clusters, consider using `ghcr.io/posit-dev/` or a pull-through cache to avoid throttling. + +:::{.callout-important} +Breaking change: default tags moved from `{tagPrefix}{appVersion}` to `{appVersion}-{os}`, following the `{version}-{variant}` convention used by official Docker images. Update image references before upgrading. +::: + +The default OS changed from Ubuntu 22.04 to Ubuntu 24.04 across all products. The new images bundle a single R version and a single Python version instead of two of each. Set `image.os` to `ubuntu-22.04` if you need to stay on the previous OS. + +If you never set `image.repository`, `image.tagPrefix`, or `image.tag`, you do not need to change anything. + +If you mirror images to a private registry, update the repository path. Make sure your mirror tags follow the new `{appVersion}-{os}` format, or pin `image.tag` to an exact value. + +## Posit Connect + +Images are renamed as follows: + +- `ghcr.io/rstudio/rstudio-connect` → `posit/connect` +- `ghcr.io/rstudio/content-base` / `content-pro` → `posit/connect-content` +- `ghcr.io/rstudio/rstudio-connect-content-init` → `posit/connect-content-init` + +See the [images-connect](https://github.com/posit-dev/images-connect) repository for image-specific migration details. + +```{.yaml filename="Old default"} +image: + repository: "ghcr.io/rstudio/rstudio-connect" + tagPrefix: ubuntu2204- +``` + +```{.yaml filename="New default"} +image: + repository: "posit/connect" + os: "ubuntu-24.04" +``` + +These values can be configured as follows: + +- `image.os`: OS variant (default: `ubuntu-24.04`) +- `image.tag`: full tag override, bypasses `os` and `appVersion` +- `image.repository`: use `ghcr.io/posit-dev/connect` for GHCR + +### Removed values + +These values cause a hard error if set: + +- `image.tagPrefix`: use `image.os` instead +- `launcher.defaultInitContainer.tagPrefix`: use `launcher.defaultInitContainer.os` instead +- `backends.kubernetes.defaultInitContainer.tagPrefix`: use `backends.kubernetes.defaultInitContainer.os` instead +- `launcher.customRuntimeYaml`: use [`executionEnvironments`](../charts/rstudio-connect/README.md#execution-environments) instead +- `launcher.additionalRuntimeImages`: use [`executionEnvironments`](../charts/rstudio-connect/README.md#execution-environments) instead + +:::{.callout-note} +The chart defaults for `config.Python.Executable` and `config.Quarto.Executable` changed to match the new server image. If you override these values, verify the paths exist in your image. + +Python: `/opt/python/3.12.11/bin/python` and `/opt/python/3.13.9/bin/python` → `/opt/python/3.14.4/bin/python` + +Quarto: `/opt/quarto/1.8.25/bin/quarto` → `/usr/local/bin/quarto` +::: + +### Connect Content images + +Content runtime images moved from `ghcr.io/rstudio/content-base` and `content-pro` to a single `posit/connect-content` repository. The base and pro variants are now differentiated by tag suffix rather than separate repos: + +- Base: `posit/connect-content:R4.6.0-python3.14.4-ubuntu-24.04` +- Pro: `posit/connect-content:R4.6.0-python3.14.4-ubuntu-24.04-pro` + +Configure content images through the [`executionEnvironments`](../charts/rstudio-connect/README.md#execution-environments) value: + +```{.yaml filename="values.yaml"} +executionEnvironments: + - name: posit/connect-content:R4.6.0-python3.14.4-ubuntu-24.04 + title: "R 4.6.0 / Python 3.14.4" + matching: any + python: + installations: + - version: "3.14.4" + path: /opt/python/3.14.4/bin/python3 + r: + installations: + - version: "4.6.0" + path: /opt/R/4.6.0/bin/R +``` + +For available tags and R/Python combinations, see the [images-connect](https://github.com/posit-dev/images-connect) repository. + +## Posit Workbench + +Images are renamed as follows: + +- `rstudio/rstudio-workbench` → `posit/workbench` +- `rstudio/r-session-complete` → `posit/workbench-session` +- `rstudio/workbench-session` → `posit/workbench-session` +- `rstudio/workbench-session-init` → `posit/workbench-session-init` +- `rstudio/workbench-positron-init` → `posit/workbench-positron-init` + +See the [images-workbench](https://github.com/posit-dev/images-workbench) repository for image-specific migration details. + +### Server image + +```{.yaml filename="Old default"} +image: + repository: "rstudio/rstudio-workbench" + tagPrefix: ubuntu2204- +``` + +```{.yaml filename="New default"} +image: + repository: "posit/workbench" + os: "ubuntu-24.04" +``` + +These values can be configured as follows: + +- `image.os`: OS variant (default: `ubuntu-24.04`) +- `image.tag`: full tag override, bypasses `os` and `appVersion` +- `image.repository`: use `ghcr.io/posit-dev/workbench` for GHCR + +### Workbench Session image + +Session image tags now use three separate values instead of a single pinned tag string: + +```{.yaml filename="Old default"} +session: + image: + repository: "rstudio/workbench-session" + tagPrefix: ubuntu2204- +``` + +```{.yaml filename="New default"} +session: + image: + repository: "posit/workbench-session" + os: "ubuntu-24.04" + rVersion: "4.5.2" + pythonVersion: "3.14.3" +``` + +These values can be configured as follows: + +- `session.image.rVersion`: R version (default: `4.5.2`) +- `session.image.pythonVersion`: Python version (default: `3.14.3`) +- `session.image.os`: OS variant (default: `ubuntu-24.04`) +- `session.image.tag`: full tag override, bypasses all three + +### Removed values + +These values cause a hard error if set: + +- `image.tagPrefix`: use `image.os` instead +- `session.image.tagPrefix`: use `session.image.os`, `session.image.rVersion`, and `session.image.pythonVersion` instead + +## Posit Package Manager + +Images are renamed as follows: + +- `rstudio/rstudio-package-manager` → `posit/package-manager` + +See the [images-package-manager](https://github.com/posit-dev/images-package-manager) repository for image-specific migration details. + +```{.yaml filename="Old default"} +image: + repository: "rstudio/rstudio-package-manager" + tagPrefix: ubuntu2204- +``` + +```{.yaml filename="New default"} +image: + repository: "posit/package-manager" + os: "ubuntu-24.04" +``` + +These values can be configured as follows: + +- `image.os`: OS variant (default: `ubuntu-24.04`) +- `image.tag`: full tag override, bypasses `os` and `appVersion` +- `image.repository`: use `ghcr.io/posit-dev/package-manager` for GHCR + +### Removed values + +These values cause a hard error if set: + +- `image.tagPrefix`: use `image.os` instead + +## Verifying the upgrade + +Run `helm diff upgrade` before applying to preview the rendered manifests: + +```{.bash filename="Terminal"} +helm diff upgrade my-release rstudio/ \ + --version \ + -f my-values.yaml +``` + +Check that each `image:` reference resolves to a real tag: + +All products: + +- Server pod: `posit/:{appVersion}-{os}` + +Connect: + +- Content runtime: `posit/connect-content:R{rVersion}-python{pythonVersion}-{os}` +- Content init container: `posit/connect-content-init:{appVersion}-{os}` + +Workbench: + +- Session image: `posit/workbench-session:R{rVersion}-python{pythonVersion}-{os}` +- Session init container: `posit/workbench-session-init:{appVersion}-{os}` +- Positron init container: `posit/workbench-positron-init:{positronVersion}` diff --git a/index.qmd b/index.qmd index bc20cc3b2..c58919984 100644 --- a/index.qmd +++ b/index.qmd @@ -5,6 +5,18 @@ title: Posit Helm Charts [![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/rstudio)](https://artifacthub.io/packages/search?repo=rstudio) [![GitHub license](https://img.shields.io/github/license/rstudio/helm.svg)](https://github.com/rstudio/helm/blob/main/LICENSE) +:::{.callout-important title="Breaking changes in chart version 0.20.0"} + +- Default images moved from `rstudio/` and `ghcr.io/rstudio/` to + `posit/` on [Docker Hub](https://hub.docker.com/u/posit) and + `ghcr.io/posit-dev/` on [GitHub Container Registry (GHCR)](https://github.com/orgs/posit-dev/packages). +- The default tag format changed from `{tagPrefix}{appVersion}` to + `{appVersion}-{os}`. + +See the [image migration guide](docs/migrating-to-posit-images.qmd) for details. + +::: + ## Usage 1. Install [Helm](https://helm.sh). Please refer to the [Helm documentation](https://helm.sh/docs/) for more information on getting started.