# Headless Linux box for reproducing the desktop daemon attach/spawn wedge# against the REAL packaged app (no macOS, no Aqua, no host GUI). The linux# bundle is built on the host (electron-builder --linux --arm64) and mounted at# /app; this image only provides Xvfb plus Electron's runtime shared libraries# and a Node to run the CDP repro driver.FROM node:22-bookworm-slim# Electron 41 runtime deps + Xvfb. Kept to the libs Chromium actually dlopen()s# at startup so the image stays small and the failure surface is just "missing# lib" (loud) rather than a silent renderer crash.RUN apt-get update && apt-get install -y --no-install-recommends \ xvfb xauth \ libnss3 libnspr4 \ libatk1.0-0 libatk-bridge2.0-0 libatspi2.0-0 \ libgtk-3-0 libgbm1 libdrm2 \ libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libxkbcommon0 \ libasound2 libcups2 libpango-1.0-0 libcairo2 \ libx11-6 libxcb1 libxext6 libxi6 libxtst6 libglib2.0-0 \ ca-certificates \ && rm -rf /var/lib/apt/lists/*COPY repro.mjs /repro/repro.mjs# xvfb-run gives Chromium a virtual display; --no-sandbox is required because the# container runs as root and we are not setuid-installing chrome-sandbox.ENTRYPOINT ["xvfb-run", "-a", "-s", "-screen 0 1280x800x24", "node", "/repro/repro.mjs"]
# Headless Linux box for reproducing the desktop daemon attach/spawn wedge
# against the REAL packaged app (no macOS, no Aqua, no host GUI). The linux
# bundle is built on the host (electron-builder --linux --arm64) and mounted at
# /app; this image only provides Xvfb plus Electron's runtime shared libraries
# and a Node to run the CDP repro driver.
FROM node:22-bookworm-slim
# Electron 41 runtime deps + Xvfb. Kept to the libs Chromium actually dlopen()s
# at startup so the image stays small and the failure surface is just "missing
# lib" (loud) rather than a silent renderer crash.
RUN apt-get update && apt-get install -y --no-install-recommends \
xvfb xauth \
libnss3 libnspr4 \
libatk1.0-0 libatk-bridge2.0-0 libatspi2.0-0 \
libgtk-3-0 libgbm1 libdrm2 \
libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libxkbcommon0 \
libasound2 libcups2 libpango-1.0-0 libcairo2 \
libx11-6 libxcb1 libxext6 libxi6 libxtst6 libglib2.0-0 \
ca-certificates \
&& rm -rf /var/lib/apt/lists/*
COPY repro.mjs /repro/repro.mjs
# xvfb-run gives Chromium a virtual display; --no-sandbox is required because the
# container runs as root and we are not setuid-installing chrome-sandbox.
ENTRYPOINT ["xvfb-run", "-a", "-s", "-screen 0 1280x800x24", "node", "/repro/repro.mjs"]