1
1
# syntax=registry.gitlab.syncad.com/hive/common-ci-configuration/dockerfile:1.5
2
2
ARG HIVED_IMAGE
3
- ARG BASE_IMAGE
3
+
4
+ ARG BASE_IMAGE=registry.gitlab.syncad.com/hive/common-ci-configuration/python_runtime:3.12-u24.04
4
5
5
6
ARG CI_REGISTRY_IMAGE=registry.gitlab.syncad.com/hive/clive/
6
7
7
8
FROM $HIVED_IMAGE AS hived_image
8
9
9
- FROM registry.gitlab.syncad.com/hive/hive/ci-base-image:ubuntu24.04-1 AS stripped_beekeeper_source
10
-
11
- COPY --from=hived_image "/home/hived/bin/beekeeper" "/home/hived/bin/beekeeper"
12
- RUN strip -p /home/hived/bin/beekeeper -o /home/hived_admin/beekeeper.stripped
13
-
14
10
FROM $BASE_IMAGE AS preconfigured_base_image
15
11
16
12
ARG CLIVE_VERSION
17
13
ENV CLIVE_VERSION=${CLIVE_VERSION}
18
- ENV CLIVE_UID=2001
14
+
15
+ ARG CLIVE_UID=2001
16
+ ENV CLIVE_UID=${CLIVE_UID}
19
17
20
18
ENV APT_CACHE_DIR=/var/cache/buildkit/apt
21
19
ENV PIP_CACHE_DIR=/var/cache/buildkit/pip
22
20
23
21
# create and use python virtualenv (use directory outside clive user home to reduce usermod execution time)
24
- ENV PYTHON_VENV_PATH="/clive-venv "
22
+ ENV PYTHON_VENV_PATH="/python_venv "
25
23
ENV PATH="${PYTHON_VENV_PATH}/bin:$PATH" VIRTUAL_ENV=${PYTHON_VENV_PATH}
26
24
27
25
RUN --mount=type=cache,mode=0777,sharing=locked,target=${APT_CACHE_DIR} \
28
- apt-get update && \
29
- apt-get install -y sudo && \
30
- apt-get clean && \
31
- rm -rf /var/lib/apt/lists/* && \
32
- useradd -d /clive -ms /bin/bash -u ${CLIVE_UID} -g users -c "clive application account" "clive" && \
33
- mkdir -p /clive && chown -R clive /clive && mkdir -p "${PYTHON_VENV_PATH}" && chown -R clive "${PYTHON_VENV_PATH}" && \
26
+ useradd -o -d /clive -ms /bin/bash -u ${CLIVE_UID} -g users -c "clive application account" "clive" && \
27
+ mkdir -p /clive && chown -R clive /clive && mkdir -vp "${PYTHON_VENV_PATH}" && chown -R clive "${PYTHON_VENV_PATH}" && \
34
28
chown -R clive:users /var/cache/ && \
35
29
chmod -R 777 /var/cache/
36
30
37
31
USER clive
38
32
39
33
SHELL ["/bin/bash" , "-c" ]
40
34
41
- ADD ./docker/entrypoint.sh .
35
+ COPY ./docker/entrypoint.sh .
42
36
RUN mkdir /clive/scripts
43
- ADD ./scripts/activate_beekeeper.sh /clive/scripts/
37
+ COPY --chown=clive ./scripts/activate_beekeeper.sh /clive/scripts/
44
38
45
- ADD --chown=clive ./pyproject.toml /clive/
46
- ADD --chown=clive ./poetry.lock /clive/
47
- ADD --chown=clive ./README.md /clive/
39
+ COPY --chown=clive ./pyproject.toml /clive/
40
+ COPY --chown=clive ./poetry.lock /clive/
41
+ COPY --chown=clive ./README.md /clive/
48
42
49
43
WORKDIR /clive
50
44
51
- ENV BEEKEEPER_PATH_SOURCE="/home/hived_admin/beekeeper.stripped"
52
- ENV BEEKEEPER_PATH_DEST="/clive/beekeeper"
53
- COPY --chown=clive --from=stripped_beekeeper_source "${BEEKEEPER_PATH_SOURCE}" "${BEEKEEPER_PATH_DEST}"
54
-
55
45
# crucial for proper display
56
46
ENV COLORTERM=truecolor
57
47
58
- FROM preconfigured_base_image AS python_installer
48
+ FROM registry.gitlab.syncad.com/hive/common-ci-configuration/python_development:3.12-u24.04 AS python_installer
49
+
50
+ ARG CLIVE_VERSION
51
+ ENV CLIVE_VERSION=${CLIVE_VERSION}
52
+
53
+ ARG CLIVE_UID=2001
54
+ ENV CLIVE_UID=${CLIVE_UID}
55
+
56
+ ENV APT_CACHE_DIR=/var/cache/buildkit/apt
57
+ ENV PIP_CACHE_DIR=/var/cache/buildkit/pip
58
+
59
+ # create and use python virtualenv (use directory outside clive user home to reduce usermod execution time)
60
+ ENV PYTHON_VENV_PATH="/python_venv"
61
+ ENV PATH="${PYTHON_VENV_PATH}/bin:$PATH" VIRTUAL_ENV=${PYTHON_VENV_PATH}
59
62
60
- USER root
61
63
RUN --mount=type=cache,mode=0777,sharing=locked,target=${APT_CACHE_DIR} \
62
- apt-get update && \
63
- apt-get install -y git && \
64
- apt-get clean && \
65
- rm -rf /var/lib/apt/lists/*
64
+ useradd -o -d /clive -ms /bin/bash -u ${CLIVE_UID} -g users -c "clive application account" "clive" && \
65
+ mkdir -p /clive && chown -R clive /clive && mkdir -vp "${PYTHON_VENV_PATH}" && chown -R clive "${PYTHON_VENV_PATH}" && \
66
+ chown -R clive:users /var/cache/ && \
67
+ chmod -R 777 /var/cache/
66
68
67
69
USER clive
68
70
WORKDIR /clive
71
+
72
+ SHELL ["/bin/bash" , "-c" ]
73
+
69
74
# Project IDS:
70
75
# - 362 -> schemas
71
76
# - 392 -> clive
72
77
# - 419 -> wax
73
78
# - 434 -> beekeepy
74
79
RUN --mount=type=cache,mode=0777,uid=${CLIVE_UID},target=${PIP_CACHE_DIR} \
75
- python3 -m venv "${PYTHON_VENV_PATH}" && \
80
+ source /python_venv/bin/activate && \
76
81
pip install clive=="${CLIVE_VERSION}" \
77
82
--extra-index-url https://gitlab.syncad.com/api/v4/projects/362/packages/pypi/simple \
78
83
--extra-index-url https://gitlab.syncad.com/api/v4/projects/393/packages/pypi/simple \
79
84
--extra-index-url https://gitlab.syncad.com/api/v4/projects/419/packages/pypi/simple \
80
85
--extra-index-url https://gitlab.syncad.com/api/v4/projects/434/packages/pypi/simple && \
81
86
find "${PYTHON_VENV_PATH}" -name __pycache__ -exec rm -rf {} +
82
87
83
-
84
88
FROM preconfigured_base_image AS instance
85
89
86
90
ARG BUILD_TIME
@@ -112,15 +116,17 @@ LABEL io.hive.image.commit.date="$GIT_LAST_COMMIT_DATE"
112
116
USER root
113
117
ENTRYPOINT ["/entrypoint.sh" ]
114
118
115
-
116
119
# this target should be built using a testnet hived image as a base (to have embedded testnet)
117
120
FROM instance AS embedded_testnet_instance
118
121
119
122
ENV HIVED_BINARIES_DIR_SOURCE="/home/hived/bin"
120
- ENV HIVED_BINARIES_DIR_DEST=${HIVED_BINARIES_DIR_SOURCE}
123
+ ENV HIVED_BINARIES_DIR_DEST=" ${HIVED_BINARIES_DIR_SOURCE}/"
121
124
122
125
# Copy all the required executables from hived image
123
- COPY --from=hived_image "${HIVED_BINARIES_DIR_SOURCE}" "${HIVED_BINARIES_DIR_DEST}"
126
+ COPY --chown=clive --from=hived_image "${HIVED_BINARIES_DIR_SOURCE}/hived" "${HIVED_BINARIES_DIR_SOURCE}/get_dev_key" \
127
+ "${HIVED_BINARIES_DIR_DEST}"
128
+
129
+ RUN strip -s "${HIVED_BINARIES_DIR_DEST}" /*
124
130
125
131
ARG CLIVE_SECRETS__DEFAULT_PRIVATE_KEY="5KTNAYSHVzhnVPrwHpKhc5QqNQt6aW8JsrMT7T4hyrKydzYvYik"
126
132
ENV CLIVE_SECRETS__DEFAULT_PRIVATE_KEY=${CLIVE_SECRETS__DEFAULT_PRIVATE_KEY}
@@ -138,19 +144,21 @@ ENV GET_DEV_KEY_PATH="${HIVED_BINARIES_DIR_DEST}/get_dev_key"
138
144
ENV COMPRESS_BLOCK_LOG_PATH="${HIVED_BINARIES_DIR_DEST}/compress_block_log"
139
145
140
146
# Get all the files required for embedded testnet
141
- ADD ./testnet_node.py /clive
147
+ COPY --chown=clive ./testnet_node.py /clive
142
148
143
149
ENV TEST_TOOLS_PATH="hive/tests/python/hive-local-tools/test-tools/"
144
- ADD ${TEST_TOOLS_PATH} /clive/${TEST_TOOLS_PATH}
150
+ COPY --chown=clive ${TEST_TOOLS_PATH} /clive/${TEST_TOOLS_PATH}
145
151
146
152
ENV LOCAL_TOOLS_PATH="tests/clive-local-tools/"
147
- ADD ${LOCAL_TOOLS_PATH} /clive/${LOCAL_TOOLS_PATH}
153
+ COPY --chown=clive ${LOCAL_TOOLS_PATH} /clive/${LOCAL_TOOLS_PATH}
154
+
155
+ COPY --from=python_installer /poetry_venv /poetry_venv
148
156
149
- RUN curl -sSL https://install.python-poetry.org | python3 - --version 1.7.0
150
- ENV PATH="/home/hived_admin/.local/bin:$PATH"
157
+ ENV PATH="/home/hived_admin/.local/bin:/poetry_venv/bin:$PATH"
151
158
152
159
# Run dev installation to supplement with embeddedtestnet dependencies
153
- RUN poetry install --only embeddedtestnet --no-root
160
+ RUN set -ex; source "${PYTHON_VENV_PATH}/bin/activate" && \
161
+ poetry install --only embeddedtestnet --no-root
154
162
155
163
ENV TESTNET_MODE=1
156
164
0 commit comments