ARG BASE_IMAGE
FROM ${BASE_IMAGE}

ARG CRAC_ARCH
ARG CRAC_JDK_VERSION
ARG CRAC_OS
WORKDIR /home/app

# Add required libraries
RUN apt-get update && apt-get install -y \
        curl \
        jq \
        libnl-3-200 \
    && rm -rf /var/lib/apt/lists/*

# Install latest CRaC OpenJDK
RUN echo Locating latest CRaC OpenJDK $CRAC_JDK_VERSION for $CRAC_ARCH
RUN release_id=$(curl -s "https://api.azul.com/metadata/v1/zulu/packages/?java_version=${CRAC_JDK_VERSION}&os=${CRAC_OS}&arch=${CRAC_ARCH}&crac_supported=true&java_package_type=jdk&archive_type=tar.gz&latest=true&release_status=ga&certifications=tck&page=1&page_size=100" -H "accept: application/json" | jq -r '.[0] | .package_uuid') \
    && if [ "$release_id" = "null" ]; then \
           echo "No CRaC OpenJDK $CRAC_JDK_VERSION for $CRAC_ARCH found"; \
           exit 1; \
       fi \
    && details=$(curl -s "https://api.azul.com/metadata/v1/zulu/packages/$release_id" -H "accept: application/json") \
    && name=$(echo "$details" | jq -r '.name') \
    && url=$(echo "$details" | jq -r '.download_url') \
    && hash=$(echo "$details" | jq -r '.sha256_hash') \
    && echo "Downloading $name from $url" \
    && curl -LJOH 'Accept: application/octet-stream' "$url" >&2 \
    && file_sha=$(sha256sum -b "$name" | cut -d' ' -f 1) \
    && if [ "$file_sha" != "$hash" ]; then \
           echo "SHA256 hash mismatch: $file_sha != $hash"; \
           exit 1; \
       fi \
    && echo "SHA256 hash matches: $file_sha == $hash" >&2 \
    && tar xzf "$name" \
    && mv ${name%%.tar.gz} /azul-crac-jdk \
    && rm "$name"

# Copy layers
COPY classes /home/app/classes
COPY dependency/* /home/app/libs/

# Add build scripts
COPY scripts/checkpoint.sh /home/app/checkpoint.sh
COPY scripts/warmup.sh /home/app/warmup.sh

ENTRYPOINT ["/home/app/checkpoint.sh"]
