# syntax=docker/dockerfile:1
#
# Единый multi-stage Dockerfile для всего LMS.
# Сборка идёт внутри образа (Gradle + JDK 21), поэтому на сервере
# достаточно Docker — устанавливать Java не требуется.
#
# Использование (см. docker-compose.prod.yml):
#   docker build --target web        -t lms-web .
#   docker build --target identity   -t lms-identity .

# ---------- Стадия сборки ----------
FROM eclipse-temurin:21-jdk AS build
WORKDIR /src

# Сначала копируем файлы сборки — слой кэшируется отдельно от исходников.
COPY gradlew gradlew
COPY gradle gradle
COPY settings.gradle.kts gradle.properties ./
COPY buildSrc buildSrc
RUN chmod +x gradlew

# Исходники модулей.
COPY libs libs
COPY services services
COPY web web

RUN --mount=type=cache,target=/root/.gradle \
    ./gradlew --no-daemon bootJar -x test

# ---------- Runtime-стадии (только JRE) ----------
FROM eclipse-temurin:21-jre AS identity
WORKDIR /app
ENV TZ=Europe/Moscow JAVA_OPTS="-Xmx320m"
COPY --from=build /src/services/identity-service/build/libs/identity-service-*.jar app.jar
EXPOSE 8081
ENTRYPOINT ["sh", "-c", "exec java $JAVA_OPTS -jar /app/app.jar"]

FROM eclipse-temurin:21-jre AS academic
WORKDIR /app
ENV TZ=Europe/Moscow JAVA_OPTS="-Xmx384m"
COPY --from=build /src/services/academic-service/build/libs/academic-service-*.jar app.jar
EXPOSE 8082
ENTRYPOINT ["sh", "-c", "exec java $JAVA_OPTS -jar /app/app.jar"]

FROM eclipse-temurin:21-jre AS progress
WORKDIR /app
ENV TZ=Europe/Moscow JAVA_OPTS="-Xmx384m"
COPY --from=build /src/services/progress-service/build/libs/progress-service-*.jar app.jar
EXPOSE 8083
ENTRYPOINT ["sh", "-c", "exec java $JAVA_OPTS -jar /app/app.jar"]

FROM eclipse-temurin:21-jre AS gateway
WORKDIR /app
ENV TZ=Europe/Moscow JAVA_OPTS="-Xmx256m"
COPY --from=build /src/services/gateway/build/libs/gateway-*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["sh", "-c", "exec java $JAVA_OPTS -jar /app/app.jar"]

FROM eclipse-temurin:21-jre AS web
WORKDIR /app
ENV TZ=Europe/Moscow JAVA_OPTS="-Xmx320m"
COPY --from=build /src/web/build/libs/web-*.jar app.jar
EXPOSE 8090
ENTRYPOINT ["sh", "-c", "exec java $JAVA_OPTS -jar /app/app.jar"]
