1
1
mirror of https://github.com/github/semantic.git synced 2024-12-26 00:12:29 +03:00
semantic/Dockerfile
Douglas Creager e3f42ee277 Compile dependencies separately
So that they can be more aggressively cached by Docker!  The Docker hub
will take advantage of this, too, which should make our autobuilds
faster.
2019-06-05 10:21:15 -04:00

34 lines
1.1 KiB
Docker

FROM haskell:8.6 as build
WORKDIR /build
RUN cabal new-update
# Build our upstream dependencies after copying in only enough to tell cabal
# what they are. This will make these layers cache better even as we change the
# code of semantic itself.
COPY semantic.cabal /build/
COPY cabal.project /build/
COPY semantic-core/semantic-core.cabal /build/semantic-core/
COPY vendor /build/vendor
RUN cabal new-build --only-dependencies
# Once the dependencies are built, copy in the rest of the code and compile
# semantic itself.
COPY . /build
RUN cabal new-build semantic:exe:semantic
# A fake `install` target until we can get `cabal new-install` to work
RUN cp $(find dist-newstyle -name semantic -type f -perm -u=x) /usr/local/bin/semantic
# Create a fresh image containing only the compiled CLI program, so that the
# image isn't bulked up by all of the extra build state.
FROM debian:stretch
RUN apt-get update && \
apt-get install -y \
libgmp10 \
&& \
apt-get autoremove -y && \
apt-get clean -y && \
rm -rf /var/lib/apt/lists/*
COPY --from=build /usr/local/bin/semantic /usr/local/bin/semantic
ENTRYPOINT ["/usr/local/bin/semantic"]