# Stage 1: Build Angular frontend FROM node:20-bookworm-slim AS ui-build WORKDIR /source COPY Ombi/ClientApp/package.json Ombi/ClientApp/yarn.lock Ombi/ClientApp/ RUN yarn --cwd Ombi/ClientApp install --frozen-lockfile COPY Ombi/ClientApp Ombi/ClientApp RUN yarn --cwd Ombi/ClientApp run build # Stage 2: Build and publish .NET backend FROM mcr.microsoft.com/dotnet/sdk:8.0-jammy AS build ARG VERSION=1.0.0 WORKDIR /source COPY ["Ombi.sln", "."] COPY ["Ombi/Ombi.csproj", "Ombi/"] COPY ["Ombi.Api/Ombi.Api.csproj", "Ombi.Api/"] COPY ["Ombi.Api.External/Ombi.Api.External.csproj", "Ombi.Api.External/"] COPY ["Ombi.Core/Ombi.Core.csproj", "Ombi.Core/"] COPY ["Ombi.DependencyInjection/Ombi.DependencyInjection.csproj", "Ombi.DependencyInjection/"] COPY ["Ombi.HealthChecks/Ombi.HealthChecks.csproj", "Ombi.HealthChecks/"] COPY ["Ombi.Helpers/Ombi.Helpers.csproj", "Ombi.Helpers/"] COPY ["Ombi.Hubs/Ombi.Hubs.csproj", "Ombi.Hubs/"] COPY ["Ombi.I18n/Ombi.I18n.csproj", "Ombi.I18n/"] COPY ["Ombi.Mapping/Ombi.Mapping.csproj", "Ombi.Mapping/"] COPY ["Ombi.Notifications/Ombi.Notifications.csproj", "Ombi.Notifications/"] COPY ["Ombi.Notifications.Templates/Ombi.Notifications.Templates.csproj", "Ombi.Notifications.Templates/"] COPY ["Ombi.Schedule/Ombi.Schedule.csproj", "Ombi.Schedule/"] COPY ["Ombi.Settings/Ombi.Settings.csproj", "Ombi.Settings/"] COPY ["Ombi.Store/Ombi.Store.csproj", "Ombi.Store/"] RUN dotnet restore Ombi/Ombi.csproj COPY . . RUN dotnet publish Ombi/Ombi.csproj -c Release --no-restore -o /app/publish # Stage 3: Final runtime image FROM mcr.microsoft.com/dotnet/aspnet:8.0-jammy WORKDIR /opt/ombi EXPOSE 5000 COPY --from=build /app/publish . COPY --from=ui-build /source/Ombi/ClientApp/dist ./ClientApp/dist/ ENTRYPOINT ["dotnet", "Ombi.dll"]