Skip to content

Commit 84c3e43

Browse files
committed
Add repository aware caching
1 parent e8014c5 commit 84c3e43

29 files changed

+183
-41
lines changed

dockerfiles/bun-1.1.Dockerfile

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1+
# syntax=docker/dockerfile:1.7-labs
12
FROM oven/bun:1.1.4-alpine
23

34
ENV CODECRAFTERS_DEPENDENCY_FILE_PATHS="package.json,bun.lockb"
45

56
WORKDIR /app
67

7-
COPY package.json ./
8-
COPY bun.lockb ./
8+
# .git & README.md are unique per-repository. We ignore them on first copy to prevent cache misses
9+
COPY --exclude=.git --exclude=README.md . /app
910

1011
# For reproducible builds.
1112
# This will install the exact versions of each package specified in the lockfile.
@@ -15,3 +16,6 @@ RUN bun install --frozen-lockfile
1516
RUN mkdir -p /app-cached
1617
# If the node_modules directory exists, move it to /app-cached
1718
RUN if [ -d "/app/node_modules" ]; then mv /app/node_modules /app-cached; fi
19+
20+
# Once the heave steps are done, we can copy all files back
21+
COPY . /app

dockerfiles/cpp-20.Dockerfile

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
1+
# syntax=docker/dockerfile:1.7-labs
12
FROM gcc:12.2.0-bullseye
23

4+
# .git & README.md are unique per-repository. We ignore them on first copy to prevent cache misses
5+
COPY --exclude=.git --exclude=README.md . /app
6+
37
RUN apt-get update && \
48
apt-get install --no-install-recommends -y cmake=3.18.* && \
59
apt-get clean && \
610
rm -rf /var/lib/apt/lists/*
11+
12+
# Once the heave steps are done, we can copy all files back
13+
COPY . /app

dockerfiles/dotnet-6.0.Dockerfile

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1+
# syntax=docker/dockerfile:1.7-labs
12
FROM mcr.microsoft.com/dotnet/sdk:6.0-bullseye-slim
23

3-
COPY codecrafters-sqlite.csproj /app/codecrafters-sqlite.csproj
4-
COPY codecrafters-sqlite.sln /app/codecrafters-sqlite.sln
54

65
RUN mkdir /app/src
76
RUN (echo 'System.Console.WriteLine("If you are seeing this, there is something wrong with our caching mechanism! Please contact us at hello@codecrafters.io.");' > /app/src/Program.cs) > /dev/null
87

98
WORKDIR /app
9+
# .git & README.md are unique per-repository. We ignore them on first copy to prevent cache misses
10+
COPY --exclude=.git --exclude=README.md . /app
1011

1112
# This saves nuget packages to ~/.nuget
1213
RUN dotnet build --configuration Release .
@@ -22,3 +23,6 @@ RUN chmod +x /codecrafters-precompile.sh
2223

2324
ENV CODECRAFTERS_DEPENDENCY_FILE_PATHS="codecrafters-sqlite.csproj,codecrafters-sqlite.sln"
2425

26+
27+
# Once the heave steps are done, we can copy all files back
28+
COPY . /app

dockerfiles/dotnet-8.0.Dockerfile

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1+
# syntax=docker/dockerfile:1.7-labs
12
FROM mcr.microsoft.com/dotnet/sdk:8.0-alpine
23

3-
COPY codecrafters-sqlite.csproj /app/codecrafters-sqlite.csproj
4-
COPY codecrafters-sqlite.sln /app/codecrafters-sqlite.sln
54

65
RUN mkdir /app/src
76
RUN (echo 'System.Console.WriteLine("If you are seeing this, there is something wrong with our caching mechanism! Please contact us at hello@codecrafters.io.");' > /app/src/Program.cs) > /dev/null
87

98
WORKDIR /app
9+
# .git & README.md are unique per-repository. We ignore them on first copy to prevent cache misses
10+
COPY --exclude=.git --exclude=README.md . /app
1011

1112
# This saves nuget packages to ~/.nuget
1213
RUN dotnet build --configuration Release .
@@ -22,3 +23,6 @@ RUN chmod +x /codecrafters-precompile.sh
2223

2324
ENV CODECRAFTERS_DEPENDENCY_FILE_PATHS="codecrafters-sqlite.csproj,codecrafters-sqlite.sln"
2425

26+
27+
# Once the heave steps are done, we can copy all files back
28+
COPY . /app

dockerfiles/gleam-1.0.Dockerfile

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
1+
# syntax=docker/dockerfile:1.7-labs
12
FROM ghcr.io/gleam-lang/gleam:v1.0.0-erlang-alpine
23

4+
# .git & README.md are unique per-repository. We ignore them on first copy to prevent cache misses
5+
COPY --exclude=.git --exclude=README.md . /app
6+
37
# Pre-compile steps
48
RUN printf "cd \${CODECRAFTERS_SUBMISSION_DIR} && gleam build" > /codecrafters-precompile.sh
59
RUN chmod +x /codecrafters-precompile.sh
10+
11+
# Once the heave steps are done, we can copy all files back
12+
COPY . /app

dockerfiles/go-1.16.Dockerfile

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1+
# syntax=docker/dockerfile:1.7-labs
12
FROM golang:1.16-alpine
23

3-
COPY go.mod /app/go.mod
4-
COPY go.sum /app/go.sum
54

65
WORKDIR /app
6+
# .git & README.md are unique per-repository. We ignore them on first copy to prevent cache misses
7+
COPY --exclude=.git --exclude=README.md . /app
78

89
RUN go mod download
910

@@ -13,3 +14,6 @@ RUN go mod download
1314
RUN ash -c "set -exo pipefail; go mod graph | awk '{if (\$1 !~ \"@\") {print \$2}}' | xargs -r go get"
1415

1516
ENV CODECRAFTERS_DEPENDENCY_FILE_PATHS="go.mod,go.sum"
17+
18+
# Once the heave steps are done, we can copy all files back
19+
COPY . /app

dockerfiles/go-1.19.Dockerfile

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1+
# syntax=docker/dockerfile:1.7-labs
12
FROM golang:1.19-alpine
23

3-
COPY go.mod /app/go.mod
4-
COPY go.sum /app/go.sum
54

65
WORKDIR /app
6+
# .git & README.md are unique per-repository. We ignore them on first copy to prevent cache misses
7+
COPY --exclude=.git --exclude=README.md . /app
78

89
RUN go mod download
910

@@ -13,3 +14,6 @@ RUN go mod download
1314
RUN ash -c "set -exo pipefail; go mod graph | awk '{if (\$1 !~ \"@\") {print \$2}}' | xargs -r go get"
1415

1516
ENV CODECRAFTERS_DEPENDENCY_FILE_PATHS="go.mod,go.sum"
17+
18+
# Once the heave steps are done, we can copy all files back
19+
COPY . /app

dockerfiles/go-1.21.Dockerfile

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1+
# syntax=docker/dockerfile:1.7-labs
12
FROM golang:1.19-alpine
23

3-
COPY go.mod /app/go.mod
4-
COPY go.sum /app/go.sum
54

65
WORKDIR /app
6+
# .git & README.md are unique per-repository. We ignore them on first copy to prevent cache misses
7+
COPY --exclude=.git --exclude=README.md . /app
78

89
RUN go mod download
910

@@ -17,3 +18,6 @@ RUN GODEBUG="installgoroot=all" go install std
1718
RUN ash -c "set -exo pipefail; go mod graph | awk '{if (\$1 !~ \"@\") {print \$2}}' | xargs -r go get"
1819

1920
ENV CODECRAFTERS_DEPENDENCY_FILE_PATHS="go.mod,go.sum"
21+
22+
# Once the heave steps are done, we can copy all files back
23+
COPY . /app

dockerfiles/go-1.22.Dockerfile

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1+
# syntax=docker/dockerfile:1.7-labs
12
FROM golang:1.22-alpine
23

3-
COPY go.mod /app/go.mod
4-
COPY go.sum /app/go.sum
54

65
WORKDIR /app
6+
# .git & README.md are unique per-repository. We ignore them on first copy to prevent cache misses
7+
COPY --exclude=.git --exclude=README.md . /app
78

89
RUN go mod download
910

@@ -17,3 +18,6 @@ RUN GODEBUG="installgoroot=all" go install std
1718
RUN ash -c "set -exo pipefail; go mod graph | awk '{if (\$1 !~ \"@\") {print \$2}}' | xargs -r go get"
1819

1920
ENV CODECRAFTERS_DEPENDENCY_FILE_PATHS="go.mod,go.sum"
21+
22+
# Once the heave steps are done, we can copy all files back
23+
COPY . /app

dockerfiles/java-21.Dockerfile

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1+
# syntax=docker/dockerfile:1.7-labs
12
FROM maven:3.9.5-eclipse-temurin-21-alpine
23

3-
COPY pom.xml /app/pom.xml
44

55
WORKDIR /app
6+
# .git & README.md are unique per-repository. We ignore them on first copy to prevent cache misses
7+
COPY --exclude=.git --exclude=README.md . /app
68

79
# Download the dependencies
810
RUN mvn -B package -Ddir=/tmp/codecrafters-sqlite-target
@@ -14,3 +16,6 @@ RUN mv /app/target /app-cached # Is this needed?
1416
# Pre-compile steps
1517
RUN printf "cd \${CODECRAFTERS_SUBMISSION_DIR} && mvn -B package -Ddir=/tmp/codecrafters-sqlite-target && sed -i 's/^\(mvn .*\)/#\1/' ./your_sqlite3.sh" > /codecrafters-precompile.sh
1618
RUN chmod +x /codecrafters-precompile.sh
19+
20+
# Once the heave steps are done, we can copy all files back
21+
COPY . /app

0 commit comments

Comments
 (0)