Build on debian:trixie with R 4.5 / BioC 3.22 - #511
Draft
ESCRI11 wants to merge 2 commits into
Draft
Conversation
Rebuild the base image on debian:trixie instead of ubuntu:24.04. The distro swap forces R 4.3->4.5 and BioC 3.18->3.22, which is where the actual work was. Fixes needed to make the chain build: - rspm.R: point PPM at __linux__/trixie, and set HTTPUserAgent. Without the latter R sends "libcurl/x.y.z" and PPM silently serves source packages, so the distro segment has no effect. Also add dev/Rprofile creation to the docs -- rspm.R is only a template; it is never copied into the image on its own, which is why these builds have never used binaries. - functions.R: set repos to BiocManager::repositories(). rspm.R sets repos to CRAN only, which replaces the Bioconductor repos, so every BioC dependency of a Remotes entry resolved as "not available" (PCSF -> org.Hs.eg.db, topGO). - functions.R: install limSolve explicitly. DeconRNASeq was dropped from BioC after 3.18 so it is pinned to a 3.18 tarball, and remotes does not resolve dependencies of url:: remotes. - install_ubuntu.sh: add libmagick++-dev. trixie's imagemagick ships only libMagickCore/libMagickWand, not libMagick++, which the R magick package links against. Missing it cascaded into SpatialExperiment -> GSVA -> plaid. Also drop stale version pins that were already being overridden downstream (rms, rjson, rliger, BiocManager) and document the remaining ones in dev/PINS.md. url:: pins force source builds and bypass the PPM binaries, so this cut the install_playbase.R step from ~143 min to ~38 min. Verified locally through the full chain: app serves, example data loads, plots render, and quarto/typst report export works on Debian 13 / R 4.5.0 / BioC 3.22. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
PPM's binary channel served lattice 0.23-1, which dropped the `parallel` export that methylumi 2.56.0 still imports. That cascades methylumi -> lumi -> wateRmelon, and wateRmelon is a playbase Import, so `install_playbase.R` then fails outright: playbase is removed and scan_description() dies reading the DESCRIPTION of the package that was just deleted. Note the source and binary channels disagreed -- src/contrib/PACKAGES advertised 0.22-9 while the binary channel shipped 0.23-1 -- so checking the source index does not reveal this. PPM later withdrew 0.23-1, meaning `latest` also flip-flops; a dated snapshot is the only stable choice for a migration we are trying to validate. 2026-07-15 is the validated date and still serves binaries. Must stay in step with omicsplayground's dev/Rprofile. Pinning only one of the two is worse than pinning neither: the base builds correctly against 0.22-9 and the opg stages then upgrade lattice over it, leaving methylumi, lumi and wateRmelon installed but unloadable, with the build exiting 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.
Companion to bigomics/omicsplayground#1843. Both must land together — see "The two pins" below.
What this is
Rebuilds the playbase base image on
debian:trixieinstead ofubuntu:24.04. This is where the trixie migration actually lives; the omicsplayground side just points at the result.The distro swap forces an R and Bioconductor upgrade: trixie ships R 4.5.0, and BiocManager hard-refuses BioC 3.18 on R 4.5 (
requires R version 4.3; use version = '3.22'). No R 4.3 exists for trixie. So R 4.3→4.5 and BioC 3.18→3.22 come along whether we like it or not — that jump, not theFROMline, is the real project risk.Status
Built from scratch and verified: Debian 13 · R 4.5.0 · BioC 3.22, squashed to one layer. Downstream, the full Omics Playground image built on top of it serves HTTP 200, loads a real dataset (18 samples, 7118 features, 5 contrasts), renders base/ggplot/embedding plots, and exports PDFs through both the typst and LaTeX report engines.
What changed
dev/Dockerfile.os,dev/Dockerfile.rbase,dev/install_ubuntu.sh— trixie base and its fallout. trixie has gcc-14 (noble had gcc-13), so the hardcoded/usr/include/c++/13/msa hack breaks;apt-keyis gone so the Chrome install needssigned-by=;software-properties-commondoes not exist in trixiedev/functions.R,dev/install_playbase.R— BioC 3.22. The version was pinned in three places; fixing only the Dockerfile leaves the other two to re-pin 3.18 at runtime+libmagick++-dev, which was cascading into GSVA/plaid failuresdev/rspm.R— trixie PPM URL, plusHTTPUserAgent. Fixing the URL alone changes nothing: without the User-Agent, R sendslibcurl/x.y.zand PPM answers with source packages, so these builds had never actually used binariesdev/PINS.md— documents the pinning rulesThe two pins
dev/rspm.Rhere anddev/Rprofilein omicsplayground must carry the same snapshot date.PPM's
latestserved lattice 0.23-1, which dropped theparallelexport that methylumi 2.56.0 still imports. Cascade: methylumi → lumi → wateRmelon, and wateRmelon is a playbase Import, soinstall_playbase.Rfails outright — playbase gets removed andscan_description()then dies reading the DESCRIPTION of the package that was just deleted.The two failure modes look nothing alike, which is what makes this nasty:
requirements.Rmerely upgrades lattice over them, nothing errors, and they become unloadable while the build exits 0PPM's source index advertised 0.22-9 while the binary channel shipped 0.23-1, so checking
src/contrib/PACKAGESdoes not reveal this. PPM later withdrew 0.23-1, meaninglatestalso flip-flops — a dated snapshot is the only stable choice for a migration we are trying to validate.Gotchas found while building this
make dockeralways fails. Its finaldocker.squashtarget guards on[ -z `command -v pipx &> /dev/null` ], which captures no output and is therefore always true, so it prints ERROR and exits 1 every time. Not fixed here.make docker.pkgreturns 0 on failure. The recipe ends in| teeand make's recipe shell has nopipefail, so a faileddocker buildreports success. This masked a real failure for an entire build cycle. Calldocker builddirectly when failures need to surface.GITHUB_PATis baked into an intermediate layer ofplaybase-pkg, and squashing plusdocker rmi playbase-pkgis what removes it.Not done
bigomics/playbasetag.mainand will want a rebase before merge.Dockerfile.updateon the opg side still has 9 unauthenticatedinstall_githubsteps, costing ~17 calls of the 60/hr per-IP budget. They normally pass but fail on a shared office IP.🤖 Generated with Claude Code