67 lines
3.3 KiB
Docker
67 lines
3.3 KiB
Docker
# syntax=docker/dockerfile:1.7
|
|
|
|
ARG GODOT_VERSION=4.6.3
|
|
|
|
FROM ubuntu:24.04 AS web-builder
|
|
ARG GODOT_VERSION
|
|
ARG SQLITE_VERSION=4.8
|
|
ARG TARGETARCH
|
|
|
|
RUN apt-get update \
|
|
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends ca-certificates curl libfontconfig1 unzip \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
RUN case "$TARGETARCH" in \
|
|
amd64) GODOT_ARCH="x86_64" ;; \
|
|
arm64) GODOT_ARCH="arm64" ;; \
|
|
*) echo "Unsupported build architecture: $TARGETARCH" >&2; exit 1 ;; \
|
|
esac \
|
|
&& curl -fsSL "https://github.com/godotengine/godot/releases/download/${GODOT_VERSION}-stable/Godot_v${GODOT_VERSION}-stable_linux.${GODOT_ARCH}.zip" -o /tmp/godot.zip \
|
|
&& unzip -q /tmp/godot.zip -d /usr/local/bin \
|
|
&& mv "/usr/local/bin/Godot_v${GODOT_VERSION}-stable_linux.${GODOT_ARCH}" /usr/local/bin/godot \
|
|
&& chmod +x /usr/local/bin/godot \
|
|
&& mkdir -p "/root/.local/share/godot/export_templates/${GODOT_VERSION}.stable" \
|
|
&& curl -fsSL "https://github.com/godotengine/godot/releases/download/${GODOT_VERSION}-stable/Godot_v${GODOT_VERSION}-stable_export_templates.tpz" -o /tmp/templates.tpz \
|
|
&& unzip -q /tmp/templates.tpz -d /tmp/godot-templates \
|
|
&& mv /tmp/godot-templates/templates/* "/root/.local/share/godot/export_templates/${GODOT_VERSION}.stable/" \
|
|
&& rm -rf /tmp/godot.zip /tmp/templates.tpz /tmp/godot-templates
|
|
|
|
WORKDIR /src
|
|
COPY . .
|
|
|
|
RUN mkdir -p addons/godot-sqlite/bin \
|
|
&& curl -fsSL "https://github.com/2shady4u/godot-sqlite/releases/download/v${SQLITE_VERSION}/addons.zip" -o /tmp/godot-sqlite.zip \
|
|
&& unzip -j /tmp/godot-sqlite.zip \
|
|
'addons/godot-sqlite/bin/libgdsqlite.web.template_release.wasm32.wasm' \
|
|
-d addons/godot-sqlite/bin \
|
|
&& rm /tmp/godot-sqlite.zip \
|
|
&& find assets -type f -name '*.import' -exec sed -i 's|^compress/mode=2$|compress/mode=0|' {} +
|
|
|
|
RUN mkdir -p dist \
|
|
&& godot --headless --path /src --import \
|
|
&& find .godot/imported -name 'title.png-*.ctex' ! -name '*.etc2.ctex' ! -name '*.s3tc.ctex' -type f -size +0c | grep -q . \
|
|
&& find .godot/imported -name 'kalulu_sprite_sheet.png-*.ctex' ! -name '*.etc2.ctex' ! -name '*.s3tc.ctex' -type f -size +0c | grep -q .
|
|
|
|
RUN godot --headless --path /src --export-release "Web Test" dist/index.html \
|
|
&& mv dist/index.pck dist/index-3.0.1-fr-joy.pck \
|
|
&& sed -i 's|"index.pck":|"index-3.0.1-fr-joy.pck":|; s|"focusCanvas":true,|"focusCanvas":true,"mainPack":"index-3.0.1-fr-joy.pck",|' dist/index.html \
|
|
&& test -s dist/index.html \
|
|
&& test -s dist/index.wasm \
|
|
&& test -s dist/index-3.0.1-fr-joy.pck
|
|
|
|
FROM alpine:3.22 AS french-content
|
|
ARG FRENCH_PACK_VERSION=v20260615-9e5d0d4
|
|
RUN apk add --no-cache ca-certificates curl \
|
|
&& mkdir -p /content \
|
|
&& curl -fsSL "https://github.com/Excello-Recherche-Education/Kalulu-Languages/releases/download/${FRENCH_PACK_VERSION}/fr_FR.zip" -o /content/fr_FR.zip \
|
|
&& test -s /content/fr_FR.zip
|
|
|
|
FROM nginx:1.29.1-alpine AS runtime
|
|
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
|
COPY --from=web-builder /src/dist/ /usr/share/nginx/html/
|
|
COPY --from=french-content /content/fr_FR.zip /usr/share/nginx/html/content/fr_FR.zip
|
|
|
|
EXPOSE 8080
|
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
|
|
CMD wget -q -O /dev/null http://127.0.0.1:8080/healthz || exit 1
|