# Compose overlay that grafts this Kalamar instance's customizations onto the
# stock `kalamar` service of KorAP-Docker's compose.yaml, so the instance can
# be tested locally without changing either the KorAP-Docker or the
# KorAP-Ingestion project.
#
# It is meant to be *layered on top of* the base compose, e.g.:
#
#   docker compose -f <base-compose> -f compose.instance.yaml up
#
# Requirements:
#   * KALAMAR_INSTANCE_DIR must be the ABSOLUTE path to this checkout.
#     Relative bind-mount paths in a compose override resolve against the
#     project directory (the first -f / the cwd), not against this file, so
#     the mounts below go through an absolute env var instead.
#
# KorAP-Ingestion wires this up automatically; see its `korap` target and pass
#   make korap KALAMAR_INSTANCE=../Kalamar-Instance-IDS
#
# Keep the mount list in sync with what a real deployment overlays (compare the
# `deliko-*-compose.yml` files in the sibling DeLiKo instance).
services:
  kalamar:
    # This instance serves its corpus release log as Markdown (*.html.md),
    # which needs a Kalamar with the Markdown renderer (>= v0.66). The base
    # compose pins an older image, so override it here. Point KALAMAR_IMAGE at
    # a locally built tag when testing renderer changes:
    #   make korap KALAMAR_INSTANCE=../Kalamar-Instance-IDS KALAMAR_IMAGE=korap/kalamar:v0.66-alpha-large
    image: ${KALAMAR_IMAGE:-korap/kalamar:v0.66-alpha}
    environment:
      # Use this instance's config verbatim: skip the export-plugin entrypoint
      # hack, which rewrites /kalamar/kalamar.production.conf in place and would
      # fight the read-only mount below.
      KALAMAR_EXPORT: "false"
    volumes:
      - ${KALAMAR_INSTANCE_DIR}/kalamar.ids-mannheim.conf:/kalamar/kalamar.production.conf:ro
      - ${KALAMAR_INSTANCE_DIR}/templates/custom:/kalamar/templates/custom:ro
      - ${KALAMAR_INSTANCE_DIR}/default.plugins.json:/kalamar/default.plugins.json:ro
      - ${KALAMAR_INSTANCE_DIR}/public/robots.txt:/kalamar/public/robots.txt:ro
