1- FROM ubuntu:20.04
1+ ARG TIME_WARP=""
2+ FROM ubuntu:20.04 AS base
3+ ARG TIME_WARP
24
35ENV DEBIAN_FRONTEND=noninteractive
46RUN apt-get update && \
57 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/*
8+ localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 && \
9+ apt-get clean && \
10+ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp /*
911ENV LANG=en_US.UTF-8
1012
1113# 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/*
14+ RUN apt-get update && \
15+ apt-get install -y \
16+ software-properties-common \
17+ bash \
18+ python3 \
19+ python3-pip \
20+ git \
21+ curl \
22+ tar \
23+ wget && \
24+ apt-get clean && \
25+ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
2226
2327# Install Build Tools
2428RUN apt-get update && \
2529 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 \
30+ make \
31+ build-essential \
32+ libssl-dev \
33+ zlib1g-dev \
34+ libbz2-dev \
35+ libreadline-dev\
36+ libsqlite3-dev \
37+ wget \
38+ curl \
39+ llvm \
40+ libncurses5-dev \
41+ xz-utils \
42+ tk-dev\
43+ libxml2-dev \
44+ libxmlsec1-dev \
45+ libffi-dev \
46+ liblzma-dev\
2947 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
48+ apt-get clean && \
49+ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
3850
3951# Install pyenv
4052RUN git clone https://github.com/pyenv/pyenv.git .pyenv
4153ENV PYENV_ROOT=/.pyenv
4254ENV PATH="$PYENV_ROOT/shims:$PYENV_ROOT/bin:$PATH"
55+ ENV PIP_NO_CACHE_DIR=1
4356
44- # Setup python version
45- ENV PYTHON_VERSIONS="3.13 3.12 3.11 3.10"
57+
58+ FROM base AS base-py-arg
59+ # Install all supported Python versions
60+ ARG PYTHON_VERSIONS="3.13 3.12 3.11 3.10"
61+
62+
63+ FROM base AS base-py-arg-single-python
64+ # Only install Python 3.10 in time warp mode
65+ ARG PYTHON_VERSIONS="3.10"
66+
67+
68+ FROM base-py-arg${TIME_WARP:+"-single-python" } AS base-py-install
4669
4770RUN for version in $PYTHON_VERSIONS; do \
4871 pyenv install $version; \
@@ -56,3 +79,34 @@ RUN pyenv global $(pyenv versions --bare --skip-aliases | sort --version-sort --
5679RUN for version in $PYTHON_VERSIONS; do \
5780 python$version -m pip install -U pip; \
5881 done
82+
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