1- FROM ubuntu:20.04
1+ ARG TIME_WARP=""
2+ FROM ubuntu:20.04 AS base
23
34ENV DEBIAN_FRONTEND=noninteractive
45RUN apt-get update && \
56 apt-get install -y locales && \
6- apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \
7- localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 \
8- && rm -rf /var/lib/apt/lists/*
7+ localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 && \
8+ apt-get clean && \
9+ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp /*
910ENV LANG=en_US.UTF-8
1011
1112# Using apt-get update alone in a RUN statement causes caching issues and subsequent apt-get install instructions fail.
12- RUN apt-get --quiet update && apt-get --quiet install -y \
13- software-properties-common \
14- bash \
15- python3 \
16- python3-pip \
17- git \
18- curl \
19- tar \
20- wget \
21- && rm -rf /var/lib/apt/lists/*
13+ RUN apt-get update && \
14+ apt-get install -y \
15+ software-properties-common \
16+ bash \
17+ python3 \
18+ python3-pip \
19+ git \
20+ curl \
21+ tar \
22+ wget && \
23+ apt-get clean && \
24+ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
2225
2326# Install Build Tools
2427RUN apt-get update && \
2528 apt-get install -y --no-install-recommends \
26- make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev \
27- libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev \
28- libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev \
29+ make \
30+ build-essential \
31+ libssl-dev \
32+ zlib1g-dev \
33+ libbz2-dev \
34+ libreadline-dev\
35+ libsqlite3-dev \
36+ wget \
37+ curl \
38+ llvm \
39+ libncurses5-dev \
40+ xz-utils \
41+ tk-dev\
42+ libxml2-dev \
43+ libxmlsec1-dev \
44+ libffi-dev \
45+ liblzma-dev\
2946 ca-certificates && \
30- apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
31-
32- # Install our own CAs on the image.
33- # Assumes Linux Debian based image.
34- COPY CAs/* /usr/local/share/ca-certificates/
35- # Store custom CAs somewhere where the backend can find them later.
36- COPY CustomCAs/* /usr/local/share/custom-ca-certificates/
37- RUN update-ca-certificates
47+ apt-get clean && \
48+ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
3849
3950# Install pyenv
4051RUN git clone https://github.com/pyenv/pyenv.git .pyenv
4152ENV PYENV_ROOT=/.pyenv
4253ENV PATH="$PYENV_ROOT/shims:$PYENV_ROOT/bin:$PATH"
54+ ENV PIP_NO_CACHE_DIR=1
4355
44- # Setup python version
45- ENV PYTHON_VERSIONS="3.13 3.12 3.11 3.10"
56+
57+ FROM base AS base-py-arg
58+ # Install all supported Python versions
59+ ARG PYTHON_VERSIONS="3.13 3.12 3.11 3.10"
60+
61+
62+ FROM base AS base-py-arg-single-python
63+ # Only install Python 3.10 in time warp mode
64+ ARG PYTHON_VERSIONS="3.10"
65+
66+
67+ FROM base-py-arg${TIME_WARP:+"-single-python" } AS base-py-install
4668
4769RUN for version in $PYTHON_VERSIONS; do \
4870 pyenv install $version; \
@@ -56,3 +78,35 @@ RUN pyenv global $(pyenv versions --bare --skip-aliases | sort --version-sort --
5678RUN for version in $PYTHON_VERSIONS; do \
5779 python$version -m pip install -U pip; \
5880 done
81+
82+ ARG TIME_WARP
83+ ENV DRIVER_TIME_WARP=$TIME_WARP
84+
85+
86+ FROM base-py-install AS backend-timewarp
87+ WORKDIR /home/root/testkit
88+
89+ COPY testkit/backend.py testkit/build.py testkit/_common.py testkit/
90+ COPY pyproject.toml .
91+
92+ RUN for version in $PYTHON_VERSIONS; do \
93+ TEST_BACKEND_VERSION="python$version" python testkit/build.py && \
94+ python$version -m pip install --force-reinstall neo4j==${TIME_WARP}; \
95+ done
96+ COPY testkitbackend ./testkitbackend
97+ ENTRYPOINT ["python" , "testkit/backend.py" ]
98+
99+
100+ FROM base-py-install AS backend
101+
102+ # Install our own CAs on the image.
103+ # Assumes Linux Debian based image.
104+ COPY CAs/* /usr/local/share/ca-certificates/
105+ # Store custom CAs somewhere where the backend can find them later.
106+ COPY CustomCAs/* /usr/local/share/custom-ca-certificates/
107+ RUN update-ca-certificates
108+
109+
110+ FROM backend${TIME_WARP:+"-timewarp" } AS final
111+ WORKDIR /home/root/testkit
112+ EXPOSE 9876/tcp
0 commit comments