mirror of
https://github.com/johndoe6345789/metabuilder.git
synced 2026-04-24 13:54:57 +00:00
112 lines
5.1 KiB
Docker
112 lines
5.1 KiB
Docker
# metabuilder/base-conan-deps
|
|
#
|
|
# All Conan C++ packages pre-built and cached in /root/.conan2.
|
|
# Covers: DBAL daemon (drogon, sqlite3, postgres, mongo, redis, cassandra...),
|
|
# Qt6 frontend, CLI frontend.
|
|
#
|
|
# Build: docker build -f Dockerfile.conan-deps -t metabuilder/base-conan-deps:latest ../../
|
|
# App Dockerfiles:
|
|
# COPY --from=metabuilder/base-conan-deps /root/.conan2 /root/.conan2
|
|
|
|
ARG BASE_REGISTRY=metabuilder
|
|
FROM ${BASE_REGISTRY}/base-apt:latest
|
|
|
|
# Install Conan 2 with retry
|
|
RUN for i in 1 2 3 4 5; do \
|
|
pip3 install --break-system-packages conan==2.* \
|
|
&& break \
|
|
|| (echo "pip install failed (attempt $i/5), retrying in $((i*10))s..." && sleep $((i*10))); \
|
|
done
|
|
|
|
# Detect Conan profile (must run inside the container, not from host cache)
|
|
RUN conan profile detect --force
|
|
|
|
# ── DBAL daemon ───────────────────────────────────────────────────────────────
|
|
COPY dbal/production/build-config/conanfile.py /deps/dbal/conanfile.py
|
|
|
|
RUN mkdir -p /tmp/dbal-build && \
|
|
for i in 1 2 3 4 5; do \
|
|
conan install /deps/dbal/ \
|
|
--output-folder=/tmp/dbal-build \
|
|
--build=missing \
|
|
-s build_type=Release \
|
|
-c tools.system.package_manager:mode=install \
|
|
-c tools.system.package_manager:mode=install \
|
|
&& break \
|
|
|| (echo "conan install (dbal) failed attempt $i/5, retrying in $((i*10))s..." && sleep $((i*10))); \
|
|
done
|
|
|
|
# ── Qt6 frontend ──────────────────────────────────────────────────────────────
|
|
COPY frontends/qt6/conanfile.txt /deps/qt6/conanfile.txt
|
|
|
|
# Pre-fetch Qt recipe into Conan cache, then patch source URL to use fast UK
|
|
# mirror (default download.qt.io is very slow outside central EU)
|
|
ARG QT_MIRROR=https://mirrors.ukfast.co.uk/sites/qt.io
|
|
RUN conan graph info /deps/qt6/ -s build_type=Release 2>/dev/null || true && \
|
|
find /root/.conan2 -name "conandata.yml" -exec grep -l "download.qt.io" {} \; | \
|
|
xargs -r sed -i "s|https://download.qt.io|${QT_MIRROR}|g"
|
|
|
|
RUN mkdir -p /tmp/qt6-build && \
|
|
for i in 1 2 3 4 5; do \
|
|
conan install /deps/qt6/ \
|
|
--output-folder=/tmp/qt6-build \
|
|
--build=missing \
|
|
-s build_type=Release \
|
|
-c tools.system.package_manager:mode=install \
|
|
-c tools.system.package_manager:mode=install \
|
|
&& break \
|
|
|| (echo "conan install (qt6) failed attempt $i/5, retrying in $((i*10))s..." && sleep $((i*10))); \
|
|
done
|
|
|
|
# ── CLI frontend ──────────────────────────────────────────────────────────────
|
|
COPY frontends/cli/conanfile.txt /deps/cli/conanfile.txt
|
|
|
|
RUN mkdir -p /tmp/cli-build && \
|
|
for i in 1 2 3 4 5; do \
|
|
conan install /deps/cli/ \
|
|
--output-folder=/tmp/cli-build \
|
|
--build=missing \
|
|
-s build_type=Release \
|
|
-c tools.system.package_manager:mode=install \
|
|
-c tools.system.package_manager:mode=install \
|
|
&& break \
|
|
|| (echo "conan install (cli) failed attempt $i/5, retrying in $((i*10))s..." && sleep $((i*10))); \
|
|
done
|
|
|
|
# ── Game engine ───────────────────────────────────────────────────────────────
|
|
COPY gameengine/conanfile.py /deps/gameengine/conanfile.py
|
|
|
|
RUN mkdir -p /tmp/gameengine-build && \
|
|
for i in 1 2 3 4 5; do \
|
|
conan install /deps/gameengine/ \
|
|
--output-folder=/tmp/gameengine-build \
|
|
--build=missing \
|
|
-s build_type=Release \
|
|
-c tools.system.package_manager:mode=install \
|
|
-c tools.system.package_manager:mode=install \
|
|
&& break \
|
|
|| (echo "conan install (gameengine) failed attempt $i/5, retrying in $((i*10))s..." && sleep $((i*10))); \
|
|
done
|
|
|
|
# ── Media daemon ──────────────────────────────────────────────────────────────
|
|
COPY services/media_daemon/build-config/conanfile.txt /deps/media-daemon/conanfile.txt
|
|
|
|
RUN mkdir -p /tmp/media-build && \
|
|
for i in 1 2 3 4 5; do \
|
|
conan install /deps/media-daemon/ \
|
|
--output-folder=/tmp/media-build \
|
|
--build=missing \
|
|
-s build_type=Release \
|
|
-c tools.system.package_manager:mode=install \
|
|
-c tools.system.package_manager:mode=install \
|
|
&& break \
|
|
|| (echo "conan install (media-daemon) failed attempt $i/5, retrying in $((i*10))s..." && sleep $((i*10))); \
|
|
done
|
|
|
|
# Clean up tmp build dirs (keep only the Conan package cache in /root/.conan2)
|
|
RUN rm -rf /tmp/dbal-build /tmp/qt6-build /tmp/cli-build \
|
|
/tmp/gameengine-build /tmp/media-build
|
|
|
|
LABEL org.metabuilder.image="base-conan-deps" \
|
|
org.metabuilder.description="Pre-built Conan C++ packages (DBAL, Qt6, CLI)"
|