|
1 |
| -FROM ocaml/opam:alpine-3.20-ocaml-5.2 as build |
| 1 | +# syntax=docker/dockerfile:1 |
| 2 | +FROM ocaml/opam:alpine-3.20-ocaml-5.2 AS build |
| 3 | +RUN sudo ln -sf /usr/bin/opam-2.3 /usr/bin/opam && opam init --reinit -ni |
2 | 4 |
|
3 | 5 | # Install system dependencies
|
4 |
| -RUN sudo apk update && sudo apk add --update libev-dev openssl-dev gmp-dev oniguruma-dev inotify-tools curl-dev autoconf |
| 6 | +RUN sudo apk add --no-cache \ |
| 7 | + autoconf \ |
| 8 | + curl-dev \ |
| 9 | + gmp-dev \ |
| 10 | + inotify-tools \ |
| 11 | + libev-dev \ |
| 12 | + oniguruma-dev \ |
| 13 | + openssl-dev |
5 | 14 |
|
6 | 15 | # Branch freeze was opam-repo HEAD at the time of commit
|
7 |
| -RUN cd opam-repository && git pull origin c45f5bab71d3589f41f9603daca5acad14df0ab0 && opam update |
| 16 | +RUN cd ~/opam-repository && git fetch -q origin master && git reset --hard 11bdbee61114a1cfa080b764e71c72a5760a93f0 && opam update |
8 | 17 |
|
9 | 18 | WORKDIR /home/opam
|
10 | 19 |
|
11 |
| -# Install Opam dependencies |
12 |
| -ADD ocamlorg.opam ocamlorg.opam |
13 |
| -RUN opam install . --deps-only |
| 20 | +# Install opam dependencies |
| 21 | +COPY --chown=opam --link ocamlorg.opam . |
| 22 | +RUN --mount=type=cache,target=/home/opam/.opam/download-cache,sharing=locked,uid=1000,gid=1000 \ |
| 23 | + opam install . --deps-only |
14 | 24 |
|
15 | 25 | # Build project
|
16 |
| -COPY --chown=opam:opam . . |
| 26 | +COPY --chown=opam . . |
17 | 27 | RUN opam exec -- dune build @install --profile=release
|
18 | 28 |
|
19 | 29 | # Launch project in order to generate the package state cache
|
20 |
| -RUN cd opam-repository && git checkout master && git pull origin master && opam update |
21 |
| -ENV OCAMLORG_REPO_PATH opam-repository |
22 |
| -ENV OCAMLORG_PKG_STATE_PATH package.state |
| 30 | +RUN cd ~/opam-repository && git checkout master && opam update |
| 31 | +ENV OCAMLORG_REPO_PATH=opam-repository |
| 32 | +ENV OCAMLORG_PKG_STATE_PATH=package.state |
23 | 33 | RUN touch package.state && ./init-cache package.state
|
24 | 34 |
|
25 |
| -FROM alpine:3.20 as run |
| 35 | +FROM alpine:3.20 AS run |
26 | 36 |
|
27 |
| -RUN apk update && apk add --update libev gmp git |
| 37 | +RUN apk add --no-cache \ |
| 38 | + git \ |
| 39 | + gmp \ |
| 40 | + libev |
28 | 41 |
|
29 |
| -RUN chmod -R 755 /var |
| 42 | +COPY --from=build --link /home/opam/package.state /var/package.state |
| 43 | +COPY --from=build --link /home/opam/opam-repository /var/opam-repository |
| 44 | +COPY --from=build --link /home/opam/_build/default/src/ocamlorg_web/bin/main.exe /bin/server |
30 | 45 |
|
31 |
| -COPY --from=build /home/opam/package.state /var/package.state |
32 |
| -COPY --from=build /home/opam/opam-repository /var/opam-repository |
33 |
| -COPY --from=build /home/opam/_build/default/src/ocamlorg_web/bin/main.exe /bin/server |
| 46 | +COPY --link playground/asset playground/asset |
34 | 47 |
|
35 |
| -COPY playground/asset playground/asset |
36 |
| - |
37 |
| -RUN git clone https://github.com/ocaml-web/html-compiler-manuals /manual |
| 48 | +ADD --keep-git-dir --link https://github.com/ocaml-web/html-compiler-manuals /manual |
38 | 49 |
|
39 | 50 | RUN git config --global --add safe.directory /var/opam-repository
|
40 | 51 |
|
41 |
| -ENV OCAMLORG_REPO_PATH /var/opam-repository/ |
42 |
| -ENV OCAMLORG_MANUAL_PATH /manual |
43 |
| -ENV OCAMLORG_PKG_STATE_PATH /var/package.state |
44 |
| -ENV DREAM_VERBOSITY info |
45 |
| -ENV OCAMLORG_HTTP_PORT 8080 |
| 52 | +ENV OCAMLORG_REPO_PATH=/var/opam-repository/ |
| 53 | +ENV OCAMLORG_MANUAL_PATH=/manual |
| 54 | +ENV OCAMLORG_PKG_STATE_PATH=/var/package.state |
| 55 | +ENV DREAM_VERBOSITY=info |
| 56 | +ENV OCAMLORG_HTTP_PORT=8080 |
46 | 57 |
|
47 | 58 | EXPOSE 8080
|
48 | 59 |
|
49 |
| -ENTRYPOINT /bin/server |
| 60 | +ENTRYPOINT ["/bin/server"] |
0 commit comments