Add workbench-session std/min variants, expand std optional packages#113
Open
ianpittwood wants to merge 9 commits into
Open
Add workbench-session std/min variants, expand std optional packages#113ianpittwood wants to merge 9 commits into
ianpittwood wants to merge 9 commits into
Conversation
bc2c3fc to
45a6ddb
Compare
- bakery.yaml: add Standard (std, primary) and Minimal (min) variants
to workbench-session, mirroring workbench. Existing tags without a
variant suffix continue to resolve to std.
- workbench-session/template: conditionally COPY and install optional
packages on the std variant only, assert in goss on Standard only,
document the new tag format and variants in the README.
- workbench std + workbench-session std optional package lists:
expand to a curated dev-header + tooling set covering the most-
downloaded CRAN packages and common Python source-build paths.
Templates are grouped with Jinja {# ... -#} annotations explaining
each group; rendered .txt files stay annotation-free until
posit-dev/images-shared#550 lands.
Rationale, exclusion list, and tag examples are documented in the
PR description.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
45a6ddb to
1b7e155
Compare
default-libmysqlclient-dev is a metapackage that on jammy resolves to the real libmysqlclient-dev, which Conflicts: with libmariadb-dev-compat (both provide mysql.h / libmysqlclient). On noble it merely re-pulls the two MariaDB packages we already list explicitly. Keep libmariadb-dev + libmariadb-dev-compat: this matches Posit Connect's documented Ubuntu 24.04 list and the -compat package still provides the mysql.h / libmysqlclient symlinks that mysqlclient (PyPI), RMySQL, and RMariaDB build against. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ssinnott
approved these changes
Jun 4, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #89
Summary
std, primary) and Minimal (min) variants toworkbench-session, matching theworkbenchimage pattern. ExistingR{R}-python{P}-{os}tags continue to resolve to the std variant — variant suffix is opt-in.workbenchandworkbench-sessionto cover the system dependencies of the most-downloaded CRAN packages and the common Python source-build paths.{# … -#}annotations explaining what each cluster of packages supports. Rendered.txtfiles stay annotation-free until posit-dev/images-shared#550 lands the macro change that letsapt-get installskip#lines.Variant change for
workbench-sessionbakery.yamlgains:Both variants ship the same R, Python, Jupyter, Quarto, TinyTeX, and Posit Pro Drivers — the only difference is the optional dev headers / tooling installed on
std. Theminvariant is a starting point for customers who want strict control over which system libraries are present.Tag examples after this change:
R4.5.3-python3.14.4-ubuntu-24.04— std variant (default OS, default variant) — unchangedR4.5.3-python3.14.4-ubuntu-24.04-std— explicit stdR4.5.3-python3.14.4-ubuntu-24.04-min— minimal variantR4.5.3-python3.14.4-min— minimal variant on the default OSThe Helm chart's existing
session.image.tagderivation (R{rVersion}-python{pythonVersion}-{os}) is unchanged — std is primary, so no-suffix tags still resolve to it.Package selection — sources
The expanded optional lists were curated against three authoritative sources, in priority order:
r-hub/r-system-requirementsrules catalog — the same catalog thatpak::pkg_sysreqs()and Posit Package Manager consult.rstudio/rstudio-docker-products/r-session-complete/Dockerfile.ubuntu2204Workbench-specific apt block.What's in the lists
The
workbenchstd optional list grew from 45 → 87 packages on both Ubuntu 24.04 and 22.04. Theworkbench-sessionstd optional list is 78 packages — the same Tier 1 set, minus:sssd,libapparmor1,libedit2,oddjob-mkhomedir) — the session image is the runtime, not the server.python3/python3-dev/python3-venv— the matrix image already ships a uv-managed Python at/opt/python/\$PYTHON_VERSION/that includes the standard library.git,libpq-dev,krb5-user,libuser,libuser1-dev,rrdtool,subversion,xz-utils,ca-certificates,curl).Packages are grouped in the templates by sysreq category. Representative R / Python consumers per group:
Matrix,RcppArmadillo,nloptr,scipy/numpyfrom sourcedata.table,httpuv, Pillow, scipy, lxml from sourcecurl,httr,httr2,openssl, urllib3, cryptography,sodium,plumbercffi/cryptography, source rebuilds of R + Pythonxml2,stringi, lxml, arrowRPostgres,RMariaDB,odbc,DBI, psycopg2, mysqlclient, pyodbcgert,git2r,renvfrom GitHub,pip git+installs, SSH transportssf,terra,stars, geopandas, rasterio, pyprojragg,systemfonts,textshaping,magick,Cairo, Pillow, matplotlibigraph(GLPK),gmp,Rmpfr,gsl,RcppGSLV8,RProtoBuf,arrow,httpuvsource-buildpdftools, pdfminer.six, pdf2image,magickPDF rasterizationrgl,plotly3D, configure-script probestcltk, PythontkinterrJava,RJDBC,xlsx, JPype1 (requiresR CMD javareconfafter install)mongolite, pymongo GSSAPI, python-ldap, requests-kerberosNotable renames
libmysqlclient-dev→default-libmysqlclient-dev+libmariadb-dev+libmariadb-dev-compat, matching Posit's documented Connect 24.04 list. The-compatpackage provides themysql.hsymlink so code expecting MySQL Connector headers keeps building.libfreetype-dev→libfreetype6-devfor parity with Posit's docs across both OSes.Intentional exclusions
Following the analysis's "Tier 2 / borderline" guidance, the following are intentionally left out — they're available for customers to add via extension Dockerfiles, but bundling them by default would inflate image size and CVE surface for a relatively narrow audience:
texlive— Quarto's TinyTeX is already installed and covers the same paths.tesseract-ocr/libtesseract-dev— OCR is niche; ~22 MB and pulls 5 dependencies.ffmpeg— ~80 MB; only needed forimageio-ffmpeg,pyav,manim.graphviz/graphviz-dev—DiagrammeR/pygraphvizusers can layer on; pulls a chain of X libs.libhdf5-dev/libnetcdf-dev— Bioconductor /h5py/xarrayheavy users only.jags—rjags/R2jagsis statistical-modeling-niche; known CVE source.libreoffice-core/unoconv— huge for anofficercorner-case.libopencv-dev,libavfilter-dev—opencv-pythonships wheels.nodejs/npm— Quarto bundles Node;libnode-devalready covers V8.libhiredis-dev,librdkafka-dev— Redis / Kafka clients are ecosystem-specific.freetds-dev— MS SQL via FreeTDS is niche; the Posit Pro Drivers stack already covers SQL Server over ODBC.libtool,pkgconf— pulled transitively when needed bypkg-config/autoconf.texinfo— modernRd2pdfflow goes through Quarto / TinyTeX.Files touched
bakery.yaml— newworkbench-sessionvariants block.workbench-session/template/Containerfile.ubuntu{22,24}04.jinja2— conditionally COPY+install optional packages on std only.workbench-session/template/test/goss.yaml.jinja2— asserts optional packages only whenIMAGE_VARIANT == \"Standard\".workbench-session/template/deps/ubuntu-{22,24}.04_optional_packages.txt.jinja2— new files (std-only).workbench/template/deps/ubuntu-{22,24}.04_optional_packages.txt.jinja2— expanded with the same grouped / annotated structure.workbench-session/README.md— documents the new variants and tag format.workbench/{2025.09,2026.01,2026.04}/deps/ubuntu-*_optional_packages.txtandworkbench-session/matrix/...— re-rendered from templates bybakery update files.Bakery file-update note
bakery update filesalso re-renders other Containerfiles in the repo that have drifted from their templates (likely from older bakery versions or template tweaks that landed without a re-render). Those unrelated drifts were reverted by hand to keep this PR focused on the intended scope. A follow-up cleanup PR can take care of those.The
compass_artifact_…_text_markdown.mdresearch note in the repo root is intentionally not committed — it can be removed locally.Test plan
session.yml(matrix builds for both std and min variants on both OSes).production.yml(workbench std installs the expanded optional list cleanly).bakery run dgoss --image-name workbench-sessionpasses on both std (asserts new optional packages installed) and min (does not).bakery run dgoss --image-name workbenchpasses on std with the expanded list.apt-cache policy libgdal-dev libabsl-dev default-libmysqlclient-dev libmariadb-dev-compat libuv1-dev libpoppler-cpp-dev.🤖 Generated with Claude Code