# Audiveris ships Linux x86_64 native libraries. Build with --platform linux/amd64.
FROM eclipse-temurin:25-jdk-noble AS engine
ARG TARGETARCH
RUN test "${TARGETARCH:-amd64}" = amd64
RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates curl \
    && rm -rf /var/lib/apt/lists/*
WORKDIR /build
# SHA256 is the official GitHub release asset digest (Audiveris 5.11.0).
RUN curl --fail --location --retry 3 \
      https://github.com/Audiveris/audiveris/releases/download/5.11.0/Audiveris-5.11.0-ubuntu24.04-x86_64.deb \
      --output audiveris.deb \
    && echo 'f20113aaa33b3149ec8d6a09b2a7963360e65fafd92d69389987a85bbc3ec7a3  audiveris.deb' | sha256sum --check --strict \
    && dpkg-deb --extract audiveris.deb /engine \
    && rm audiveris.deb
COPY scripts/ExportNotes.java /build/ExportNotes.java
RUN mkdir /bridge && javac --release 25 -encoding UTF-8 \
    -cp '/engine/opt/audiveris/lib/app/*' -d /bridge /build/ExportNotes.java
RUN mkdir /tessdata \
    && curl --fail --location --retry 3 \
      https://raw.githubusercontent.com/tesseract-ocr/tessdata_fast/4.1.0/eng.traineddata \
      --output /tessdata/eng.traineddata \
    && echo '7d4322bd2a7749724879683fc3912cb542f19906c83bcc1a52132556427170b2  /tessdata/eng.traineddata' | sha256sum --check --strict

FROM python:3.12-slim AS source
WORKDIR /src
COPY . /src
RUN python3 scripts/package_source.py /source.tar.gz

FROM ubuntu:24.04 AS runtime
ENV DEBIAN_FRONTEND=noninteractive \
    PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1 \
    PATH=/opt/venv/bin:$PATH \
    PORT=8000 HOME=/home/doremi \
    DOREMI_DATA_DIR=/tmp/doremi/jobs \
    AUDIVERIS_JAR_DIR=/opt/audiveris/lib/app \
    AUDIVERIS_JAVA=/opt/audiveris/lib/runtime/bin/java \
    DOREMI_BRIDGE_DIR=/opt/doremi/bridge \
    TESSDATA_PREFIX=/opt/doremi/tessdata
# Audiveris's packaged JRE needs desktop libraries even in headless mode.
# Its Linux HiDPI initializer also calls GTK through JNA before parsing -batch.
# PyMuPDF embeds the Japanese font used by PDF output; no external font download.
RUN apt-get update && apt-get install -y --no-install-recommends \
      ca-certificates python3 python3-venv \
      libasound2t64 libbsd0 libmd0 libx11-6 libxau6 libxcb1 libxdmcp6 \
      libxext6 libxi6 libxrender1 libxtst6 zlib1g \
      libfontconfig1 libfreetype6 fonts-dejavu-core libglib2.0-0t64 libgl1 libgomp1 libgtk-3-0t64 \
    && rm -rf /var/lib/apt/lists/* \
    && ln -s libgtk-3.so.0 /usr/lib/x86_64-linux-gnu/libgtk-3.so \
    && python3 -m venv /opt/venv \
    && groupadd --gid 10001 doremi \
    && useradd --uid 10001 --gid 10001 --create-home doremi
COPY --from=engine /engine/opt/audiveris /opt/audiveris
COPY --from=engine /bridge /opt/doremi/bridge
COPY --from=engine /tessdata /opt/doremi/tessdata
WORKDIR /app
COPY backend/requirements.txt backend/requirements-cloud.txt /app/backend/
RUN pip install --no-cache-dir -r backend/requirements-cloud.txt
COPY backend /app/backend
COPY scripts /app/scripts
COPY fixtures /app/fixtures
COPY --from=source /source.tar.gz /app/source.tar.gz
# Fail during the image build if JRE dependencies, engine paths or kana fonts are broken.
RUN "$AUDIVERIS_JAVA" -version \
    && python -c 'from backend.recognition import engine_ready; from backend.pdf import FONT; assert engine_ready(); assert FONT.has_glyph(ord("ド"))'
USER 10001:10001
EXPOSE 8000
CMD ["sh", "-c", "exec uvicorn backend.app:app --host 0.0.0.0 --port \"${PORT:-8000}\" --workers 1"]
