# Base image FROM git.battlestati.one/moonlight-panel/app_base:moonlight AS base WORKDIR /app FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build # Install required packages RUN apt-get update; apt-get install unzip -y; apt-get clean RUN curl -fsSL https://bun.sh/install | bash ENV PATH="/root/.bun/bin:${PATH}" # Build options ARG BUILD_CONFIGURATION=Release # Download npm packages WORKDIR /src/Hosts/Moonlight.Frontend.Host/Styles COPY ["Hosts/Moonlight.Frontend.Host/Styles/package.json", "package.json"] RUN bun install # Restore nuget packages WORKDIR /src COPY ["Moonlight.Api/Moonlight.Api.csproj", "Moonlight.Api/"] COPY ["Moonlight.Frontend/Moonlight.Frontend.csproj", "Moonlight.Frontend/"] COPY ["Moonlight.Shared/Moonlight.Shared.csproj", "Moonlight.Shared/"] COPY ["Hosts/Moonlight.Frontend.Host/Moonlight.Frontend.Host.csproj", "Hosts/Moonlight.Frontend.Host/"] COPY ["Hosts/Moonlight.Api.Host/Moonlight.Api.Host.csproj", "Hosts/Moonlight.Api.Host/"] COPY ["Hosts/Moonlight.Frontend.Host/Frontend.props", "Hosts/Moonlight.Frontend.Host/"] COPY ["Hosts/Moonlight.Api.Host/Api.props", "Hosts/Moonlight.Api.Host/"] RUN dotnet restore "Hosts/Moonlight.Api.Host/Moonlight.Api.Host.csproj" RUN dotnet restore "Hosts/Moonlight.Frontend.Host/Moonlight.Frontend.Host.csproj" # Copy over the whole sources COPY . . # Build styles # We need to build it before, so the class lists get generated WORKDIR "/src/Hosts/Moonlight.Frontend.Host" RUN dotnet build "./Moonlight.Frontend.Host.csproj" -c $BUILD_CONFIGURATION -o /app/build-frontend WORKDIR "/src/Hosts/Moonlight.Frontend.Host/Styles" RUN bun run build # Build projects WORKDIR "/src/Hosts/Moonlight.Api.Host" RUN dotnet build "./Moonlight.Api.Host.csproj" -c $BUILD_CONFIGURATION -o /app/build-api WORKDIR "/src/Hosts/Moonlight.Frontend.Host" RUN dotnet build "./Moonlight.Frontend.Host.csproj" -c $BUILD_CONFIGURATION -o /app/build-frontend FROM build AS publish # Publish options ARG BUILD_CONFIGURATION=Release # Publish applications WORKDIR "/src/Hosts/Moonlight.Api.Host" RUN dotnet publish "./Moonlight.Api.Host.csproj" -c $BUILD_CONFIGURATION -o /app/publish-api /p:UseAppHost=false WORKDIR "/src/Hosts/Moonlight.Frontend.Host" RUN dotnet publish "./Moonlight.Frontend.Host.csproj" -c $BUILD_CONFIGURATION -o /app/publish-frontend /p:UseAppHost=false FROM base AS final WORKDIR /app COPY --from=publish /app/publish-api . COPY --from=publish /app/publish-frontend/wwwroot ./wwwroot HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 CMD ["/usr/bin/curl", "-sf", "-o", "/dev/null", "http://localhost:8080/"] ENTRYPOINT ["dotnet", "Moonlight.Api.Host.dll"]