All checks were successful
Release Docker Image / Build & Push Docker Image (release) Successful in 20m23s
91 lines
3.0 KiB
Docker
91 lines
3.0 KiB
Docker
# ============================================================
|
||
# 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|<meta name="viewport"|<link rel="icon" type="image/svg+xml" href="qtlogo.svg">\n <meta name="viewport"|' /usr/share/nginx/html/index.html
|
||
|
||
# Eigene nginx-Konfiguration mit korrekten MIME-Types für WASM
|
||
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||
|
||
EXPOSE 80
|
||
|
||
HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \
|
||
CMD wget -qO- http://localhost/ || exit 1
|
||
|
||
CMD ["nginx", "-g", "daemon off;"]
|