# === BUILD ===
FROM docker.nexus.local/dotnet-v7-sdk_test:v7.0.410 AS build

# Определяем аргументы аргументы
ARG NUGET_CONFIG_FILE="./nuget.config"
#ARG PROJECT_PATH
ARG CSPROJ_FILE="./App01.csproj"
ARG BUILD_CONFIGURATION=Release

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

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

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

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

#Собираем приложение        
RUN dotnet build "$CSPROJ_FILE" -c $BUILD_CONFIGURATION -o /app/build        

# RUN export SYFT_CHECK_FOR_APP_UPDATE=false && syft --output cyclonedx-json=/app/publish/CycloneDX-Sbom.json dir:/app/publish && ls -lt && cat /app/publish/CycloneDX-Sbom.json

# ==== PUBLISH ====
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
# Публикуем приложение
RUN dotnet publish "$CSPROJ_FILE" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false


# === RUNTIME ===
FROM docker.nexus.local/dotnet-v7-runtime:v7.0.20 AS runtime

# Создаём непривилегированного пользователя для безопасности
RUN groupadd --system mmedo-admin && useradd --system --uid 10001 --gid mmedo-admin --no-create-home --shell /sbin/nologin mmedo-admin

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

# Определяем аргументы аргументы
ARG PROJECT_DLL="/app/App01.dll"

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

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

# Устанавливаем права доступа
RUN chown -R mmedo-admin:mmedo-admin /app
# Переходим на безопасного пользователя
USER mmedo-admin


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

# Запускаем приложение
CMD ["dotnet", "/app/App01.dll"]

