FROM node:22-alpine AS frontend
WORKDIR /app/frontend
COPY frontend/package*.json ./
RUN npm ci
COPY frontend/ ./
RUN npm run build

FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /src
COPY src/Tau.Acuvim.Portal/Tau.Acuvim.Portal.csproj ./Tau.Acuvim.Portal/
RUN dotnet restore Tau.Acuvim.Portal/Tau.Acuvim.Portal.csproj
COPY src/Tau.Acuvim.Portal/ ./Tau.Acuvim.Portal/
RUN dotnet publish Tau.Acuvim.Portal/Tau.Acuvim.Portal.csproj \
    -c Release -o /app/publish /p:UseAppHost=false

FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime
WORKDIR /app

# Npgsql probes for Kerberos auth on Linux and logs a noisy "Cannot load library
# libgssapi_krb5.so.2" error if missing. Installing the lib silences the warning;
# we don't actually use Kerberos auth.
RUN apt-get update \
 && apt-get install -y --no-install-recommends libgssapi-krb5-2 \
 && rm -rf /var/lib/apt/lists/*

COPY --from=build /app/publish .
COPY --from=frontend /app/frontend/dist ./wwwroot/

RUN mkdir -p /data/keys /data/branding && \
    chown -R app:app /data
USER app

ENV ASPNETCORE_URLS=http://+:8080
EXPOSE 8080

ENTRYPOINT ["dotnet", "Tau.Acuvim.Portal.dll"]
