Skip to content

Commit 6e0386c

Browse files
committed
Refactored SQLite setup to use multi-stage build.
1 parent 8ef6e51 commit 6e0386c

File tree

2 files changed

+29
-27
lines changed

2 files changed

+29
-27
lines changed

Containerfile

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
ARG PYTHON_IMPLEMENTATION=python
44
ARG PYTHON_VERSION=3.12
5-
FROM ${PYTHON_IMPLEMENTATION}:${PYTHON_VERSION}-slim-bookworm
5+
FROM ${PYTHON_IMPLEMENTATION}:${PYTHON_VERSION}-slim-bookworm AS base
66

77
LABEL org.opencontainers.image.authors="Django Software Foundation"
88
LABEL org.opencontainers.image.url="https://github.com/django/django-docker-box"
@@ -64,3 +64,26 @@ VOLUME /django/output
6464
VOLUME /django/source
6565
WORKDIR /django/source/tests
6666
ENTRYPOINT ["/django/entrypoint.bash"]
67+
68+
FROM base AS sqlite
69+
ARG SQLITE_VERSION
70+
ARG SQLITE_CFLAGS
71+
SHELL ["/bin/bash", "-o", "errexit", "-o", "nounset", "-o", "pipefail", "-o", "xtrace", "-c"]
72+
RUN <<EOF
73+
if [[ "${SQLITE_VERSION}" ]]; then
74+
export CFLAGS="${SQLITE_CFLAGS}"
75+
git clone --depth 1 --branch version-${SQLITE_VERSION} \
76+
https://github.com/sqlite/sqlite.git /tmp/sqlite
77+
cd /tmp/sqlite
78+
./configure
79+
make
80+
if [ -f libsqlite3.so ]; then
81+
cp libsqlite3.so /tmp/
82+
else
83+
cp .libs/libsqlite3.so /tmp/
84+
fi
85+
rm -rf /tmp/sqlite
86+
fi
87+
EOF
88+
SHELL ["/bin/bash", "-c"]
89+
ENV LD_PRELOAD=${SQLITE_VERSION:+/tmp/libsqlite3.so}

compose.yml

Lines changed: 5 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22

33
x-base: &base
44
image: django-docker-box:${PYTHON_IMPLEMENTATION}-${PYTHON_VERSION}
5-
build:
5+
build: &base-build
66
context: .
77
dockerfile: ./Containerfile
8+
target: base
89
args:
910
- PYTHON_IMPLEMENTATION=${PYTHON_IMPLEMENTATION}
1011
- PYTHON_VERSION=${PYTHON_VERSION}
11-
additional_contexts: &additional-contexts
12+
additional_contexts:
1213
src: ${DJANGO_PATH:-../django}
1314
volumes:
1415
- ${DJANGO_PATH:-../django}:/django/source:rw
@@ -292,35 +293,13 @@ services:
292293
image: django-docker-box:${PYTHON_IMPLEMENTATION}-${PYTHON_VERSION}-sqlite${SQLITE_VERSION}
293294
pull_policy: never
294295
build:
295-
context: .
296-
dockerfile_inline: |
297-
FROM django-docker-box:${PYTHON_IMPLEMENTATION}-${PYTHON_VERSION}
298-
SHELL ["/bin/bash", "-o", "errexit", "-o", "nounset", "-o", "pipefail", "-o", "xtrace", "-c"]
299-
# Only compile SQLite and set LD_PRELOAD if a version is specified.
300-
RUN <<EOF
301-
if [[ "${SQLITE_VERSION}" ]]; then
302-
export CFLAGS="${SQLITE_CFLAGS}"
303-
git clone --depth 1 --branch version-${SQLITE_VERSION} \
304-
https://github.com/sqlite/sqlite.git /tmp/sqlite
305-
cd /tmp/sqlite
306-
./configure
307-
make
308-
if [ -f libsqlite3.so ]; then
309-
cp libsqlite3.so /tmp/
310-
else
311-
cp .libs/libsqlite3.so /tmp/
312-
fi
313-
rm -rf /tmp/sqlite
314-
fi
315-
EOF
316-
SHELL ["/bin/bash", "-c"]
317-
ENV LD_PRELOAD=${SQLITE_VERSION:+/tmp/libsqlite3.so}
296+
<<: *base-build
297+
target: sqlite
318298
args:
319299
- PYTHON_IMPLEMENTATION=${PYTHON_IMPLEMENTATION}
320300
- PYTHON_VERSION=${PYTHON_VERSION}
321301
- SQLITE_VERSION=${SQLITE_VERSION}
322302
- SQLITE_CFLAGS=${SQLITE_CFLAGS}
323-
additional_contexts: *additional-contexts
324303
depends_on:
325304
<<: *depends-on-caches
326305
environment:

0 commit comments

Comments
 (0)