FROM docker.io/library/node:22.23.1-bookworm-slim@sha256:6c74791e557ce11fc957704f6d4fe134a7bc8d6f5ca4403205b2966bd488f6b3 AS diagrams
WORKDIR /opt/mermaid
ENV PUPPETEER_SKIP_DOWNLOAD=true
COPY --chmod=0644 tools/mermaid/package.json tools/mermaid/package-lock.json ./
RUN umask 022 && npm ci --ignore-scripts --omit=dev --no-audit --no-fund
COPY --chmod=0755 tools/mermaid/render.mjs ./
COPY --chmod=0644 tools/mermaid/stable-css.patch ./
FROM docker.io/library/debian:13-slim@sha256:020c0d20b9880058cbe785a9db107156c3c75c2ac944a6aa7ab59f2add76a7bd
ARG DEBIAN_SNAPSHOT=20260715T000000Z
ARG YTDLP_VERSION=2026.07.04
ARG DEBIAN_FRONTEND=noninteractive
LABEL org.opencontainers.image.title="Alan Dipert homepage builder" \
org.opencontainers.image.source="https://tailrecursion.com/repos/r/homepage.git/"
RUN rm -f /etc/apt/sources.list /etc/apt/sources.list.d/debian.sources \
&& printf '%s\n' \
"deb [check-valid-until=no] http://snapshot.debian.org/archive/debian/${DEBIAN_SNAPSHOT} trixie main" \
> /etc/apt/sources.list \
&& apt-get update \
&& apt-get install --yes --no-install-recommends \
ca-certificates \
cmark-gfm \
chromium \
fonts-dejavu-core \
coreutils \
curl \
ffmpeg \
git \
git-lfs \
openssh-client \
make \
poppler-utils \
python3 \
python3-pygments \
rsync \
wget \
&& cmark-gfm --version \
&& ffmpeg -version | head -n 1 \
&& git-lfs version \
&& python3 --version \
&& curl -fsSL "https://github.com/yt-dlp/yt-dlp/releases/download/${YTDLP_VERSION}/yt-dlp_linux" \
-o /usr/local/bin/yt-dlp \
&& printf '%s %s\n' \
"6bbb3d314cde4febe36e5fa1d55462e29c974f63444e707871834f6d8cc210ae" \
/usr/local/bin/yt-dlp | sha256sum --check --strict \
&& chmod 0755 /usr/local/bin/yt-dlp \
&& yt-dlp --version \
&& rm -rf /var/lib/apt/lists/*
COPY --from=diagrams /usr/local/bin/node /usr/local/bin/node
COPY --from=diagrams /opt/mermaid /opt/mermaid
# Mermaid 12.2 loads font CSS concurrently, making embedded SVG styles race.
RUN cd /opt/mermaid \
&& git apply --directory=node_modules/@mermaid-js/mermaid-cli stable-css.patch \
&& ln -s /opt/mermaid/render.mjs /usr/local/bin/homepage-mermaid \
&& node --version \
&& chromium --version \
&& python3 -c 'import pygments; print("Pygments", pygments.__version__)'
ENV LANG=C.UTF-8 \
LC_ALL=C.UTF-8 \
TZ=UTC \
XDG_CACHE_HOME=/tmp/homepage-cache \
XDG_CONFIG_HOME=/tmp/homepage-config \
XDG_DATA_HOME=/tmp/homepage-data \
XDG_STATE_HOME=/tmp/homepage-state
WORKDIR /workspace
CMD ["make", "fresh"]