From 84ddfeb84a263508f8a3223b83a18eab34050d63 Mon Sep 17 00:00:00 2001 From: Joshua Shapiro Date: Thu, 8 Oct 2026 09:41:47 -0400 Subject: [PATCH 1/7] Update RStudio server to a minimum version --- Dockerfile | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Dockerfile b/Dockerfile index 43488ba7a..51bc95136 100644 --- a/Dockerfile +++ b/Dockerfile @@ -67,6 +67,22 @@ RUN apt-get update -qq \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* +# Update RStudio if needed +ARG RSTUDIO_MIN=2026.09.0+174 + +RUN set -eux; \ + ARCH=$(dpkg --print-architecture); \ + CUR_VER=$(dpkg-query -W -f='${Version}' rstudio-server 2>/dev/null || echo 0); \ + if dpkg --compare-versions "$CUR_VER" lt "$RSTUDIO_MIN"; then \ + curl -fsSL "https://dl.dailies.rstudio.com/server/jammy/${ARCH}/rstudio-server-$(echo "$RSTUDIO_MIN" | tr + -)-${ARCH}.deb" \ + -o /tmp/rstudio-server.deb; \ + gdebi --non-interactive /tmp/rstudio-server.deb; \ + rm /tmp/rstudio-server.deb; \ + ln -fs /usr/lib/rstudio-server/bin/rstudio-server /usr/local/bin; \ + ln -fs /usr/lib/rstudio-server/bin/rserver /usr/local/bin; \ + fi; \ + rm -rf /var/lib/apt/lists/* + # FastQC RUN apt-get update -qq \ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ From 0c942204d2810679b06940672d8a3af4d01eb656 Mon Sep 17 00:00:00 2001 From: Joshua Shapiro Date: Thu, 8 Oct 2026 09:42:21 -0400 Subject: [PATCH 2/7] renv updates for stringfish compatibility --- renv.lock | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/renv.lock b/renv.lock index 63087df76..781876171 100644 --- a/renv.lock +++ b/renv.lock @@ -3218,7 +3218,7 @@ }, "RcppParallel": { "Package": "RcppParallel", - "Version": "6.1.1", + "Version": "6.2.1", "Source": "Repository", "Type": "Package", "Title": "Parallel Programming Tools for 'Rcpp'", @@ -5640,8 +5640,7 @@ "URL": "https://www.rforge.net/base64enc", "BugReports": "https://github.com/s-u/base64enc/issues", "NeedsCompilation": "yes", - "Repository": "CRAN", - "Encoding": "UTF-8" + "Repository": "CRAN" }, "batchelor": { "Package": "batchelor", @@ -14139,11 +14138,11 @@ }, "qs2": { "Package": "qs2", - "Version": "0.2.2", + "Version": "0.3.1", "Source": "Repository", "Type": "Package", "Title": "Efficient Serialization of R Objects", - "Date": "2026-06-02", + "Date": "2026-08-19", "Authors@R": "c( person(\"Travers\", \"Ching\", email = \"traversc@gmail.com\", role = c(\"aut\", \"cre\", \"cph\")), person(\"Yann\", \"Collet\", role = c(\"ctb\", \"cph\"), comment = \"Yann Collet is the author of the bundled zstd\"), person(\"Facebook, Inc.\", role = \"cph\", comment = \"Facebook is the copyright holder of the bundled zstd code\"), person(\"Reichardt\", \"Tino\", role = c(\"ctb\", \"cph\"), comment = \"Contributor/copyright holder of zstd bundled code\"), person(\"Skibinski\", \"Przemyslaw\", role = c(\"ctb\", \"cph\"), comment = \"Contributor/copyright holder of zstd bundled code\"), person(\"Mori\", \"Yuta\", role = c(\"ctb\", \"cph\"), comment = \"Contributor/copyright holder of zstd bundled code\"), person(\"Francesc\", \"Alted\", role = c(\"ctb\", \"cph\"), comment = \"Shuffling routines derived from Blosc library\"))", "Maintainer": "Travers Ching ", "Description": "Streamlines and accelerates the process of saving and loading R objects, improving speed and compression compared to other methods. The package provides two compression formats: the 'qs2' format, which uses R serialization via the C API while optimizing compression and disk I/O, and the 'qdata' format, featuring custom serialization for slightly faster performance and better compression. Additionally, the 'qs2' format can be directly converted to the standard 'RDS' format, ensuring long-term compatibility with future versions of R.", @@ -14151,16 +14150,16 @@ "LazyData": "true", "Biarch": "true", "Depends": [ - "R (>= 3.5.0)" + "R (>= 3.6.0)" ], "Imports": [ "Rcpp", - "RcppParallel", + "RcppParallel (>= 6.1.1)", "stringfish (>= 0.18.0)" ], "LinkingTo": [ "Rcpp", - "RcppParallel" + "RcppParallel (>= 6.1.1)" ], "Suggests": [ "knitr", @@ -14171,11 +14170,11 @@ ], "SystemRequirements": "GNU make, C++17", "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", "VignetteBuilder": "knitr", "Copyright": "This package includes code from the 'zstd' library owned by Facebook, Inc. and created by Yann Collet; and code derived from the 'Blosc' library created and owned by Francesc Alted.", "URL": "https://github.com/qsbase/qs2", "BugReports": "https://github.com/qsbase/qs2/issues", + "Config/roxygen2/version": "8.0.0", "NeedsCompilation": "yes", "Author": "Travers Ching [aut, cre, cph], Yann Collet [ctb, cph] (Yann Collet is the author of the bundled zstd), Facebook, Inc. [cph] (Facebook is the copyright holder of the bundled zstd code), Reichardt Tino [ctb, cph] (Contributor/copyright holder of zstd bundled code), Skibinski Przemyslaw [ctb, cph] (Contributor/copyright holder of zstd bundled code), Mori Yuta [ctb, cph] (Contributor/copyright holder of zstd bundled code), Francesc Alted [ctb, cph] (Shuffling routines derived from Blosc library)", "Repository": "CRAN" @@ -17011,11 +17010,11 @@ }, "stringfish": { "Package": "stringfish", - "Version": "0.19.0", + "Version": "0.19.2", "Source": "Repository", "Title": "Alt String Implementation", - "Date": "2026-04-18", - "Authors@R": "c( person(\"Travers\", \"Ching\", email = \"traversc@gmail.com\", role = c(\"aut\", \"cre\", \"cph\")), person(\"Phillip\", \"Hazel\", role = c(\"ctb\"), comment = \"Bundled PCRE2 code\"), person(\"Zoltan\", \"Herczeg\", role = c(\"ctb\", \"cph\"), comment = \"Bundled PCRE2 code\"), person(\"University of Cambridge\", role = c(\"cph\"), comment = \"Bundled PCRE2 code\"), person(\"Tilera Corporation\", role = c(\"cph\"), comment = \"Stack-less Just-In-Time compiler bundled with PCRE2\"), person(\"Yann\", \"Collet\", role = c(\"ctb\", \"cph\"), comment = \"Yann Collet is the author of the bundled xxHash code\"))", + "Date": "2026-08-04", + "Authors@R": "c( person(\"Travers\", \"Ching\", email = \"traversc@gmail.com\", role = c(\"aut\", \"cre\", \"cph\")), person(\"Phillip\", \"Hazel\", role = c(\"ctb\"), comment = \"Bundled PCRE2 code\"), person(\"Zoltan\", \"Herczeg\", role = c(\"ctb\", \"cph\"), comment = \"Bundled PCRE2 code\"), person(\"University of Cambridge\", role = c(\"cph\"), comment = \"Bundled PCRE2 code\"), person(\"Tilera Corporation\", role = c(\"cph\"), comment = \"Stack-less Just-In-Time compiler bundled with PCRE2\"), person(\"Yann\", \"Collet\", role = c(\"ctb\", \"cph\"), comment = \"Yann Collet is the author of the bundled xxHash code\"), person(\"Martin\", \"Leitner-Ankerl\", role = c(\"ctb\", \"cph\"), comment = \"Bundled ankerl::unordered_dense code\"))", "Maintainer": "Travers Ching ", "Description": "Provides an extendable, performant and multithreaded 'alt-string' implementation backed by 'C++' vectors and strings.", "License": "GPL-3", @@ -17027,7 +17026,7 @@ "SystemRequirements": "GNU make, C++17", "LinkingTo": [ "Rcpp (>= 0.12.18.3)", - "RcppParallel (>= 5.1.4)" + "RcppParallel (>= 6.1.1)" ], "Imports": [ "Rcpp", @@ -17038,12 +17037,12 @@ "rmarkdown" ], "VignetteBuilder": "knitr", - "RoxygenNote": "7.3.3", - "Copyright": "Copyright for the bundled 'PCRE2' library is held by University of Cambridge, Zoltan Herczeg and Tilera Corporation (Stack-less Just-In-Time compiler); Copyright for the bundled 'xxHash' code is held by Yann Collet.", + "Copyright": "Copyright for the bundled 'PCRE2' library is held by University of Cambridge, Zoltan Herczeg and Tilera Corporation (Stack-less Just-In-Time compiler); Copyright for the bundled 'xxHash' code is held by Yann Collet; Copyright for the bundled 'ankerl::unordered_dense' code is held by Martin Leitner-Ankerl.", "URL": "https://github.com/traversc/stringfish", "BugReports": "https://github.com/traversc/stringfish/issues", + "Config/roxygen2/version": "8.0.0", "NeedsCompilation": "yes", - "Author": "Travers Ching [aut, cre, cph], Phillip Hazel [ctb] (Bundled PCRE2 code), Zoltan Herczeg [ctb, cph] (Bundled PCRE2 code), University of Cambridge [cph] (Bundled PCRE2 code), Tilera Corporation [cph] (Stack-less Just-In-Time compiler bundled with PCRE2), Yann Collet [ctb, cph] (Yann Collet is the author of the bundled xxHash code)", + "Author": "Travers Ching [aut, cre, cph], Phillip Hazel [ctb] (Bundled PCRE2 code), Zoltan Herczeg [ctb, cph] (Bundled PCRE2 code), University of Cambridge [cph] (Bundled PCRE2 code), Tilera Corporation [cph] (Stack-less Just-In-Time compiler bundled with PCRE2), Yann Collet [ctb, cph] (Yann Collet is the author of the bundled xxHash code), Martin Leitner-Ankerl [ctb, cph] (Bundled ankerl::unordered_dense code)", "Repository": "CRAN" }, "stringi": { @@ -18124,8 +18123,7 @@ "URL": "https://www.rforge.net/uuid", "BugReports": "https://github.com/s-u/uuid/issues", "NeedsCompilation": "yes", - "Repository": "CRAN", - "Encoding": "UTF-8" + "Repository": "CRAN" }, "uwot": { "Package": "uwot", From e9ae2ab02fe863ab46a732e20c0bd6c0bc65d4d2 Mon Sep 17 00:00:00 2001 From: Joshua Shapiro Date: Thu, 8 Oct 2026 09:44:09 -0400 Subject: [PATCH 3/7] Use venv for python install --- Dockerfile | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 51bc95136..829ef7794 100644 --- a/Dockerfile +++ b/Dockerfile @@ -93,9 +93,22 @@ RUN apt-get update -qq \ # Get rclone RUN curl -L https://rclone.org/install.sh | bash -# Python packages -COPY requirements.txt requirements.txt -RUN pip install -r requirements.txt --break-system-packages +# Python packages in a venv that is set as default for users +COPY requirements.txt /tmp/requirements.txt + +RUN python3 -m venv /opt/venv \ + && /opt/venv/bin/pip install --no-cache-dir -r /tmp/requirements.txt \ + && rm /tmp/requirements.txt \ + && chgrp -R staff /opt/venv && chmod -R g+ws /opt/venv \ + && echo '[ "$(id -u)" -ne 0 ] && export PATH=/opt/venv/bin:$PATH' > /etc/profile.d/venv.sh \ + && cat >> "$(R RHOME)/etc/Rprofile.site" <<'EOF' +if (Sys.info()[["effective_user"]] != "root") { + Sys.setenv( + PATH = paste("/opt/venv/bin", Sys.getenv("PATH"), sep = ":"), + RETICULATE_PYTHON = "/opt/venv/bin/python" + ) +} +EOF # Use renv for R packages WORKDIR /usr/local/renv From 8b38d57b1f2199df9600cf4eaa05b7e31c56ae7e Mon Sep 17 00:00:00 2001 From: Joshua Shapiro Date: Thu, 8 Oct 2026 10:59:27 -0400 Subject: [PATCH 4/7] change secret env variable name for consistency --- .github/workflows/build-docker.yml | 2 +- Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-docker.yml b/.github/workflows/build-docker.yml index ba4fd9ee9..39aa471b6 100644 --- a/.github/workflows/build-docker.yml +++ b/.github/workflows/build-docker.yml @@ -90,7 +90,7 @@ jobs: with: push: ${{ github.event_name == 'push' }} secrets: | - GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} + GITHUB_PAT=${{ secrets.GITHUB_TOKEN }} platforms: ${{ matrix.platform }} outputs: type=image,push-by-digest=true,name-canonical=true labels: ${{ steps.meta.outputs.labels }} diff --git a/Dockerfile b/Dockerfile index 829ef7794..6ef0d4742 100644 --- a/Dockerfile +++ b/Dockerfile @@ -115,7 +115,7 @@ WORKDIR /usr/local/renv COPY renv.lock renv.lock ENV RENV_CONFIG_CACHE_ENABLED=FALSE ENV RENV_CONFIG_INSTALL_STAGED=FALSE -RUN --mount=type=secret,id=GITHUB_TOKEN,env=GITHUB_PAT,required=false \ +RUN --mount=type=secret,id=GITHUB_PAT,env=GITHUB_PAT,required=false \ Rscript - <<'RSCRIPT_EOF' # Some challenges with multi-arch builds and Bioconductor binaries mean we # want to be sure to set up repos manually here, lest the ones recorded in the From 487343125701cf4afd0af03907e4641fe3f6d989 Mon Sep 17 00:00:00 2001 From: Joshua Shapiro Date: Thu, 8 Oct 2026 11:05:45 -0400 Subject: [PATCH 5/7] don't ignore spatial in skel (Not sure why this didn't cause other trouble!) --- .dockerignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.dockerignore b/.dockerignore index 3c3b62647..12a47b8e7 100644 --- a/.dockerignore +++ b/.dockerignore @@ -20,6 +20,7 @@ !/RNA-seq !/scRNA-seq !/scRNA-seq-advanced +!/spatial # still ignore data directories **/data/* From c22e62f296d6141eca8b68d363fc320db95225c1 Mon Sep 17 00:00:00 2001 From: Joshua Shapiro Date: Thu, 8 Oct 2026 11:12:22 -0400 Subject: [PATCH 6/7] disable posit assistant --- Dockerfile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Dockerfile b/Dockerfile index 6ef0d4742..a09c9cb4f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -157,5 +157,8 @@ RUN python3 ${template_dir}/scripts/setup-skel.py \ --skel-dir /etc/skel \ --module-file ${template_dir}/current-modules.json +# Disable Posit Assistant +RUN echo "posit-assistant-enabled=0" >> /etc/rstudio/rsession.conf + WORKDIR /home/rstudio From aba4014d6af5812005cc9df2632ddd275217de1f Mon Sep 17 00:00:00 2001 From: Joshua Shapiro Date: Thu, 8 Oct 2026 11:35:20 -0400 Subject: [PATCH 7/7] simply python path setting --- Dockerfile | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index a09c9cb4f..bc53291a9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -95,19 +95,16 @@ RUN curl -L https://rclone.org/install.sh | bash # Python packages in a venv that is set as default for users COPY requirements.txt /tmp/requirements.txt - RUN python3 -m venv /opt/venv \ && /opt/venv/bin/pip install --no-cache-dir -r /tmp/requirements.txt \ && rm /tmp/requirements.txt \ && chgrp -R staff /opt/venv && chmod -R g+ws /opt/venv \ && echo '[ "$(id -u)" -ne 0 ] && export PATH=/opt/venv/bin:$PATH' > /etc/profile.d/venv.sh \ && cat >> "$(R RHOME)/etc/Rprofile.site" <<'EOF' -if (Sys.info()[["effective_user"]] != "root") { - Sys.setenv( - PATH = paste("/opt/venv/bin", Sys.getenv("PATH"), sep = ":"), - RETICULATE_PYTHON = "/opt/venv/bin/python" +Sys.setenv( + RETICULATE_PYTHON = "/opt/venv/bin/python", + VIRTUAL_ENV_DISABLE_PROMPT = "1" ) -} EOF # Use renv for R packages