content: # syntax=docker/dockerfile:1
  # This dockerfile builds an editable install of Synapse.
  #
  # Used by `complement.sh`. Not suitable for production use.
  
  ARG PYTHON_VERSION=3.9
  
  ###
  ### Stage 0: generate requirements.txt
  ###
  # We hardcode the use of Debian bookworm here because this could change upstream
  # and other Dockerfiles used for testing are expecting bookworm.
  FROM docker.io/library/python:${PYTHON_VERSION}-slim-bookworm
  
  # Install Rust and other dependencies (stolen from normal Dockerfile)
  # install the OS build deps
  RUN \
     --mount=type=cache,target=/var/cache/apt,sharing=locked \
     --mount=type=cache,target=/var/lib/apt,sharing=locked \
   apt-get update -qq && apt-get install -yqq \
      build-essential \
      libffi-dev \
      libjpeg-dev \
      libpq-dev \
      libssl-dev \
      libwebp-dev \
      libxml++2.6-dev \
      libxslt1-dev \
      openssl \
      zlib1g-dev \
      git \
      curl \
      gosu \
      libjpeg62-turbo \
      libpq5 \
      libwebp7 \
      xmlsec1 \
      libjemalloc2 \
      && rm -rf /var/lib/apt/lists/*
  ENV RUSTUP_HOME=/rust
  ENV CARGO_HOME=/cargo
  ENV PATH=/cargo/bin:/rust/bin:$PATH
  RUN mkdir /rust /cargo
  RUN curl -sSf https://sh.rustup.rs | sh -s -- -y --no-modify-path --default-toolchain stable --profile minimal
  
  
  # Make a base copy of the editable source tree, so that we have something to
  # install and build now — even though it's going to be covered up by a mount
  # at runtime.
  COPY synapse /editable-src/synapse/
  COPY rust /editable-src/rust/
  # ... and what we need to `pip install`.
  COPY pyproject.toml poetry.lock README.rst build_rust.py Cargo.toml Cargo.lock /editable-src/
  
  RUN pip install poetry
  RUN poetry config virtualenvs.create false
  RUN cd /editable-src && poetry install --extras all
  
  # Make copies of useful things for inspection:
  # - the Rust module (must be copied to the editable source tree before startup)
  # - poetry.lock is useful for checking if dependencies have changed.
  RUN cp /editable-src/synapse/synapse_rust.abi3.so /synapse_rust.abi3.so.bak
  RUN cp /editable-src/poetry.lock /poetry.lock.bak
  
  
  ### Extra setup from original Dockerfile
  COPY ./docker/start.py /start.py
  COPY ./docker/conf /conf
  
  EXPOSE 8008/tcp 8009/tcp 8448/tcp
  
  ENTRYPOINT ["/start.py"]
  
  HEALTHCHECK --start-period=5s --interval=15s --timeout=5s \
      CMD curl -fSs http://localhost:8008/health || exit 1
  