Skip to content

Commit 785f646

Browse files
committed
docker: cache hs deps as separate stage
1 parent 90fb21b commit 785f646

File tree

2 files changed

+45
-17
lines changed

2 files changed

+45
-17
lines changed

.dockerignore

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,23 @@
1-
# Ignore everything
2-
*
1+
# Ignore specific files and directories
2+
.git/
3+
**/.DS_Store
4+
**/*.rs.bk
5+
6+
# Ignore build artifacts
7+
sim-rs/target/
8+
sim-rs/output/
9+
**/dist/
10+
**/dist-newstyle/
11+
12+
# Allow specific directories and files
313
!sim-rs/
414
!simulation/
515
!conformance-testing/
616
!data/simulation/*.yaml
717
!leios-trace-hs/
818
!cabal.project
919

10-
# Ignore unnecessary files even in sim-rs
11-
sim-rs/target/
12-
sim-rs/.git/
13-
sim-rs/output/
14-
**/*.rs.bk
15-
**/.DS_Store
20+
# Allow cabal files
21+
!simulation/*.cabal
22+
!conformance-testing/*.cabal
23+
!leios-trace-hs/*.cabal

Dockerfile

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ COPY sim-rs/ .
2626
COPY /data/simulation/config.default.yaml parameters/
2727
RUN 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
3131
WORKDIR /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
5254
COPY 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
5660
RUN 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

Comments
 (0)