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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ You can build Open Container Initiative (OCI) container images from the definiti
Each Containerfile uses the root of the repository as the build context.

```shell
PWB_VERSION="2026.04"
PWB_VERSION="2026.05"

# Build the standard Workbench image using docker
docker buildx build \
Expand Down
20 changes: 18 additions & 2 deletions bakery.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,20 @@ images:
namespace: "posit-dev"
repository: "workbench-preview"
versions:
- name: 2026.05.0+218.pro1
subpath: '2026.05'
latest: true
os:
- name: Ubuntu 22.04
- name: Ubuntu 24.04
primary: true
dependencies:
- dependency: R
version: 4.6.0
- dependency: python
version: 3.14.5
- name: 2026.04.0+526.pro2
subpath: '2026.04'
latest: true
os:
- name: Ubuntu 22.04
- name: Ubuntu 24.04
Expand Down Expand Up @@ -122,9 +133,14 @@ images:
namespace: "posit-dev"
repository: "workbench-session-init-preview"
versions:
- name: 2026.05.0+218.pro1
subpath: '2026.05'
latest: true
os:
- name: Ubuntu 24.04
primary: true
- name: 2026.04.0+526.pro2
subpath: '2026.04'
latest: true
os:
- name: Ubuntu 24.04
primary: true
Expand Down
40 changes: 40 additions & 0 deletions workbench-session-init/2026.05/Containerfile.ubuntu2404
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
FROM docker.io/library/ubuntu:24.04 AS builder

ARG DEBIAN_FRONTEND=noninteractive
ARG BUILDARCH
ARG TARGETARCH=${BUILDARCH}

SHELL ["/bin/bash", "-euo", "pipefail", "-c"]

### Initialize PTI in container ###
RUN echo 'Acquire::Retries "3"; Acquire::http::Timeout "30"; Acquire::https::Timeout "30";' > /etc/apt/apt.conf.d/99-retries && \
apt-get update -yqq --fix-missing && \
apt-get upgrade -yqq && \
apt-get dist-upgrade -yqq && \
apt-get autoremove -yqq --purge && \
apt-get install -yqq --no-install-recommends \
curl \
ca-certificates \
gnupg \
tar && \
bash -c "$(curl -1fsSL 'https://dl.posit.co/public/pro/setup.deb.sh')" && \
apt-get clean -yqq && \
rm -rf /var/lib/apt/lists/*

# Download the RStudio Workbench session components
RUN case ${TARGETARCH} in \
amd64) CDN_ARCH=x86_64 ;; \
arm64) CDN_ARCH=arm64 ;; \
*) echo "Unsupported architecture: ${TARGETARCH}" && exit 1 ;; \
esac && \
mkdir -p /pwb-staging && \
curl -fsSL -o /pwb-staging/rsp-session-multi-linux.tar.gz "https://s3.amazonaws.com/rstudio-ide-build/session/multi/$CDN_ARCH/rsp-session-multi-linux-2026.05.0-218.pro1-$CDN_ARCH.tar.gz" && \
mkdir -p /opt/session-components && \
tar -C /opt/session-components -xpf /pwb-staging/rsp-session-multi-linux.tar.gz && \
chmod 755 /opt/session-components && \
rm -rf /pwb-staging

FROM docker.io/library/ubuntu:24.04
LABEL org.opencontainers.image.base.name="docker.io/library/ubuntu:24.04"
COPY --from=builder /opt/session-components /opt/session-components
CMD ["/opt/session-components/bin/session-init"]
105 changes: 105 additions & 0 deletions workbench-session-init/2026.05/test/goss.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
file:
/opt/session-components/:
exists: true
mode: "0755"
filetype: directory
/opt/session-components/bin/session-init:
exists: true
filetype: file
mode: "0755"
/opt/session-components/bin/git-credential-pwb:
exists: true
filetype: file
mode: "0755"
/opt/session-components/bin/jammy:
exists: true
filetype: directory
mode: "0755"
/opt/session-components/bin/noble:
exists: true
filetype: directory
mode: "0755"
/opt/session-components/bin/opensuse15:
exists: true
filetype: directory
mode: "0755"
/opt/session-components/bin/postback:
exists: true
filetype: directory
mode: "0755"
/opt/session-components/bin/pwb-supervisor:
exists: true
filetype: file
mode: "0755"
/opt/session-components/bin/quarto:
exists: true
filetype: directory
mode: "0755"
/opt/session-components/bin/r-ldpath:
exists: true
filetype: file
mode: "0755"
/opt/session-components/bin/rhel8:
exists: true
filetype: directory
mode: "0755"
/opt/session-components/bin/rhel9:
exists: true
filetype: directory
mode: "0755"
/opt/session-components/bin/shared-run:
exists: true
filetype: file
mode: "0755"
/opt/session-components/R:
exists: true
filetype: directory
mode: "0755"
/opt/session-components/resources:
exists: true
filetype: directory
mode: "0755"
/opt/session-components/www:
exists: true
filetype: directory
mode: "0755"
/opt/session-components/www-symbolmaps:
exists: true
filetype: directory
mode: "0755"
/opt/session-components/bin/jupyter-session-run:
exists: true
filetype: file
mode: "0755"
/opt/session-components/extras:
exists: true
filetype: directory
mode: "0755"
/opt/session-components/bin/positron-server:
exists: true
filetype: directory
mode: "0755"
/opt/session-components/bin/positron-session-run:
exists: true
filetype: file
mode: "0755"
/opt/session-components/bin/rsession-run:
exists: true
filetype: file
mode: "0755"
/opt/session-components/bin/pwb-code-server:
exists: true
filetype: directory
mode: "0755"
/opt/session-components/bin/vscode-session-run:
exists: true
filetype: file
mode: "0755"

command:
session-components-files-other-read:
exec: 'find /opt/session-components -type f -not -perm -004 -print 2>&1 | head -c1 | (! grep -q .)'
exit-status: 0
session-components-dirs-other-rx:
exec: 'find /opt/session-components -type d -not -perm -005 -print 2>&1 | head -c1 | (! grep -q .)'
exit-status: 0
2 changes: 1 addition & 1 deletion workbench-session-init/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ The container starts as `root` so the session container can read the session com
You can pull the session components into a custom session image at build time using a multi-stage build:

```dockerfile
FROM ghcr.io/posit-dev/workbench-session-init:2026.04.0 AS session-init
FROM ghcr.io/posit-dev/workbench-session-init:2026.05.0 AS session-init

FROM your-custom-base
COPY --from=session-init /opt/session-components /opt/session-components
Expand Down
79 changes: 79 additions & 0 deletions workbench/2026.05/Containerfile.ubuntu2204.min
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
FROM docker.io/library/ubuntu:22.04
LABEL org.opencontainers.image.base.name="docker.io/library/ubuntu:22.04"

### ARG declarations ###
ARG DEBIAN_FRONTEND=noninteractive
ARG BUILDARCH
ARG TARGETARCH=${BUILDARCH}
ARG WORKBENCH_VERSION="2026.05.0+218.pro1"
ARG RSTUDIO_INSTALL_NO_LICENSE_INITIALIZATION=1

ENV PWB_STARTUP_DEBUG=0
ENV PWB_LICENSE=""
ENV PWB_LICENSE_SERVER=""
ENV PWB_TESTUSER=""
ENV PWB_TESTUSER_PASSWD=""
ENV PWB_TESTUSER_UID=""
ENV PWB_LAUNCHER=true
ENV PWB_LAUNCHER_TIMEOUT=10
ENV PWB_DIAGNOSTIC_DIR=/var/log/rstudio
ENV PWB_DIAGNOSTIC_ENABLE=false
ENV PWB_EXIT_AFTER_VERIFY=false

### Setup environment ###
RUN echo 'Acquire::Retries "3"; Acquire::http::Timeout "30"; Acquire::https::Timeout "30";' > /etc/apt/apt.conf.d/99-retries && \
apt-get update -yqq --fix-missing && \
apt-get upgrade -yqq && \
apt-get dist-upgrade -yqq && \
apt-get autoremove -yqq --purge && \
apt-get install -yqq --no-install-recommends \
curl \
ca-certificates \
gnupg \
tar && \
bash -c "$(curl -1fsSL 'https://dl.posit.co/public/pro/setup.deb.sh')" && \
apt-get clean -yqq && \
rm -rf /var/lib/apt/lists/*

## Install Apt Packages ###
COPY workbench/2026.05/deps/ubuntu-22.04_packages.txt /tmp/packages.txt
RUN apt-get update -yqq && \
xargs -a /tmp/packages.txt apt-get install -yqq --no-install-recommends && \
apt-get clean -yqq && \
rm -rf /var/lib/apt/lists/*

### Install wait-for-it ###
COPY --chmod=0755 workbench/scripts/wait-for-it.sh /usr/local/bin/wait-for-it.sh

### Install Workbench 2026.05.0+218.pro1 ###
COPY --chmod=0755 workbench/2026.05/scripts/install_workbench.sh /tmp/install_workbench.sh
RUN \
/tmp/install_workbench.sh && \
rm -f /tmp/install_workbench.sh

### Install Quarto to PATH ###
RUN ln -s /lib/rstudio-server/bin/quarto/bin/quarto /usr/local/bin/quarto



### Copy startup scripts ###
COPY --chmod=0775 "workbench/2026.05/scripts/startup.sh" /usr/local/bin/startup.sh
COPY "workbench/2026.05/startup/launcher" /startup/launcher
COPY "workbench/2026.05/startup/base" /startup/base
COPY "workbench/2026.05/startup/supervisord.conf" /etc/supervisor/supervisord.conf
COPY "workbench/2026.05/conf/jupyter/*" "workbench/2026.05/conf/launcher/*" "workbench/2026.05/conf/rstudio/*" "workbench/2026.05/conf/positron/*" "workbench/2026.05/conf/vscode/*" /etc/rstudio

### Configure Workbench ###
RUN mkdir -p /var/lib/rstudio-server/monitor/log \
&& chown -R rstudio-server:rstudio-server /var/lib/rstudio-server/monitor \
&& mkdir -p /startup/custom/ \
&& mkdir -p /startup/user-provisioning/ \
&& printf '\n# allow home directory creation\nsession required pam_mkhomedir.so skel=/etc/skel umask=0077\n' >> /etc/pam.d/common-session \
&& echo "RSPM=https://p3m.dev/cran/__linux__/jammy/latest" > /etc/rstudio/repos.conf \
&& echo "CRAN=https://p3m.dev/cran/__linux__/jammy/latest" >> /etc/rstudio/repos.conf

EXPOSE 8787/tcp
EXPOSE 5559/tcp
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
CMD curl -fsS http://localhost:8787/health-check || exit 1
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"]
Loading
Loading