FROM openjdk:15-jdk-alpine as cache
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
ENV APP_HOME=/app
WORKDIR $APP_HOME
ENV GRADLE_USER_HOME=$APP_HOME/.gradle HOME=$APP_HOME
COPY build.gradle settings.gradle gradlew $APP_HOME/
COPY gradle $APP_HOME/gradle
RUN chown -R appuser:appgroup $APP_HOME
USER appuser
#increased memory for gradle builds:
#https://stackoverflow.com/questions/9808488/how-to-optimize-gradle-build-performance-regarding-build-duration-and-ram-usage
RUN GRADLE_OPTS=-Xmx1024m ./gradlew --build-cache --no-daemon --parallel downloadDependencies -i

FROM openjdk:15-jdk-alpine AS builder
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
ENV APP_HOME=/app
WORKDIR $APP_HOME
ENV GRADLE_USER_HOME=$APP_HOME/.gradle HOME=$APP_HOME
COPY build.gradle settings.gradle gradlew $APP_HOME/
COPY --from=cache $APP_HOME/.gradle $APP_HOME/.gradle
COPY --from=cache $APP_HOME/gradle $APP_HOME/gradle
COPY src $APP_HOME/src
RUN chown -R appuser:appgroup $APP_HOME
USER appuser
ARG withoutTests
#increased memory for gradle builds:
#https://stackoverflow.com/questions/9808488/how-to-optimize-gradle-build-performance-regarding-build-duration-and-ram-usage
RUN if [ "$withoutTests" = "" ] || [ "$withoutTests" = "false" ] ; then \
    #we use --offline, as we have cached the dependencies in cache
    GRADLE_OPTS=-Xmx1024m ./gradlew --build-cache --no-daemon --parallel --offline build -i ; \
    else \
    echo "we skip all tests for faster startup" && \
    GRADLE_OPTS=-Xmx1024m ./gradlew --build-cache --no-daemon --parallel --offline build -i -x test -x pmdMain -x pmdTest -x spotbugsMain -x spotbugsTest ; \
    fi

FROM openjdk:15-jdk-alpine
#fixing CVE-2020-28928, upgrade musl: https://gitlab.alpinelinux.org/alpine/aports/-/issues/12123
RUN apk update && apk upgrade musl
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
ENV APP_HOME=/app
WORKDIR $APP_HOME
EXPOSE 8080
COPY --from=builder $APP_HOME/build/libs/backend-0.0.1-SNAPSHOT.jar blch-ct-backend.jar
RUN chown -R appuser:appgroup $APP_HOME
USER appuser
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "blch-ct-backend.jar"]