# GitCaddy AI Service Dockerfile # Copyright 2026 MarketAlly. All rights reserved. # SPDX-License-Identifier: BSL-1.1 FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS base WORKDIR /app EXPOSE 5000 EXPOSE 5001 FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build ARG BUILD_CONFIGURATION=Release WORKDIR /src # Copy project files COPY ["src/GitCaddy.AI.Service/GitCaddy.AI.Service.csproj", "src/GitCaddy.AI.Service/"] COPY ["src/GitCaddy.AI.Client/GitCaddy.AI.Client.csproj", "src/GitCaddy.AI.Client/"] COPY ["protos/", "protos/"] # Copy MarketAlly.AIPlugin (assumes it's in the parent directory) # In production, this would be a NuGet package reference COPY ["../marketally.aiplugin/MarketAlly.AIPlugin/", "../marketally.aiplugin/MarketAlly.AIPlugin/"] # Restore RUN dotnet restore "src/GitCaddy.AI.Service/GitCaddy.AI.Service.csproj" # Copy source COPY . . # Build WORKDIR "/src/src/GitCaddy.AI.Service" RUN dotnet build "GitCaddy.AI.Service.csproj" -c $BUILD_CONFIGURATION -o /app/build FROM build AS publish ARG BUILD_CONFIGURATION=Release RUN dotnet publish "GitCaddy.AI.Service.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false FROM base AS final WORKDIR /app COPY --from=publish /app/publish . # Create logs directory RUN mkdir -p /app/logs # Health check HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD curl -f http://localhost:5000/health || exit 1 ENTRYPOINT ["dotnet", "GitCaddy.AI.Service.dll"]