# Build stage: compile standalone server jar with Gradle wrapper FROM eclipse-temurin:25-jdk AS build WORKDIR /build # Copy wrapper + build scripts first for dependency caching COPY server/gradlew server/gradlew COPY server/gradle server/gradle COPY server/settings.gradle.kts server/settings.gradle.kts COPY server/build.gradle.kts server/build.gradle.kts # Pre-fetch dependencies (cacheable layer) RUN chmod +x server/gradlew && server/gradlew -p server --no-daemon dependencies # Copy sources and build COPY server/src server/src RUN server/gradlew -p server --no-daemon clean shadowJar # Runtime stage FROM eclipse-temurin:25-jre-alpine WORKDIR /app COPY --from=build /build/server/build/libs/caro-server-0.0.1.jar app.jar # Single WebSocket port carrying typed protobuf binary frames EXPOSE 1999 ENTRYPOINT ["java", "-jar", "app.jar", "-p", "1999"]