Skip to content

Commit

Permalink
zombie tester update
Browse files Browse the repository at this point in the history
  • Loading branch information
Kirill Azovtsev committed Feb 9, 2025
1 parent 6b3c0a7 commit 2a898a5
Show file tree
Hide file tree
Showing 6 changed files with 144 additions and 104 deletions.
4 changes: 2 additions & 2 deletions zombienet/docker/Makefile.include/polkadot.mk
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@ polkadot_builder:
--build-arg GROUP_ID=$(GROUP_ID) \
--build-arg USER_NAME=$(IN_DOCKER_USERNAME) \
--build-arg RUST_VERSION=$(RUST_VERSION) \
--build-arg BASE_IMAGE=$(OS_IMAGE_NAME) \
--build-arg SCCACHE_VERSION=$(SCCACHE_VERSION) \
--build-arg BASE_IMAGE=$(OS_IMAGE_NAME) \
--build-arg BASE_IMAGE_TAG=$(OS_IMAGE_TAG_WITH_HASH) .

polkadot_builder_push: set_versions
docker push $(DOCKER_REGISTRY_PATH)polkadot_builder:$(CURRENT_DATE)-rust$(RUST_VERSION)-$(ARCHITECTURE) ; \
docker push $(DOCKER_REGISTRY_PATH)polkadot_builder:$(CURRENT_DATE)-rust$(RUST_VERSION)-$(ARCHITECTURE)

polkadot_builder_push_manifest:
docker manifest create $(DOCKER_REGISTRY_PATH)polkadot_builder:$(CURRENT_DATE)-rust$(RUST_VERSION) \
Expand Down
22 changes: 22 additions & 0 deletions zombienet/docker/Makefile.include/run_zombietest.mk
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,25 @@ define run_test
fi; \
exit $$TEST_EXIT_CODE
endef

copy_logs_to_host:
@CONTAINER_NAME=$(CONTAINER_NAME); \
FINISHED_CONTAINER_NAME=$$CONTAINER_NAME-finished; \
FINISHED_IMAGE_NAME=$$CONTAINER_NAME-finished-image; \
echo "-- Copying logs from container $$CONTAINER_NAME to host path $(HOST_LOGS_PATH)"; \
docker commit $$CONTAINER_NAME $$FINISHED_IMAGE_NAME; \
echo "-- Starting temporary container $$FINISHED_CONTAINER_NAME to copy logs"; \
docker run -d --name $$FINISHED_CONTAINER_NAME --platform $(PLATFORM) --entrypoint "/bin/bash" $$FINISHED_IMAGE_NAME -c "tail -f /dev/null"; \
mkdir -p $(HOST_LOGS_PATH); \
DIRS_TO_COPY=$$(docker exec $$FINISHED_CONTAINER_NAME "/bin/bash" -c "find /tmp/ -type d -name 'zombie-*'"); \
for DIR in $$DIRS_TO_COPY; do \
docker cp "$$FINISHED_CONTAINER_NAME:$$DIR/logs" "$(HOST_LOGS_PATH)/$$(basename $$DIR)"; \
done; \
docker cp "$$FINISHED_CONTAINER_NAME:/tmp/versions.env" "/tmp/versions.env" ; \
echo "-- Logs copied to $(HOST_LOGS_PATH)"; \
echo "-- Runtime cache directory content:"; \
docker exec $$FINISHED_CONTAINER_NAME "/bin/bash" -c "ls -la /tmp/kagome/runtimes-cache/" ; \
echo "-- Stop and removing container $$FINISHED_CONTAINER_NAME and image $$FINISHED_IMAGE_NAME"; \
docker stop $$FINISHED_CONTAINER_NAME; \
docker rm -f $$FINISHED_CONTAINER_NAME; \
docker rmi $$FINISHED_IMAGE_NAME
3 changes: 3 additions & 0 deletions zombienet/docker/Makefile.include/versions.mk
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ set_versions: get_versions
ifeq ($(POLKADOT_SDK_RELEASE),)
$(eval POLKADOT_SDK_RELEASE=$(shell grep 'polkadot_format_version:' polkadot-sdk-versions.txt | cut -d ' ' -f 2))
endif
ifeq ($(ZOMBIENET_RELEASE),)
$(eval ZOMBIENET_RELEASE=$(shell grep 'short_version:' zombienet-versions.txt | cut -d ' ' -f 2))
endif
export POLKADOT_SDK_RELEASE
POLKADOT_RELEASE_GLOBAL_NUMERIC=$(shell echo $(POLKADOT_SDK_RELEASE) | sed 's/[^0-9]//g' )
export POLKADOT_RELEASE_GLOBAL_NUMERIC
Expand Down
95 changes: 43 additions & 52 deletions zombienet/docker/Makefile.include/zombie_tester.mk
Original file line number Diff line number Diff line change
@@ -1,54 +1,45 @@
zombie_tester:
if [ -f polkadot-sdk-versions.txt ]; then \
ZOMBIENET_RELEASE=$$(grep 'short_version:' zombienet-versions.txt | cut -d ' ' -f 2); \
POLKADOT_SDK_RELEASE=$$(grep 'polkadot_format_version:' polkadot-sdk-versions.txt | cut -d ' ' -f 2); \
PROJECT_ID=$(PROJECT_ID) \
docker build \
--platform $(PLATFORM) \
--no-cache \
-t $(DOCKER_REGISTRY_PATH)zombie_tester:$(TESTER_LATEST_TAG) \
-t $(DOCKER_REGISTRY_PATH)zombie_tester:$${POLKADOT_SDK_RELEASE}_$${ZOMBIENET_RELEASE} \
--secret id=google_creds,src=$(GOOGLE_APPLICATION_CREDENTIALS) \
-f zombie_tester.Dockerfile \
--build-arg BASE_IMAGE=$(OS_IMAGE_NAME) \
--build-arg BASE_IMAGE_TAG=$(OS_IMAGE_TAG_WITH_HASH) \
--build-arg PROJECT_ID=$$PROJECT_ID \
--build-arg RUST_VERSION=$(RUST_VERSION) \
--build-arg POLKADOT_BINARY_PACKAGE_VERSION="$(POLKADOT_BINARY_PACKAGE_VERSION)" \
--build-arg ZOMBIENET_RELEASE=$$ZOMBIENET_RELEASE \
--build-arg POLKADOT_SDK_RELEASE=$$POLKADOT_SDK_RELEASE . ; \
else \
echo "One or more files are missing."; \
fi
zombie_tester: set_versions
docker build --progress=plain --platform $(PLATFORM) \
--no-cache \
-t $(DOCKER_REGISTRY_PATH)zombie_tester:$(POLKADOT_SDK_RELEASE)_$(ZOMBIENET_RELEASE)-$(ARCHITECTURE) \
--secret id=google_creds,src=$(GOOGLE_APPLICATION_CREDENTIALS) \
-f zombie_tester.Dockerfile \
--build-arg USER_ID=$(USER_ID) \
--build-arg GROUP_ID=$(GROUP_ID) \
--build-arg USER_NAME=$(IN_DOCKER_USERNAME) \
--build-arg BASE_IMAGE=$(OS_IMAGE_NAME) \
--build-arg BASE_IMAGE_TAG=$(OS_IMAGE_TAG_WITH_HASH) \
--build-arg PROJECT_ID=$(PROJECT_ID) \
--build-arg RUST_VERSION=$(RUST_VERSION) \
--build-arg POLKADOT_BINARY_PACKAGE_VERSION="$(POLKADOT_BINARY_PACKAGE_VERSION)" \
--build-arg ZOMBIENET_RELEASE=$(ZOMBIENET_RELEASE) \
--build-arg POLKADOT_SDK_RELEASE=$(POLKADOT_SDK_RELEASE) .

zombie_tester_push:
if [ -f polkadot-sdk-versions.txt ]; then \
ZOMBIENET_RELEASE=$$(grep 'short_version:' zombienet-versions.txt | cut -d ' ' -f 2); \
POLKADOT_SDK_RELEASE=$$(grep 'polkadot_format_version:' polkadot-sdk-versions.txt | cut -d ' ' -f 2); \
docker push $(DOCKER_REGISTRY_PATH)zombie_tester:$${POLKADOT_SDK_RELEASE}_$${ZOMBIENET_RELEASE} ; \
docker push $(DOCKER_REGISTRY_PATH)zombie_tester:$(TESTER_LATEST_TAG) ; \
else \
echo "-- One or more files are missing."; \
fi
zombie_tester_push: set_versions
docker push $(DOCKER_REGISTRY_PATH)zombie_tester:$(POLKADOT_SDK_RELEASE)_$(ZOMBIENET_RELEASE)-$(ARCHITECTURE)

copy_logs_to_host:
@CONTAINER_NAME=$(CONTAINER_NAME); \
FINISHED_CONTAINER_NAME=$$CONTAINER_NAME-finished; \
FINISHED_IMAGE_NAME=$$CONTAINER_NAME-finished-image; \
echo "-- Copying logs from container $$CONTAINER_NAME to host path $(HOST_LOGS_PATH)"; \
docker commit $$CONTAINER_NAME $$FINISHED_IMAGE_NAME; \
echo "-- Starting temporary container $$FINISHED_CONTAINER_NAME to copy logs"; \
docker run -d --name $$FINISHED_CONTAINER_NAME --platform $(PLATFORM) --entrypoint "/bin/bash" $$FINISHED_IMAGE_NAME -c "tail -f /dev/null"; \
mkdir -p $(HOST_LOGS_PATH); \
DIRS_TO_COPY=$$(docker exec $$FINISHED_CONTAINER_NAME "/bin/bash" -c "find /tmp/ -type d -name 'zombie-*'"); \
for DIR in $$DIRS_TO_COPY; do \
docker cp "$$FINISHED_CONTAINER_NAME:$$DIR/logs" "$(HOST_LOGS_PATH)/$$(basename $$DIR)"; \
done; \
docker cp "$$FINISHED_CONTAINER_NAME:/tmp/versions.env" "/tmp/versions.env" ; \
echo "-- Logs copied to $(HOST_LOGS_PATH)"; \
echo "-- Runtime cache directory content:"; \
docker exec $$FINISHED_CONTAINER_NAME "/bin/bash" -c "ls -la /tmp/kagome/runtimes-cache/" ; \
echo "-- Stop and removing container $$FINISHED_CONTAINER_NAME and image $$FINISHED_IMAGE_NAME"; \
docker stop $$FINISHED_CONTAINER_NAME; \
docker rm -f $$FINISHED_CONTAINER_NAME; \
docker rmi $$FINISHED_IMAGE_NAME
zombie_tester_push_manifest:
docker manifest create $(DOCKER_REGISTRY_PATH)zombie_tester:$(POLKADOT_SDK_RELEASE)_$(ZOMBIENET_RELEASE) \
--amend $(DOCKER_REGISTRY_PATH)zombie_tester:$(POLKADOT_SDK_RELEASE)_$(ZOMBIENET_RELEASE)-amd64 \
--amend $(DOCKER_REGISTRY_PATH)zombie_tester:$(POLKADOT_SDK_RELEASE)_$(ZOMBIENET_RELEASE)-arm64 && \
docker manifest create $(DOCKER_REGISTRY_PATH)zombie_tester:$(TESTER_LATEST_TAG) \
--amend $(DOCKER_REGISTRY_PATH)zombie_tester:$(POLKADOT_SDK_RELEASE)_$(ZOMBIENET_RELEASE)-amd64 \
--amend $(DOCKER_REGISTRY_PATH)zombie_tester:$(POLKADOT_SDK_RELEASE)_$(ZOMBIENET_RELEASE)-arm64 && \
docker manifest push $(DOCKER_REGISTRY_PATH)zombie_tester:$(POLKADOT_SDK_RELEASE)_$(ZOMBIENET_RELEASE) && \
docker manifest push $(DOCKER_REGISTRY_PATH)polkadot_builder:$(TESTER_LATEST_TAG)

zombie_tester_all_arch: set_versions
$(MAKE) zombie_tester PLATFORM=linux/amd64 ARCHITECTURE=amd64 && \
$(MAKE) zombie_tester_push PLATFORM=linux/amd64 ARCHITECTURE=amd64 && \
$(MAKE) zombie_tester PLATFORM=linux/arm64 ARCHITECTURE=arm64 && \
$(MAKE) zombie_tester_push PLATFORM=linux/arm64 ARCHITECTURE=arm64 && \
$(MAKE) zombie_tester_push_manifest

zombie_tester_image_info: set_versions
@echo "---------------------------------"
@echo ZOMBIE_TESTER_IMAGE: $(DOCKER_REGISTRY_PATH)zombie_tester:$(TESTER_LATEST_TAG)
@echo ZOMBIE_TESTER_AMD64_IMAGE: $(DOCKER_REGISTRY_PATH)zombie_tester:$(POLKADOT_SDK_RELEASE)_$(ZOMBIENET_RELEASE)-amd64
@echo ZOMBIE_TESTER_ARM64_IMAGE: $(DOCKER_REGISTRY_PATH)zombie_tester:$(POLKADOT_SDK_RELEASE)_$(ZOMBIENET_RELEASE)-arm64

zombie_tester_check_tag:
@docker manifest inspect $(DOCKER_REGISTRY_PATH)zombie_tester:$(POLKADOT_SDK_RELEASE)_$(ZOMBIENET_RELEASE) > /dev/null 2>&1 && echo "true" || echo "false"
11 changes: 11 additions & 0 deletions zombienet/docker/tester-entrypoint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/bin/bash

set -eo pipefail

install_packages kagome-dev=$KAGOME_PACKAGE_VERSION kagome-dev-runtime
echo "KAGOME_DEV_VERSION=`apt-cache policy kagome-dev | grep 'Installed:' | awk '{print $2}'`"
echo "KAGOME_DEV_RUNTIME_VERSION=`apt-cache policy kagome-dev-runtime | grep 'Installed:' | awk '{print $2}'`"

sed -i '1s/^/#/' /etc/apt/sources.list.d/kagome.list

exec gosu $USER_NAME "$@"
113 changes: 63 additions & 50 deletions zombienet/docker/zombie_tester.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -20,25 +20,27 @@ ENV AUTHOR=${AUTHOR}
LABEL org.opencontainers.image.authors="${AUTHOR}"
LABEL org.opencontainers.image.description="Zombienet image"

ARG ZOMBIENET_RELEASE
ENV ZOMBIENET_RELEASE=$ZOMBIENET_RELEASE
ARG POLKADOT_SDK_RELEASE
ENV POLKADOT_SDK_RELEASE=$POLKADOT_SDK_RELEASE
# Use a temporary working directory for root operations
WORKDIR /root/
SHELL ["/bin/bash", "-xo", "pipefail", "-c"]

# Copy the install_packages script and set executable permissions
COPY install_packages /usr/sbin/install_packages
RUN chmod 0755 /usr/sbin/install_packages

SHELL ["/bin/bash", "-o", "pipefail", "-c"]

RUN groupadd --gid 10000 nonroot && \
useradd --home-dir /home/nonroot \
--create-home \
--shell /bin/bash \
--gid nonroot \
--groups nonroot \
--uid 10000 nonroot
# Set Polkadot SDK release environment variable and install required packages
ARG ZOMBIENET_RELEASE
ENV ZOMBIENET_RELEASE=$ZOMBIENET_RELEASE
ARG POLKADOT_SDK_RELEASE
ENV POLKADOT_SDK_RELEASE=$POLKADOT_SDK_RELEASE

WORKDIR /home/nonroot/
# Setup enterprise repository and install required packages
ARG REGION
ENV REGION=$REGION
ARG PROJECT_ID
ENV PROJECT_ID=$PROJECT_ID
ARG POLKADOT_BINARY_PACKAGE_VERSION
ENV POLKADOT_BINARY_PACKAGE_VERSION=$POLKADOT_BINARY_PACKAGE_VERSION

RUN install_packages \
wget \
Expand All @@ -47,22 +49,6 @@ RUN install_packages \
gnupg2 \
curl


RUN mkdir -p /home/nonroot/bin

WORKDIR /home/nonroot/bin

ENV PATH="/home/nonroot/bin:${PATH}"

RUN wget -q https://github.com/paritytech/zombienet/releases/download/$ZOMBIENET_RELEASE/zombienet-linux-x64 && \
chmod +x zombienet-linux-x64 && \
ln -s /home/nonroot/bin/zombienet-linux-x64 /home/nonroot/bin/zombienet

# Setup enterprise repository

ARG REGION
ENV REGION=$REGION

RUN curl -fsSL https://${REGION}-apt.pkg.dev/doc/repo-signing-key.gpg | \
gpg --dearmor -o /usr/share/keyrings/${REGION}-apt-archive-keyring.gpg

Expand All @@ -75,39 +61,43 @@ RUN echo "deb [signed-by=/usr/share/keyrings/${REGION}-apt-archive-keyring.gpg]

RUN install_packages apt-transport-artifact-registry

ARG PROJECT_ID
ENV PROJECT_ID=$PROJECT_ID

RUN echo "deb [signed-by=/usr/share/keyrings/europe-north1-apt-archive-keyring.gpg] \
ar+https://${REGION}-apt.pkg.dev/projects/${PROJECT_ID} kagome-apt main" | \
tee -a /etc/apt/sources.list.d/kagome.list

RUN sed -i 's|^\(\s*\)# *Service-Account-JSON ".*";|\1Service-Account-JSON "/root/.gcp/google_creds.json";|' \
/etc/apt/apt.conf.d/90artifact-registry

ARG POLKADOT_BINARY_PACKAGE_VERSION
ENV POLKADOT_BINARY_PACKAGE_VERSION=$POLKADOT_BINARY_PACKAGE_VERSION

# Install Polkadot
RUN mkdir -p /root/.gcp
RUN --mount=type=secret,id=google_creds,target=/root/.gcp/google_creds.json \
install_packages polkadot-binary=${POLKADOT_BINARY_PACKAGE_VERSION} && \
sed -i '1s/^/#/' /etc/apt/sources.list.d/kagome.list

RUN echo "Polkadot Version:" && ./polkadot --version && \
echo "Polkadot Parachain Version:" && ./polkadot-parachain --version && \
echo "Zombienet Version:" && ./zombienet version && \
echo "Polkadot Execute Worker Version:" && ./polkadot-execute-worker --version && \
echo "Polkadot Prepare Worker Version:" && ./polkadot-prepare-worker --version && \
install_packages polkadot-binary=${POLKADOT_BINARY_PACKAGE_VERSION}

# Install Zombienet
RUN ARCHITECTURE=$(uname -m); \
if [ "$ARCHITECTURE" = "x86_64" ]; then \
ARCHITECTURE="x64"; \
elif [ "$ARCHITECTURE" = "aarch64" ]; then \
ARCHITECTURE="arm64"; \
else \
echo "-- Unsupported architecture: $ARCHITECTURE"; exit 1; \
fi && \
echo "-- Downloading zombienet v${ZOMBIENET_RELEASE} for ${ARCHITECTURE}" && \
wget -q https://github.com/paritytech/zombienet/releases/download/$ZOMBIENET_RELEASE/zombienet-linux-${ARCHITECTURE} && \
mv zombienet-linux-${ARCHITECTURE} /usr/local/bin/zombienet && \
chmod +x /usr/local/bin/zombienet

# Check installed versions
RUN echo "Polkadot Version:" && polkadot --version && \
echo "Polkadot Parachain Version:" && polkadot-parachain --version && \
echo "Zombienet Version:" && zombienet version && \
echo "Polkadot Execute Worker Version:" && polkadot-execute-worker --version && \
echo "Polkadot Prepare Worker Version:" && polkadot-prepare-worker --version && \
echo "Malus Version:" && malus --version && \
echo "Adder Collator Version:" && adder-collator --version && \
echo "Undying Collator Version:" && undying-collator --version

RUN ln -s /home/nonroot/bin/zombienet-linux-x64 /usr/local/bin/zombienet && \
ln -s /home/nonroot/bin/polkadot /usr/local/bin/polkadot && \
ln -s /home/nonroot/bin/polkadot-parachain /usr/local/bin/polkadot-parachain && \
ln -s /home/nonroot/bin/polkadot-execute-worker /usr/local/bin/polkadot-execute-worker && \
ln -s /home/nonroot/bin/polkadot-prepare-worker /usr/local/bin/polkadot-prepare-worker

# Install required packages
RUN install_packages \
gpg \
gpg-agent \
Expand All @@ -123,3 +113,26 @@ RUN install_packages \
ssh \
libgcc-s1 \
zlib1g

# Create non-root user and switch to it
ARG USER_ID=1000
ARG GROUP_ID=1000
ARG USER_NAME=builder
ENV USER_ID=${USER_ID}
ENV GROUP_ID=${GROUP_ID}
ENV USER_NAME=${USER_NAME}

# Create group with the specified GID, and user with the specified UID. Switch to the user.
RUN groupadd -g ${GROUP_ID} ${USER_NAME} && \
useradd -m -d /home/${USER_NAME} -u ${USER_ID} -g ${USER_NAME} ${USER_NAME}

WORKDIR /home/${USER_NAME}/workspace

# Install kagome on the startup
ARG KAGOME_PACKAGE_VERSION
ENV KAGOME_PACKAGE_VERSION=${KAGOME_PACKAGE_VERSION}

COPY tester-entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod 0755 /usr/local/bin/entrypoint.sh

ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]

0 comments on commit 2a898a5

Please sign in to comment.