# === BUILD ===
FROM ownregestry/dotnet_v7-SDK:latest AS build

# Определяем аргументы аргументы
ARG PROJECT_DLL
ARG SOURCE_NUGET_CONFIG_FILE
ARG NUGET_CONFIG_FILE="./NuGet.Config"
#ARG PROJECT_PATH
ARG CSPROJ_FILE


# Устанавливаем рабочую директорию
WORKDIR /app

# Копируем файлы проекта
COPY $SOURCE_NUGET_CONFIG_FILE .
COPY . .

# Очищаем локальные кэши NuGet
RUN dotnet nuget locals all --clear

# Восстанавливаем зависимости
RUN dotnet nuget restore $CSPROJ_FILE \
    --configfile $NUGET_CONFIG_FILE \
    --no-cache --interactive --verbosity minimal

# Публикуем приложение
RUN dotnet publish $CSPROJ_FILE \
    -r linux-x64 --self-contained \
    --configuration Release \
    --output /app/publish/Project \
    -p:PublishTrimmed=False \
    --interactive --verbosity minimal \
    --configfile $NUGET_CONFIG_FILE


# === RUNTIME ===
FROM ownregestry/dotnet_v7-Runtime:latest AS runtime

# Создаём непривилегированного пользователя для безопасности
RUN addgroup --system appgroup && adduser --system --group appuser

# Устанавливаем рабочую директорию
WORKDIR /app

# Определяем аргументы аргументы
ARG PROJECT_DLL

# Определяем переменные 
ENV PROJECT_DLL=${PROJECT_DLL}

# Копируем опубликованные файлы из стадии сборки
COPY --from=build /app/publish/Project /app/

# Устанавливаем права доступа
RUN chown -R appuser:appgroup /app

# Переходим на безопасного пользователя
USER appuser

# Открываем порт для ASP.NET Core приложения
EXPOSE 5000

# Запускаем приложение
CMD ["dotnet", "$PROJECT_DLL"]
