From 1c79a2a82eb138b80594957f916476de09ed3409 Mon Sep 17 00:00:00 2001 From: Claude Code Date: Wed, 16 Sep 2026 22:51:58 +0000 Subject: [PATCH 1/3] Upgrade the base image from Debian 12 Bookworm to Debian 13 Trixie The MiKTeX apt repository now carries a 'trixie' distribution, at the same MiKTeX version as 'bookworm' (26.5). 'Dockerfile' hardcoded 'bookworm' in the apt sources line while ignoring its own 'MIKTEX_SRC_REPO' argument, which the pipeline has always passed. Reading the argument ties the MiKTeX distribution to 'base_image_os_codename', so the next upgrade is a single variable again. Co-Authored-By: Patrick Lehmann --- .github/workflows/Pipeline.yml | 4 ++-- Dockerfile | 2 +- README.md | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/Pipeline.yml b/.github/workflows/Pipeline.yml index 7522ec6..69bfd97 100644 --- a/.github/workflows/Pipeline.yml +++ b/.github/workflows/Pipeline.yml @@ -50,8 +50,8 @@ jobs: id: variables run: | base_image_name="python" - base_image_os_version="12" - base_image_os_codename="Bookworm" + base_image_os_version="13" + base_image_os_codename="Trixie" base_image_os_size="-slim" base_image_py_version="3.14" diff --git a/Dockerfile b/Dockerfile index 448c2af..952ada8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -35,7 +35,7 @@ RUN ln -sf /bin/bash /bin/sh # Install MikTeX RUN curl -fsSL https://miktex.org/download/key | gpg --dearmor -o /usr/share/keyrings/miktex.gpg -RUN echo "deb [signed-by=/usr/share/keyrings/miktex.gpg] https://miktex.org/download/debian bookworm universe" | tee /etc/apt/sources.list.d/miktex.list +RUN echo "deb [signed-by=/usr/share/keyrings/miktex.gpg] https://miktex.org/download/debian ${MIKTEX_SRC_REPO} universe" | tee /etc/apt/sources.list.d/miktex.list # Install dependencies via apt-get RUN --mount=type=bind,target=/context \ apt-get update \ diff --git a/README.md b/README.md index bd0ac61..3accd32 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # MikTeX Docker Image -This repository is based on [Debian 12.x Bookworm (slim) with Python 3.14](https://hub.docker.com/_/python). +This repository is based on [Debian 13.x Trixie (slim) with Python 3.14](https://hub.docker.com/_/python). Docker Hub: https://hub.docker.com/r/pytooling/miktex From 79bf67a0efffabdeff3e83eb11b0c19c5ac47be1 Mon Sep 17 00:00:00 2001 From: Claude Code Date: Thu, 17 Sep 2026 06:25:50 +0000 Subject: [PATCH 2/3] Print MiKTeX's own logs when a document fails to compile A lualatex abort writes no 'document.log', and names '/latex/.miktex/texmfs/data/miktex/log/lualatex.log' as the file holding the reason. The container is removed with it, so the cause was never visible. Also drops the literal quotes from the 'Specific' job's outputs: a heredoc writing '$GITHUB_OUTPUT' does not strip them, so the quotes were part of the value and showed up in step names. Co-Authored-By: Patrick Lehmann --- .github/workflows/Pipeline.yml | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/.github/workflows/Pipeline.yml b/.github/workflows/Pipeline.yml index 69bfd97..bad6ea0 100644 --- a/.github/workflows/Pipeline.yml +++ b/.github/workflows/Pipeline.yml @@ -279,6 +279,17 @@ jobs: ls -lAh *.pdf + - name: 🗒️ MiKTeX log of the failed run + if: failure() + run: | + for logFile in /latex/.miktex/texmfs/data/miktex/log/*.log /var/log/miktex/*.log; do + if [[ -f "${logFile}" ]]; then + printf -- "::group::%s\n" "${logFile}" + cat -- "${logFile}" + printf -- "::endgroup::\n" + fi + done + - name: 📤 Upload 'document-pdf' artifact uses: pyTooling/upload-artifact@v7 with: @@ -309,11 +320,11 @@ jobs: ci_tag="ci-${variant}-${{ needs.MiKTeX.outputs.short_sha }}" tee "${GITHUB_OUTPUT}" < Date: Thu, 17 Sep 2026 06:33:19 +0000 Subject: [PATCH 3/3] List the packages the images were auto-installing A Sphinx document loads ten packages that neither list names. The images carry '[MPM]AutoInstall=1', so they were fetched at compile time from whichever mirror answered - and when one doesn't, the build fails with a missing file. 'lualatex-math' did exactly that on dev: ! LaTeX Error: File `lualatex-math.sty' not found. All ten were found in the user installation tree of a local MiKTeX, which is where an auto-install lands, and each one is loaded as a '*.sty' by the generated document. Co-Authored-By: Patrick Lehmann --- Common.list | 5 +++++ Sphinx.list | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/Common.list b/Common.list index 45665a2..1cb84a2 100644 --- a/Common.list +++ b/Common.list @@ -25,6 +25,7 @@ caption cleveref colortbl courier +ctablestack datetime datetime2 draftwatermark @@ -51,6 +52,7 @@ graphics-def # graphicx -> part of base installation grfext hycolor +hypcap hyperref iftex # ifthen -> part of base installation @@ -77,9 +79,11 @@ lm lm-math # longtable -> part of base installation ltxcmds +lualatex-math lualibs luaotfload luatex85 +luatexbase makecell marvosym mdwtools @@ -109,6 +113,7 @@ setspace siunitx soul stackengine +stringenc # subcaption -> part of base installation tabstackengine # tabularx -> part of base installation diff --git a/Sphinx.list b/Sphinx.list index 524d910..205ac9e 100644 --- a/Sphinx.list +++ b/Sphinx.list @@ -5,17 +5,20 @@ capt-of cmap # ec -> handled in Common.list +ellipse # epstopdf-pkg -> handled in Common.list # etexcmds -> handled in Common.list fancyhdr fancyvrb fncychap +fontawesome7 framed # gettitlestring -> handled in Common.list # graphics-cfg -> handled in Common.list # graphics-def -> handled in Common.list gsftopk # hycolor -> handled in Common.list +idxlayout # iftex -> handled in Common.list # infwarerr -> handled in Common.list # intcalc -> handled in Common.list @@ -34,6 +37,8 @@ needspace # oberdiek -> handled in Common.list # pdfescape -> handled in Common.list # pdftexcmds -> handled in Common.list +pict2e +ragged2e # refcount -> handled in Common.list # rerunfilecheck -> handled in Common.list tabulary