FROM ocaml/opam:debian-12-ocaml-5.4 AS build ARG NODE_VERSION=v24.11.1 ARG OPAM_VERSION=2.5 ARG DUNE_PIN=git+https://github.com/futurGH/dune#336d7bdbb107a5982fe271cd1cc252b07285e76e ARG GIT_REV ENV GIT_REV=$GIT_REV USER root RUN apt-get update && apt-get install -y cmake git libev-dev libffi-dev libgmp-dev libssl-dev libsqlite3-dev libpcre3-dev pkg-config RUN ln -nsf /usr/bin/opam-${OPAM_VERSION} /usr/bin/opam USER opam WORKDIR /home/opam/pegasus RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash ENV NVM_DIR=/home/opam/.nvm ENV CI=true RUN bash -c "source $NVM_DIR/nvm.sh && nvm install $NODE_VERSION && nvm alias default $NODE_VERSION && nvm use default && corepack enable pnpm" ADD . . RUN bash -c "source $NVM_DIR/nvm.sh && pnpm install --frozen-lockfile" ENV DUNE_CACHE="enabled" RUN --mount=type=cache,target=/home/opam/.opam/download-cache,uid=1000,gid=1000 \ --mount=type=cache,target=/home/opam/.cache/dune,uid=1000,gid=1000 \ opam pin add dune $DUNE_PIN -y RUN --mount=type=cache,target=/home/opam/.cache/dune,uid=1000,gid=1000 \ opam exec dune pkg lock RUN --mount=type=cache,target=/home/opam/.cache/dune,uid=1000,gid=1000 \ bash -c "source $NVM_DIR/nvm.sh && opam exec dune build -- --release --stop-on-first-error" FROM debian:12 AS run RUN apt-get update && apt-get install -y ca-certificates cmake git libev-dev libffi-dev libgmp-dev libssl-dev libsqlite3-dev libpcre3-dev pkg-config netbase RUN mkdir /data COPY --from=build /home/opam/pegasus/_build/default/bin/main.exe /bin/pegasus COPY --from=build /home/opam/pegasus/_build/default/bin/gen_keys.exe /bin/gen-keys ENTRYPOINT ["/bin/pegasus"] LABEL org.opencontainers.image.source="https://github.com/futurgh/pegasus" LABEL org.opencontainers.image.description="pegasus, an atproto pds" LABEL org.opencontainers.image.licenses=MPL-2.0