chore: bump Quarto to 1.9.27 and R to 4.5.2

- Quarto 1.9.27: Linux (.deb), Windows (direct download; Scoop Extras has 1.8.27)
- R 4.5.2: Linux (CRAN jammy-cran40), Windows (Scoop main/r)
- Baremetal: quarto-actions/setup for both Linux and Windows
- Remove ggrepel version pin (R 4.5.x supports ggrepel 0.9.7)
- Update docs: BUILD.md, CONTAINER_BUILDS.md, docker READMEs
This commit is contained in:
Vijay Janapa Reddi
2026-03-02 17:36:35 -05:00
parent 38ec2d66fb
commit 96fa7ac5e5
9 changed files with 50 additions and 53 deletions

View File

@@ -1,5 +1,5 @@
# Use a base image with R 4.3.2 (supports both ARM64 and AMD64)
FROM rocker/r-ver:4.3.2
# Use a base image with R 4.5.2 (supports both ARM64 and AMD64)
FROM rocker/r-ver:4.5.2
# Set non-interactive mode to avoid prompts
ENV DEBIAN_FRONTEND=noninteractive
# ------------------------
@@ -18,7 +18,7 @@ RUN apt-get update && apt-get install -y \
# 📦 Install Quarto (Auto-detect architecture)
# ------------------------
RUN ARCH=$(dpkg --print-architecture) && \
curl -fsSL "https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.13/quarto-1.7.13-linux-${ARCH}.deb" -o quarto.deb && \
curl -fsSL "https://github.com/quarto-dev/quarto-cli/releases/download/v1.9.27/quarto-1.9.27-linux-${ARCH}.deb" -o quarto.deb && \
dpkg -i quarto.deb && rm quarto.deb
# ------------------------
# 🌐 Install Chromium using Quarto's built-in installer

View File

@@ -57,12 +57,12 @@ on:
description: 'Version of Quarto to use'
required: false
type: string
default: '1.7.31'
default: '1.9.27'
r-version:
description: 'Version of R to use'
required: false
type: string
default: '4.3.2'
default: '4.5.2'
quarto-log-level:
description: 'Quarto log level'
required: false
@@ -120,12 +120,12 @@ on:
quarto-version:
required: false
type: string
default: '1.7.31'
default: '1.9.27'
description: 'Version of Quarto to use'
r-version:
required: false
type: string
default: '4.3.2'
default: '4.5.2'
description: 'Version of R to use'
artifact_name:
required: false
@@ -517,29 +517,14 @@ jobs:
Write-Output "=== INSTALLING R VIA SCOOP ==="
Write-Output "This matches the Windows container setup (Phase 12)"
Write-Output "📦 Installing R from main bucket..."
scoop install main/r
Write-Output "📦 Installing R ${{ inputs.r-version }} from main bucket..."
scoop install main/r@${{ inputs.r-version }}
Write-Output "✅ R installed"
Write-Output "📊 Verifying R installation..."
R.exe --version
Write-Output "✅ R installation complete"
- name: 📦 Install Quarto via Scoop (Windows)
if: matrix.enabled && runner.os == 'Windows'
shell: pwsh
run: |
Write-Output "=== INSTALLING QUARTO VIA SCOOP ==="
Write-Output "This matches the Windows container setup (Phase 6)"
Write-Output "📦 Installing Quarto..."
scoop install quarto
Write-Output "✅ Quarto installed"
Write-Output "📊 Quarto version:"
quarto --version
Write-Output "✅ Quarto installation complete"
- name: 🎨 Install Inkscape via Scoop (Windows)
if: matrix.enabled && runner.os == 'Windows'
shell: pwsh
@@ -588,9 +573,9 @@ jobs:
with:
python-version: '3.13'
# === LINUX: Setup Quarto (GitHub Action) ===
- name: 📦 Setup Quarto (Linux)
if: matrix.enabled && runner.os == 'Linux'
# === Setup Quarto (Linux + Windows via quarto-actions) ===
- name: 📦 Setup Quarto
if: matrix.enabled
uses: quarto-dev/quarto-actions/setup@v2
with:
version: ${{ inputs.quarto-version }}

View File

@@ -418,17 +418,23 @@ RUN echo "🔄 Verifying TeX Live installation..." && \
fi && \
echo "✅ TeX Live verification complete (allowing partial failures)"
# === PHASE 6: R INSTALLATION ===
# === PHASE 6: R INSTALLATION (R 4.5 from CRAN) ===
RUN echo "🚀 === STARTING R INSTALLATION ===" && \
echo "⏰ Estimated time: 1-2 minutes" && \
start_time=$(date +%s) && \
\
echo "📦 Adding CRAN repository for R 4.5..." && \
apt-get update && apt-get install -y --no-install-recommends software-properties-common dirmngr && \
wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc | tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc > /dev/null && \
add-apt-repository "deb https://cloud.r-project.org/bin/linux/ubuntu jammy-cran40/" && \
apt-get update && \
\
echo "📦 Installing R and development packages..." && \
echo "📋 R packages:" && \
echo " - r-base" && \
echo " - r-base-dev" && \
echo " - r-recommended" && \
apt-get update && apt-get install -y \
apt-get install -y --no-install-recommends \
r-base \
r-base-dev \
r-recommended && \
@@ -526,18 +532,18 @@ RUN echo "🚀 === STARTING QUARTO INSTALLATION ===" && \
echo "⏰ Estimated time: 1 minute" && \
start_time=$(date +%s) && \
\
echo "📦 Downloading Quarto 1.7.31..." && \
wget -q https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.31/quarto-1.7.31-linux-amd64.deb && \
echo "📦 Downloading Quarto 1.9.27..." && \
wget -q https://github.com/quarto-dev/quarto-cli/releases/download/v1.9.27/quarto-1.9.27-linux-amd64.deb && \
if [ $? -ne 0 ]; then \
echo "❌ Failed to download Quarto"; \
exit 1; \
fi && \
echo "📥 Download completed" && \
echo "📊 Downloaded file size:" && \
ls -lh quarto-1.7.31-linux-amd64.deb && \
ls -lh quarto-1.9.27-linux-amd64.deb && \
\
echo "📦 Installing Quarto..." && \
dpkg -i quarto-1.7.31-linux-amd64.deb && \
dpkg -i quarto-1.9.27-linux-amd64.deb && \
if [ $? -ne 0 ]; then \
echo "❌ Failed to install Quarto"; \
exit 1; \
@@ -545,7 +551,7 @@ RUN echo "🚀 === STARTING QUARTO INSTALLATION ===" && \
echo "📦 Quarto installed" && \
\
echo "🧹 Cleaning up installer..." && \
rm quarto-1.7.31-linux-amd64.deb && \
rm quarto-1.9.27-linux-amd64.deb && \
echo "🧹 Installer cleaned up" && \
\
end_time=$(date +%s) && \

View File

@@ -21,7 +21,7 @@ docker/quarto-build/
- **TeX Live**: Full distribution (texlive-full)
- **R**: R-base with all required packages
- **Python**: Python 3.13 with all requirements
- **Quarto**: Version 1.7.31
- **Quarto**: Version 1.9.27
- **Tools**: Inkscape, Ghostscript, fonts
- **Dependencies**: All from `tools/dependencies/`
@@ -94,7 +94,7 @@ The container reduces build times significantly:
1. **System Dependencies** - Core Ubuntu packages and libraries
2. **Inkscape Installation** - SVG to PDF conversion capability
3. **Quarto Installation** - Latest Quarto CLI (v1.7.31)
3. **Quarto Installation** - Latest Quarto CLI (v1.9.27)
4. **TeX Live Installation** - Complete LaTeX distribution
5. **Ghostscript Installation** - PDF processing capabilities
6. **R Installation** - R base and development packages

View File

@@ -1,11 +1,11 @@
# escape=`
# MLSysBook Windows Quarto Build Container (Windows Server 2022)
# - PowerShell 7 via ZIP (no MSI)
# - Quarto 1.7.31 via ZIP (no MSI)
# - Quarto 1.9.27 via Scoop
# - Python 3.13.1 + requirements
# - Ghostscript + Inkscape (Chocolatey)
# - TeX Live 2025.20251008.0+ (pinned version fixes install-tl.zip issue) + packages from tl_packages
# - R 4.3.2 + packages via install_packages.R
# - R 4.5.2 + packages via install_packages.R
# - Verifications: versions, kpsewhich font files, TikZ smoke test
FROM mcr.microsoft.com/windows/server:ltsc2022
@@ -196,12 +196,19 @@ RUN Write-Host '=== STARTING SCOOP INSTALLATION ===' ; `
# ------------------------------------------------------------
# PHASE 6: Install Quarto (Main tool)
# Scoop Extras has 1.8.27; we need 1.9.27, so install via direct download
# ------------------------------------------------------------
RUN Write-Host '=== STARTING QUARTO INSTALLATION ===' ; `
Write-Host 'Installing Quarto via Scoop...' ; `
scoop install quarto ; `
Write-Host 'Downloading Quarto 1.9.27 (not yet in Scoop Extras)...' ; `
$quartoZip = 'C:\temp\quarto-1.9.27-win.zip' ; `
Invoke-WebRequest -Uri 'https://github.com/quarto-dev/quarto-cli/releases/download/v1.9.27/quarto-1.9.27-win.zip' -OutFile $quartoZip -UseBasicParsing ; `
Expand-Archive -Path $quartoZip -DestinationPath 'C:\' -Force ; `
$quartoBin = 'C:\quarto-1.9.27\bin' ; `
$mach = [Environment]::GetEnvironmentVariable('PATH','Machine') ; `
[Environment]::SetEnvironmentVariable('PATH', ($quartoBin + ';' + $mach), 'Machine') ; `
$env:PATH = "$quartoBin;$env:PATH" ; `
Remove-Item $quartoZip -Force ; `
Write-Host '📦 Quarto installed' ; `
Write-Host 'Verifying Quarto installation...' ; `
quarto --version ; `
Write-Host '✅ Quarto installation completed!'
@@ -267,9 +274,8 @@ RUN Write-Host '=== STARTING VISUAL C++ REDISTRIBUTABLE INSTALLATION ===' ; `
# PHASE 12: Install R (Medium complexity)
# ------------------------------------------------------------
RUN Write-Host '=== STARTING R INSTALLATION ===' ; `
Write-Host 'Installing R via Scoop (same as quarto-build workflow)...' ; `
Write-Host 'Installing R from main bucket...' ; `
scoop install main/r ; `
Write-Host 'Installing R 4.5.2 via Scoop (main bucket)...' ; `
scoop install main/r@4.5.2 ; `
Write-Host '📦 R installed' ; `
Write-Host 'Verifying R installation...' ; `
R --version ; `

View File

@@ -6,10 +6,10 @@ This directory contains the Windows Server 2022 container configuration for buil
- **Base Image**: Windows Server 2022 LTSC
- **PowerShell**: 7.4.1 (ZIP install, container-safe)
- **Quarto**: 1.7.31 (ZIP install)
- **Quarto**: 1.9.27 (Scoop)
- **Python**: 3.13.1 + production dependencies
- **TeX Live**: 2025 snapshot with required packages
- **R**: 4.3.2 + R Markdown packages
- **R**: 4.5.2 + R Markdown packages
- **Graphics**: Ghostscript + Inkscape (via Chocolatey)
## 🔧 Key Fixes Applied
@@ -69,7 +69,7 @@ This workflow is triggered manually or on a weekly schedule.
6. **Python**: 3.13.1 + production requirements
7. **Graphics**: Ghostscript + Inkscape
8. **TeX Live**: 2025 snapshot + packages
9. **R**: 4.3.2 + R Markdown packages
9. **R**: 4.5.2 + R Markdown packages
10. **Cleanup**: Remove temporary files
## 🔍 Verification Steps

View File

@@ -52,7 +52,7 @@ By default, Quarto can build the HTML version pretty easily. But **building the
| Tool | Why It's Needed | Version |
|------|------------------|---------|
| **Quarto** | The core tool that converts the `.qmd` files into HTML/PDF | 1.7.31+ |
| **Quarto** | The core tool that converts the `.qmd` files into HTML/PDF | 1.9.27+ |
| **Python** | Required for Book Binder CLI and build scripts | 3.9+ |
| **Python packages** | Dependencies (see `tools/dependencies/requirements.txt`) | See below |
| **R** | Some chapters include R code chunks and R-based plots | 4.0+ |
@@ -98,8 +98,8 @@ For the complete list, see `tools/dependencies/requirements.txt` and `pyproject.
Quarto is what drives the entire build process.
```sh
wget https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.31/quarto-1.7.31-linux-amd64.deb
sudo dpkg -i quarto-1.7.31-linux-amd64.deb
wget https://github.com/quarto-dev/quarto-cli/releases/download/v1.9.27/quarto-1.9.27-linux-amd64.deb
sudo dpkg -i quarto-1.9.27-linux-amd64.deb
```
Test it with:

View File

@@ -97,7 +97,7 @@ gh workflow run quarto-build-container.yml --field os=ubuntu-latest --field form
- **TeX Live**: Full distribution (texlive-full)
- **R**: R-base with all required packages
- **Python**: Python 3.13 with all requirements
- **Quarto**: Version 1.7.31
- **Quarto**: Version 1.9.27
- **Tools**: Inkscape, Ghostscript, fonts
#### Windows Container
@@ -105,7 +105,7 @@ gh workflow run quarto-build-container.yml --field os=ubuntu-latest --field form
- **TeX Live**: MiKTeX distribution
- **R**: R-base with all required packages
- **Python**: Python 3.x with all requirements
- **Quarto**: Version 1.7.31
- **Quarto**: Version 1.9.27
- **Tools**: Inkscape, Ghostscript, Chocolatey package manager
### Environment Variables

View File

@@ -8,7 +8,7 @@
required_packages <- c(
"downlit", # Required for code linking in Quarto
"ggplot2", # Visualization package
"ggrepel", # Visualization package
"ggrepel", # Visualization package (pinned below for R < 4.5)
"knitr", # Needed for Quarto rendering
"png", # PNG support
"rmarkdown", # Markdown rendering in R