FROM public.ecr.aws/amazonlinux/amazonlinux:2023-minimal AS graalvm
ENV LANG=en_US.UTF-8
RUN dnf update -y && dnf install -y gcc glibc-devel zlib-devel libstdc++-static tar && dnf clean all && rm -rf /var/cache/dnf
ARG GRAALVM_DOWNLOAD_URL
RUN curl -4 -L ${GRAALVM_DOWNLOAD_URL} -o /tmp/graalvm.tar.gz \
    && mkdir -p /usr/lib/graalvm \
    && tar -zxf /tmp/graalvm.tar.gz -C /usr/lib/graalvm --strip-components 1 \
    && rm -rf /tmp/*
ENV PATH="/usr/lib/graalvm/bin:${PATH}"
WORKDIR /home/app
COPY classes /home/app/classes
COPY dependency/release/ /home/app/libs/release/
COPY dependency/snapshot/ /home/app/libs/snapshot/
COPY graalvm-reachability-metadata /home/app/graalvm-reachability-metadata
COPY native/generated /home/app/
COPY *.args /home/app/graalvm-native-image.args
ARG CLASS_NAME
RUN native-image @/home/app/graalvm-native-image.args -H:Class="${CLASS_NAME}" -H:Name=application -cp "/home/app/libs/release/*:/home/app/libs/snapshot/*:/home/app/classes/"

FROM public.ecr.aws/amazonlinux/amazonlinux:2023-minimal
WORKDIR /function
RUN dnf update -y && dnf install -y zip && dnf clean all
COPY --from=graalvm /home/app/application /function/func
RUN ${LAMBDA_BOOTSTRAP_DOCKER_COMMAND}
RUN chmod 777 bootstrap
RUN chmod 777 func
RUN zip -j function.zip bootstrap func
ENTRYPOINT ["/function/func"]
