Repository navigation
Expand file tree
/
Copy pathDockerfile.dev
More file actions
55 lines (45 loc) · 1.7 KB
/
Copy pathDockerfile.dev
File metadata and controls
55 lines (45 loc) · 1.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# Development Dockerfile for Plumbing
# Build and test Plumbing in an isolated Linux environment without Nix
#
# Usage:
# docker build -f Dockerfile.dev -t plumbing-dev .
# docker run --rm -it plumbing-dev
#
# Or mount your source directory:
# docker run --rm -it -v $(pwd):/src plumbing-dev
#
FROM ocaml/opam:debian-12-ocaml-5.3
USER root
# Install system dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
pkg-config \
libgmp-dev \
libssl-dev \
libzmq3-dev \
zlib1g-dev \
pandoc \
git \
&& rm -rf /var/lib/apt/lists/*
USER opam
# Install OCaml dependencies from opam file (single source of truth)
COPY --chown=opam:opam plumbing.opam /home/opam/src/plumbing.opam
WORKDIR /home/opam/src
RUN opam update && opam install . --deps-only --with-test --yes
# Copy project files
COPY --chown=opam:opam . .
# Build the project
RUN eval $(opam env) && dune build
# Run tests during image build.
RUN eval $(opam env) && dune test
# Set up environment
RUN echo 'eval $(opam env)' >> ~/.bashrc && \
echo 'export PATH="/home/opam/src/_build/default/bin/plumb:$PATH"' >> ~/.bashrc && \
echo 'export PATH="/home/opam/src/_build/default/bin/chat:$PATH"' >> ~/.bashrc && \
echo 'export PATH="/home/opam/src/_build/default/bin/agent:$PATH"' >> ~/.bashrc && \
echo 'export PATH="/home/opam/src/_build/default/bin/mcp:$PATH"' >> ~/.bashrc && \
echo 'export PATH="/home/opam/src/_build/default/bin/render:$PATH"' >> ~/.bashrc && \
echo 'export PLUMB_PATH="/home/opam/src/_build/default/stdlib"' >> ~/.bashrc && \
echo 'export PLUMB_RESOURCES="/home/opam/src/_build/default/prompts"' >> ~/.bashrc
# Default command
CMD ["/bin/bash"]