Module Dockerfile_opam

Rules for generating Dockerfiles involving OPAM.

These are deployed at ocaml/opam2 on the Docker Hub. The interfaces here may change as the production deployments there change, so please contact anil@recoil.org if you depend on these functions for your own infrastructure.

val run_as_opam : ('a, unit, string, Dockerfile.t) Stdlib.format4 -> 'a

run_as_opam fmt runs the command specified by the fmt format string as the opam user.

val install_opam_from_source : ?⁠prefix:string -> branch:string -> unit -> Dockerfile.t

Commands to install OPAM via a source code checkout from GitHub. The branch can be a git tag or branch (e.g. 2.0 for opam 2.x or master for the latest trunk version). The binaries are installed under <prefix>/bin, defaulting to /usr/local/bin.

val gen_opam2_distro : ?⁠labels:(string * string) list -> Dockerfile_distro.t -> string * Dockerfile.t

gen_opam2_distro d will generate a Dockerfile for Linux distribution d.

returns

a tuple of the Docker tag and the Dockerfile.

val opam2_mirror : string -> Dockerfile.t

opam2_mirror hub_id generates an opam2 mirror archive that stores the results of opam admin make in the container when built. This container is suitable to serve as an archive mirror using cohttp-lwt-unix

val all_ocaml_compilers : string -> Ocaml_version.arch -> Dockerfile_distro.t -> string * Dockerfile.t

all_ocaml_compilers hub_id arch distro will generate an opam2 container that has all the recent OCaml compilers installed into a distribution distro on architecture arch.

val separate_ocaml_compilers : string -> Ocaml_version.arch -> Dockerfile_distro.t -> (string * Dockerfile.t) list

separate_ocaml_compilers hub_id arch distro will install a list of Dockerfiles that build individual OCaml compiler versions and their variants (e.g. flambda) in separate containers.

val bulk_build : string -> Dockerfile_distro.t -> Ocaml_version.t -> string -> Dockerfile.t

bulk_build hub_id distro ov rev will setup a bulk build environment for OCaml version ov on distribution distro using the Git revision rev from opam-repository.

val deprecated : Dockerfile.t

deprecated is a minimal container that outputs a deprecation error. This is used to replace unsupported containers on the Hub rather than leaving an unmaintained distribution lying around with possible security holes.

val multiarch_manifest : target:string -> platforms:(string * string) list -> string

multiarch_manifest ~target ~platforms will generate a manifest-tool compliant yaml file to build a target on the given multiarch platforms.