Skip to content

Commit 7d62648

Browse files
committed
refactored docker images to build mainnet and testnet version of clive (testnet includes embedded testnet)
1 parent e2d9dd5 commit 7d62648

File tree

2 files changed

+54
-46
lines changed

2 files changed

+54
-46
lines changed

.gitlab-ci.yml

+6-6
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,12 @@ variables:
3434
# uses registry.gitlab.syncad.com/hive/hive/ci-base-image:ubuntu24.04-1
3535
CI_BASE_IMAGE_TAG: "@sha256:813f18c42929193036fc4e0017981c16913766442ef8d146313c64785df29c2e"
3636
CI_BASE_IMAGE: "registry.gitlab.syncad.com/hive/hive/ci-base-image${CI_BASE_IMAGE_TAG}"
37-
# uses registry.gitlab.syncad.com/hive/clive/clive-testnet-base-image:python-poetry-1.7-3.10
38-
CLIVE_TESTNET_BASE_IMAGE_TAG: "@sha256:d38883407b5860a89e7491b1de4153c516dc5ae87ca9988fba0ed0400e97f98f"
39-
CLIVE_TESTNET_BASE_IMAGE: "registry.gitlab.syncad.com/hive/clive/clive-testnet-base-image${CLIVE_TESTNET_BASE_IMAGE_TAG}"
40-
# uses registry.gitlab.syncad.com/hive/common-ci-configuration/python:3.12.9-slim-bookworm
41-
CLIVE_BASE_IMAGE_TAG: "@sha256:931bdcd3ecbaa230cde88cb3dabca72017be4dae45f9b8c3616fc9947782eca3"
42-
CLIVE_BASE_IMAGE: "registry.gitlab.syncad.com/hive/common-ci-configuration/python${CLIVE_BASE_IMAGE_TAG}"
37+
# uses registry.gitlab.syncad.com/hive/common-ci-configuration/python_development:3.12-u24.04@sha256:8ccd75ced8a1064b7eff8b4baef5ed66522c06df4a1c9df1759b65eb041c3cc0
38+
CLIVE_TESTNET_BASE_IMAGE_TAG: "@sha256:8ccd75ced8a1064b7eff8b4baef5ed66522c06df4a1c9df1759b65eb041c3cc0"
39+
CLIVE_TESTNET_BASE_IMAGE: "registry.gitlab.syncad.com/hive/common-ci-configuration/python_development:3.12-u24.04${CLIVE_TESTNET_BASE_IMAGE_TAG}"
40+
# uses registry.gitlab.syncad.com/hive/common-ci-configuration/python_runtime:3.12-u24.04@sha256:aa235bdadebaa4764b923900e9fa1d17c82adddd431aaa86e1fece47cc478380
41+
CLIVE_BASE_IMAGE_TAG: "@sha256:aa235bdadebaa4764b923900e9fa1d17c82adddd431aaa86e1fece47cc478380"
42+
CLIVE_BASE_IMAGE: "registry.gitlab.syncad.com/hive/common-ci-configuration/python_runtime:3.12-u24.04${CLIVE_BASE_IMAGE_TAG}"
4343
# other:
4444
AFTER_SCRIPT_IGNORE_ERRORS: 'false' # without this errors in after_script will be ignored and just "WARNING: after_script failed, but job will continue unaffected: exit code 1" will be shown
4545

docker/Dockerfile

+48-40
Original file line numberDiff line numberDiff line change
@@ -1,86 +1,90 @@
11
# syntax=registry.gitlab.syncad.com/hive/common-ci-configuration/dockerfile:1.5
22
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
45

56
ARG CI_REGISTRY_IMAGE=registry.gitlab.syncad.com/hive/clive/
67

78
FROM $HIVED_IMAGE AS hived_image
89

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-
1410
FROM $BASE_IMAGE AS preconfigured_base_image
1511

1612
ARG CLIVE_VERSION
1713
ENV CLIVE_VERSION=${CLIVE_VERSION}
18-
ENV CLIVE_UID=2001
14+
15+
ARG CLIVE_UID=2001
16+
ENV CLIVE_UID=${CLIVE_UID}
1917

2018
ENV APT_CACHE_DIR=/var/cache/buildkit/apt
2119
ENV PIP_CACHE_DIR=/var/cache/buildkit/pip
2220

2321
# 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"
2523
ENV PATH="${PYTHON_VENV_PATH}/bin:$PATH" VIRTUAL_ENV=${PYTHON_VENV_PATH}
2624

2725
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}" && \
3428
chown -R clive:users /var/cache/ && \
3529
chmod -R 777 /var/cache/
3630

3731
USER clive
3832

3933
SHELL ["/bin/bash", "-c"]
4034

41-
ADD ./docker/entrypoint.sh .
35+
COPY ./docker/entrypoint.sh .
4236
RUN mkdir /clive/scripts
43-
ADD ./scripts/activate_beekeeper.sh /clive/scripts/
37+
COPY --chown=clive ./scripts/activate_beekeeper.sh /clive/scripts/
4438

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/
4842

4943
WORKDIR /clive
5044

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-
5545
# crucial for proper display
5646
ENV COLORTERM=truecolor
5747

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}
5962

60-
USER root
6163
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/
6668

6769
USER clive
6870
WORKDIR /clive
71+
72+
SHELL ["/bin/bash", "-c"]
73+
6974
# Project IDS:
7075
# - 362 -> schemas
7176
# - 392 -> clive
7277
# - 419 -> wax
7378
# - 434 -> beekeepy
7479
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 && \
7681
pip install clive=="${CLIVE_VERSION}" \
7782
--extra-index-url https://gitlab.syncad.com/api/v4/projects/362/packages/pypi/simple \
7883
--extra-index-url https://gitlab.syncad.com/api/v4/projects/393/packages/pypi/simple \
7984
--extra-index-url https://gitlab.syncad.com/api/v4/projects/419/packages/pypi/simple \
8085
--extra-index-url https://gitlab.syncad.com/api/v4/projects/434/packages/pypi/simple && \
8186
find "${PYTHON_VENV_PATH}" -name __pycache__ -exec rm -rf {} +
8287

83-
8488
FROM preconfigured_base_image AS instance
8589

8690
ARG BUILD_TIME
@@ -112,15 +116,17 @@ LABEL io.hive.image.commit.date="$GIT_LAST_COMMIT_DATE"
112116
USER root
113117
ENTRYPOINT ["/entrypoint.sh"]
114118

115-
116119
# this target should be built using a testnet hived image as a base (to have embedded testnet)
117120
FROM instance AS embedded_testnet_instance
118121

119122
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}/"
121124

122125
# 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}"/*
124130

125131
ARG CLIVE_SECRETS__DEFAULT_PRIVATE_KEY="5KTNAYSHVzhnVPrwHpKhc5QqNQt6aW8JsrMT7T4hyrKydzYvYik"
126132
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"
138144
ENV COMPRESS_BLOCK_LOG_PATH="${HIVED_BINARIES_DIR_DEST}/compress_block_log"
139145

140146
# Get all the files required for embedded testnet
141-
ADD ./testnet_node.py /clive
147+
COPY --chown=clive ./testnet_node.py /clive
142148

143149
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}
145151

146152
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
148156

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"
151158

152159
# 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
154162

155163
ENV TESTNET_MODE=1
156164

0 commit comments

Comments
 (0)