@@ -26,8 +26,8 @@ COPY sim-rs/ .
2626COPY /data/simulation/config.default.yaml parameters/
2727RUN cargo build --release
2828
29- # Build Haskell simulation
30- FROM haskell:9.8.2-slim AS hs-builder
29+ # Build Haskell simulation - Split into dependency and build stages
30+ FROM haskell:9.8.2-slim AS hs-deps
3131WORKDIR /build
3232
3333# Install git, SSL certificates, and GTK3 development dependencies
@@ -45,16 +45,36 @@ RUN apt-get update && \
4545 zlib1g-dev \
4646 && rm -rf /var/lib/apt/lists/*
4747
48- # Copy project files
49- COPY simulation /build/simulation/
50- COPY conformance-testing /build/conformance-testing/
51- COPY leios-trace-hs /build/leios-trace-hs/
48+ # Create necessary directories
49+ RUN mkdir -p /build/simulation \
50+ /build/conformance-testing \
51+ /build/leios-trace-hs
52+
53+ # Copy only dependency files first
5254COPY cabal.project /build/
55+ COPY simulation/ouroboros-leios-sim.cabal /build/simulation/simulation.cabal
56+ COPY conformance-testing/leios-conformance.cabal /build/conformance-testing/conformance-testing.cabal
57+ COPY leios-trace-hs/leios-trace-hs.cabal /build/leios-trace-hs/
5358
54- # Build simulation
55- WORKDIR /build
59+ # Build dependencies
5660RUN cabal update && \
57- cabal build all && \
61+ cabal build --only-dependencies all
62+
63+ # Build Haskell simulation
64+ FROM hs-deps AS hs-builder
65+ WORKDIR /build
66+
67+ # Copy project files, excluding cabal files since we already have them
68+ COPY simulation/src /build/simulation/src
69+ COPY simulation/test /build/simulation/test
70+ COPY simulation/docs /build/simulation/docs
71+ COPY simulation/gnuplot /build/simulation/gnuplot
72+ COPY conformance-testing/src /build/conformance-testing/src
73+ COPY conformance-testing/app /build/conformance-testing/app
74+ COPY leios-trace-hs/src /build/leios-trace-hs/src
75+
76+ # Build simulation
77+ RUN cabal build all && \
5878 find /build/dist-newstyle -type f -name "ols" -exec cp {} /build/ols \;
5979
6080# Create Rust simulation image
0 commit comments