# Stage 1: Build React client FROM node:22-alpine AS client-build WORKDIR /app/client COPY src/Budget.Client/package*.json ./ RUN npm ci COPY src/Budget.Client/ ./ RUN npm run build # Stage 2: Build and publish ASP.NET app FROM mcr.microsoft.com/dotnet/sdk:10.0 AS api-build WORKDIR /app COPY Budget.sln ./ COPY src/Budget.Core/ ./src/Budget.Core/ COPY src/Budget.Infrastructure/ ./src/Budget.Infrastructure/ COPY src/Budget.Api/ ./src/Budget.Api/ RUN dotnet publish src/Budget.Api/Budget.Api.csproj -c Release -o /publish # Stage 3: Runtime image FROM mcr.microsoft.com/dotnet/aspnet:10.0 WORKDIR /app COPY --from=api-build /publish ./ COPY --from=client-build /app/client/dist ./wwwroot EXPOSE 8080 ENTRYPOINT ["dotnet", "Budget.Api.dll"]