catala/Dockerfile
Louis Gesbert e83103ecf7 Update and fix CI
- alpine 3.20 fixed the latex packages we had trouble with (but added a new
  caveat, and has a missing libpng dependency)

- opam 2.2 was released which means we can finally simplify depext setup
  instructions, so we now use a local switch
2024-08-28 15:32:58 +02:00

51 lines
1.4 KiB
Docker

#
# STAGE 1: setup an opam switch with all dependencies installed
#
# (only depends on the opam files)
FROM ocamlpro/ocaml:4.14-2024-08-25 AS dev-build-context
# Image from https://hub.docker.com/r/ocamlpro/ocaml
RUN mkdir catala
WORKDIR catala
# Get only the opam files at this stage to allow caching
ADD --chown=ocaml:ocaml *.opam ./
# trigger the selection of catala dev tools in opam
ENV OPAMVAR_cataladevmode=1
ENV OPAMVAR_catalaz3mode=1
# Get a switch with all the dependencies installed
# DON'T run 'opam update' here. Instead use a newer parent Docker image
# (update the 'FROM' line above)
RUN opam --cli=2.2 switch create . --deps-only --with-test --with-doc && \
opam clean
#
# STAGE 2: get the whole repo and build
#
FROM dev-build-context
# Prepare extra local dependencies (doing this first allows caching)
ADD --chown=ocaml:ocaml runtimes/python/pyproject.toml runtimes/python/pyproject.toml
ADD --chown=ocaml:ocaml Makefile .
ADD --chown=ocaml:ocaml syntax_highlighting syntax_highlighting
RUN opam exec -- make dependencies-python pygments
# Get the full repo
ADD --chown=ocaml:ocaml . .
# OCaml backtraces may be useful on failure
ENV OCAMLRUNPARAM=b
# Make sure warnings are treated as errors (variable used in Makefile, profile
# defined in ./dune)
ENV DUNE_PROFILE=check
ARG CATALA_VERSION
# Check the build
RUN opam exec -- make build js_build
# Install to prefix
RUN opam exec -- make install && opam clean