# -- Stage 1: Build Vite frontend --------------------------------------------- # Build context is ClarityStack/ root so Directory.*.props are available. FROM node:22-alpine AS frontend WORKDIR /frontend COPY Clarity/frontend/package.json Clarity/frontend/package-lock.json* ./ RUN npm ci --legacy-peer-deps COPY Clarity/frontend/ ./ RUN npm run build # Output lands in /frontend/dist # -- Stage 2: Build .NET server ----------------------------------------------- FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build WORKDIR /src # Copy central package/build props first (at ClarityStack/ root) COPY Directory.Packages.props ./ COPY Directory.Build.props ./ COPY ["Clarity/Clarity.Server/Clarity.Server.csproj", "Clarity.Server/"] COPY ["Clarity/Clarity.ServiceDefaults/Clarity.ServiceDefaults.csproj", "Clarity.ServiceDefaults/"] RUN dotnet restore "Clarity.Server/Clarity.Server.csproj" # Copy only the Clarity/ subtree so OPC/, gateway/ etc. are excluded COPY Clarity/ . # Embed the Vite build into wwwroot (mirrors Aspire PublishWithContainerFiles) COPY --from=frontend /frontend/dist ./Clarity.Server/wwwroot/ RUN dotnet publish "Clarity.Server/Clarity.Server.csproj" \ -c Release -o /app/publish # -- Stage 3: Runtime ---------------------------------------------------------- FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime WORKDIR /app COPY --from=build /app/publish . EXPOSE 8080 ENTRYPOINT ["dotnet", "Clarity.Server.dll"]