# syntax=docker/dockerfile:1.7
FROM ubuntu:24.04 AS builder

ARG BUILD_TYPE=Release
ARG BUILD_JOBS=2

ENV DEBIAN_FRONTEND=noninteractive

RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
    --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \
    apt-get update \
    && apt-get install -y --no-install-recommends \
        build-essential \
        ca-certificates \
        cmake \
        git \
        libboost-filesystem-dev \
        libboost-iostreams-dev \
        libboost-locale-dev \
        libboost-program-options-dev \
        libboost-regex-dev \
        libboost-system-dev \
        libboost-thread-dev \
        libbz2-dev \
        libcurl4-openssl-dev \
        libmariadb-dev \
        libmariadb-dev-compat \
        libncurses-dev \
        libreadline-dev \
        libssl-dev \
        zlib1g-dev \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /src
COPY . .

RUN cmake -S . -B /build \
        -DCMAKE_BUILD_TYPE="${BUILD_TYPE}" \
        -DCMAKE_INSTALL_PREFIX=/opt/sylvania \
        -DTOOLS=OFF \
    && cmake --build /build --parallel "${BUILD_JOBS}" \
    && cmake --install /build

FROM ubuntu:24.04 AS runtime

ENV DEBIAN_FRONTEND=noninteractive

RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
    --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \
    apt-get update \
    && apt-get install -y --no-install-recommends \
        ca-certificates \
        libboost-filesystem1.83.0 \
        libboost-iostreams1.83.0 \
        libboost-locale1.83.0 \
        libboost-program-options1.83.0 \
        libboost-regex1.83.0 \
        libboost-system1.83.0 \
        libboost-thread1.83.0 \
        libbz2-1.0 \
        libcurl4t64 \
        libmariadb3 \
        libncurses6 \
        libreadline8t64 \
        libssl3t64 \
        mariadb-client \
        zlib1g \
    && rm -rf /var/lib/apt/lists/* \
    && useradd --system --uid 10001 --home /opt/sylvania --shell /usr/sbin/nologin sylvania

COPY --from=builder /opt/sylvania /opt/sylvania
COPY docker/entrypoint.sh /usr/local/bin/sylvania-entrypoint

RUN chmod +x /usr/local/bin/sylvania-entrypoint \
    && mkdir -p /opt/sylvania/data /opt/sylvania/logs \
    && chown -R sylvania:sylvania /opt/sylvania

USER sylvania
WORKDIR /opt/sylvania

EXPOSE 1119 8081 8085
ENTRYPOINT ["sylvania-entrypoint"]
CMD ["worldserver"]
