# ============================================================
# Stage 1: Build-Stage
# - Emscripten 3.1.25 (via offiziellem emscripten/emsdk Image)
# - Qt 6.5.2 (Host: gcc_64 + Cross: wasm_singlethread)
# - Build von Open-Typer als WebAssembly
# ============================================================
FROM emscripten/emsdk:3.1.25 AS builder
# Nicht-interaktives apt
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe/Berlin
# Basis-Pakete
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
cmake \
git \
ninja-build \
python3 \
python3-pip \
python3-dev \
perl \
libgl1-mesa-dev \
libglib2.0-dev \
libxkbcommon-dev \
curl \
xz-utils \
ca-certificates \
libzstd-dev \
&& rm -rf /var/lib/apt/lists/*
# aqtinstall für Qt-Downloads
RUN pip3 install --no-cache-dir aqtinstall==3.1.6 py7zr==0.20.2
# Qt 6.5.2 – Host (gcc_64) für qmake/moc/rcc/uic
RUN aqt install-qt linux desktop 6.5.2 gcc_64 \
--outputdir /opt/Qt \
--modules qtcharts qt5compat qtshadertools
# Qt 6.5.2 – WebAssembly (wasm_singlethread)
RUN aqt install-qt linux desktop 6.5.2 wasm_singlethread \
--outputdir /opt/Qt \
--modules qtcharts qt5compat qtshadertools
# emsdk ist im Base-Image bereits unter /emsdk installiert und aktiviert
ENV EMSDK=/emsdk
ENV EM_CONFIG=/emsdk/.emscripten
# Open-Typer Quellcode klonen (inkl. Submodule)
RUN git clone --depth=1 --recurse-submodules \
https://github.com/Open-Typer/Open-Typer.git /build/Open-Typer
WORKDIR /build/Open-Typer
# RUNNER_WORKSPACE wird von build.sh für den Qt-Pfad genutzt
ENV RUNNER_WORKSPACE=/opt
# WASM-Build: qmake via wasm_singlethread Qt + make
RUN /opt/Qt/6.5.2/wasm_singlethread/bin/qmake \
&& make -j$(nproc)
# ============================================================
# Stage 2: Runtime-Stage
# - Schlankes nginx:alpine Image
# - Nur die fertigen WASM-Dateien werden kopiert
# ============================================================
FROM nginx:alpine AS runtime
# Platzhalter-HTML und Standard-Konfig entfernen
RUN rm -rf /usr/share/nginx/html/*
# Gebaute WASM-Dateien aus der Build-Stage übernehmen
# open-typer erzeugt: open-typer.html, open-typer.js, open-typer.wasm, qtloader.js, qtlogo.svg
COPY --from=builder /build/Open-Typer/open-typer.html /usr/share/nginx/html/index.html
COPY --from=builder /build/Open-Typer/*.js /usr/share/nginx/html/
COPY --from=builder /build/Open-Typer/*.wasm /usr/share/nginx/html/
COPY --from=builder /build/Open-Typer/*.svg /usr/share/nginx/html/
# Favicon: qtlogo.svg als SVG-Favicon einbinden via sed in index.html
RUN sed -i 's|\n