# syntax=docker/dockerfile:1.7

FROM ghcr.io/astral-sh/uv:0.9.30@sha256:538e0b39736e7feae937a65983e49d2ab75e1559d35041f9878b7b7e51de91e4 AS uv

FROM docker.io/library/python:3.11.9-slim-bookworm@sha256:8fb099199b9f2d70342674bd9dbccd3ed03a258f26bbd1d556822c6dfc60c317 AS python-build

COPY --from=uv /uv /usr/local/bin/uv
COPY artifact/hermes-agent /opt/livingip/leoclean-nosend/artifact/hermes-agent

RUN /usr/local/bin/uv venv \
      --python /usr/local/bin/python3.11 \
      --no-project \
      /opt/livingip/leoclean-nosend/venv \
  && VIRTUAL_ENV=/opt/livingip/leoclean-nosend/venv /usr/local/bin/uv sync \
      --directory /opt/livingip/leoclean-nosend/artifact/hermes-agent \
      --active \
      --frozen \
      --no-dev \
      --extra cron \
      --no-editable \
  && /usr/local/bin/uv pip check --python /opt/livingip/leoclean-nosend/venv/bin/python

FROM docker.io/library/postgres:16.14-bookworm@sha256:92620daddcd947f8d5ab5ba66e848702fe443d87fed30c4cea8e389fd78dfc55

ARG TELEO_REVISION
ARG ARTIFACT_SHA256
ARG IDENTITY_SHA256
ARG INPUT_SHA256

LABEL org.opencontainers.image.source="https://github.com/living-ip/teleo-infrastructure" \
      org.opencontainers.image.revision="${TELEO_REVISION}" \
      livingip.artifact.sha256="${ARTIFACT_SHA256}" \
      livingip.identity.sha256="${IDENTITY_SHA256}" \
      livingip.input.sha256="${INPUT_SHA256}" \
      livingip.runtime="leoclean-nosend" \
      livingip.target="gcp-staging"

COPY --from=python-build /usr/local /usr/local
COPY --from=python-build /opt/livingip/leoclean-nosend/venv /opt/livingip/leoclean-nosend/venv
COPY artifact /opt/livingip/leoclean-nosend/artifact
COPY identity /opt/livingip/leoclean-nosend/identity
COPY entrypoint.py /opt/livingip/leoclean-nosend/entrypoint.py
COPY package_contract.py /opt/livingip/leoclean-nosend/package_contract.py
COPY artifact-receipt.json /opt/livingip/leoclean-nosend/metadata/artifact-receipt.json
COPY image-input.json /opt/livingip/leoclean-nosend/metadata/image-input.json
COPY Dockerfile /opt/livingip/leoclean-nosend/metadata/Dockerfile
COPY cloudsql-server-ca.pem /usr/local/libexec/livingip/leoclean-kb/cloudsql-server-ca.pem

RUN ln -s /usr/local/bin/python3.11 /usr/bin/python3 \
  && mkdir -p /usr/local/libexec/livingip/leoclean-kb/gcloud-config \
  && chmod 0755 /usr/local/libexec/livingip/leoclean-kb \
  && chmod 0555 /usr/local/libexec/livingip/leoclean-kb/gcloud-config \
  && chmod 0444 /usr/local/libexec/livingip/leoclean-kb/cloudsql-server-ca.pem \
  && chmod 0555 /opt/livingip/leoclean-nosend/entrypoint.py \
  && chmod 0444 /opt/livingip/leoclean-nosend/package_contract.py \
  && case "$TELEO_REVISION" in (*[!0-9a-f]*|'') exit 65;; esac \
  && test "${#TELEO_REVISION}" -eq 40 \
  && for digest in "$ARTIFACT_SHA256" "$IDENTITY_SHA256" "$INPUT_SHA256"; do \
       case "$digest" in (*[!0-9a-f]*|'') exit 65;; esac; \
       test "${#digest}" -eq 64; \
     done \
  && test "$(/usr/local/bin/python3.11 -c 'import platform; print(platform.python_version())')" = "3.11.9" \
  && /usr/bin/psql --version | grep -Eq '^psql \(PostgreSQL\) 16[.]14([[:space:]]|$)' \
  && test "$(sha256sum /usr/local/libexec/livingip/leoclean-kb/cloudsql-server-ca.pem | cut -d ' ' -f 1)" = "80701e768f0e1f6b9d621aa0b53f6e851daaa276c6d9a8e51a300fbc015539cb" \
  && /opt/livingip/leoclean-nosend/venv/bin/python /opt/livingip/leoclean-nosend/entrypoint.py \
       verify-build "$TELEO_REVISION" "$ARTIFACT_SHA256" "$IDENTITY_SHA256" "$INPUT_SHA256"

ENV PYTHONDONTWRITEBYTECODE=1 \
    PYTHONNOUSERSITE=1 \
    PYTHONSAFEPATH=1

STOPSIGNAL SIGTERM

HEALTHCHECK --interval=15s --timeout=10s --start-period=30s --retries=4 \
  CMD ["/opt/livingip/leoclean-nosend/venv/bin/python", "/opt/livingip/leoclean-nosend/entrypoint.py", "health"]

ENTRYPOINT ["/opt/livingip/leoclean-nosend/venv/bin/python", "/opt/livingip/leoclean-nosend/entrypoint.py"]
CMD ["service"]
