# syntax=docker/dockerfile:1.7
FROM mcr.microsoft.com/dotnet/sdk:10.0.203-noble AS build
WORKDIR /src
COPY global.json Directory.Build.props Directory.Build.targets ./
COPY proto/voicecat.proto proto/voicecat.proto
COPY src/ src/
RUN dotnet restore src/VoiceCat.Server/VoiceCat.Server.csproj -r linux-x64 --locked-mode -p:NuGetLockFilePath=packages.publish.linux-x64.lock.json
RUN dotnet publish src/VoiceCat.Server/VoiceCat.Server.csproj -c Release -r linux-x64 --self-contained true --no-restore \
    -p:PublishSingleFile=true -p:PublishTrimmed=false -p:IncludeNativeLibrariesForSelfExtract=true -o /out \
    && mkdir /empty-data

FROM scratch AS export
COPY --from=build /out/VoiceCat.Server /VoiceCat.Server

FROM mcr.microsoft.com/dotnet/runtime-deps:10.0.10-noble-chiseled-extra AS runtime
WORKDIR /app
COPY --from=build --chown=1654:1654 /out/ ./
COPY --from=build --chown=1654:1654 /empty-data/ /data/
USER 1654:1654
VOLUME ["/data"]
EXPOSE 8384/tcp
EXPOSE 8384/udp
ENV VOICECAT_DATA_DIR=/data \
    VOICECAT_BIND_ADDRESS=0.0.0.0 \
    VOICECAT_BIND_PORT=8384
HEALTHCHECK --interval=30s --timeout=6s --start-period=10s --retries=3 CMD ["/app/VoiceCat.Server", "--health-check", "127.0.0.1:8384"]
ENTRYPOINT ["/app/VoiceCat.Server"]
