Skip to content

Zombie Builder

Zombie Builder #195

#
# Copyright Quadrivium LLC
# All Rights Reserved
# SPDX-License-Identifier: Apache-2.0
#
name: Zombie Builder
on:
# schedule:
# - cron: '0 2 * * 0' # Update zombie builder image each Sunday night
workflow_dispatch:
inputs:
platform:
description: 'Platform selection'
type: choice
options:
- linux/amd64
- linux/arm64
default: linux/amd64
polkadot_builder:
description: 'Build the polkadot builder image'
required: false
default: 'false'
type: 'boolean'
polkadot_builder_tag:
description: 'Custom Polkadot Builder tag'
default: 'latest'
required: false
type: 'string'
polkadot_binaries:
description: 'Build the polkadot binaries'
required: false
default: 'true'
type: 'boolean'
polkadot_sdk_tag:
description: 'Custom Polkadot SDK tag'
required: false
type: 'string'
# zombie_tester_image_rebuild:
# description: 'Rebuild the zombie tester image'
# required: false
# default: false
# type: 'boolean'
# polkadot_sdk_tag:
# description: 'Custom Polkadot SDK tag'
# required: false
# type: 'string'
# zombie_tester_latest_tag:
# description: 'Custom Zombie Tester tag'
# default: 'latest'
# required: false
# type: 'string'
env:
DOCKER_REGISTRY_PATH: ${{ secrets.GCP_REGISTRY }}/${{ secrets.GCP_PROJECT }}/kagome-dev/
GITHUB_HUNTER_USERNAME: ${{ secrets.HUNTER_USERNAME }}
GITHUB_HUNTER_TOKEN: ${{ secrets.HUNTER_TOKEN }}
PLATFORM: ${{ github.event.inputs.platform || 'linux/amd64' }}
POLKADOT_SDK_TAG: ${{ github.event.inputs.polkadot_sdk_tag }}
BUILDER_LATEST_TAG: ${{ github.event.inputs.polkadot_builder_tag || 'latest' }}
TESTER_LATEST_TAG: ${{ github.event.inputs.zombie_tester_latest_tag || 'latest' }}
SCCACHE_GCS_BUCKET: ${{ secrets.SCCACHE_GCS_BUCKET }}
CACHE_VERSION: v001
CACHE_PATHS: ./zombienet/docker/build_docker/cargo
jobs:
build_polkadot_builder:
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
- platform: linux/amd64
os: ubuntu-24.04
- platform: linux/arm64
os: ubuntu-24.04-arm
timeout-minutes: 60
env:
PLATFORM: ${{ matrix.platform }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Fetch master branch
run: git fetch origin master:master
- name : "Authenticate with Google Cloud"
uses: 'google-github-actions/auth@v2'
with:
credentials_json: ${{ secrets.GCP_SERVICE_ACCOUNT_KEY }}
- name: "Set up Cloud SDK"
uses: 'google-github-actions/setup-gcloud@v2'
- name: "Configure Docker for GCR"
run: |
gcloud auth configure-docker --quiet
gcloud auth configure-docker ${{ secrets.GCP_REGISTRY }} --quiet
- name: "Check if image tag exists using Makefile"
id: check-tag
working-directory: ./zombienet/docker
run: |
make set_versions
exists=$(make polkadot_builder_check_tag)
echo "Image Exists: $exists"
echo "exists=$exists" >> $GITHUB_ENV
- name: "Build Polkadot Builder"
working-directory: ./zombienet/docker
if: env.exists == 'false' || github.event.inputs.polkadot_builder == 'true'
run: make polkadot_builder && make polkadot_builder_push
- name: "Versions Info"
if: always()
working-directory: ./zombienet/docker
run: |
make polkadot_builder_image_info
docker_manifest:
runs-on: ubuntu-24.04
timeout-minutes: 60
needs: [build_polkadot_builder]
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Fetch master branch
run: git fetch origin master:master
- name : "Authenticate with Google Cloud"
uses: 'google-github-actions/auth@v2'
with:
credentials_json: ${{ secrets.GCP_SERVICE_ACCOUNT_KEY }}
- name: "Set up Cloud SDK"
uses: 'google-github-actions/setup-gcloud@v2'
- name: "Configure Docker for GCR"
run: |
gcloud auth configure-docker --quiet
gcloud auth configure-docker ${{ secrets.GCP_REGISTRY }} --quiet
- name: "Check if image tag exists using Makefile"
id: check-tag
working-directory: ./zombienet/docker
run: |
make set_versions
exists=$(make polkadot_builder_check_tag)
echo "Image Exists: $exists"
echo "exists=$exists" >> $GITHUB_ENV
- name: "Build Polkadot Builder"
working-directory: ./zombienet/docker
if: env.exists == 'false' || github.event.inputs.polkadot_builder == 'true'
run: make polkadot_builder_push_manifest
- name: "Versions Info"
if: always()
working-directory: ./zombienet/docker
run: |
make polkadot_builder_image_info
building_binaries:
runs-on: [ actions-runner-controller ]
# runs-on: ${{ matrix.os }}
# strategy:
# matrix:
# include:
# - platform: linux/amd64
# os: ubuntu-24.04
# - platform: linux/arm64
# os: ubuntu-24.04-arm
needs:
- build_polkadot_builder
- docker_manifest
timeout-minutes: 120
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Fetch master branch
run: git fetch origin master:master
- uses: actions/cache@v4
with:
path: ${{ env.CACHE_PATHS }}
key: ${{ runner.os }}-rust-${{ env.CACHE_VERSION }}
- name: "Authenticate with Google Cloud"
uses: 'google-github-actions/auth@v2'
with:
credentials_json: ${{ secrets.GCP_SERVICE_ACCOUNT_KEY }}
- name: "Set up Cloud SDK"
uses: 'google-github-actions/setup-gcloud@v2'
- name: "Configure Docker for GCR"
run: |
gcloud auth configure-docker --quiet
gcloud auth configure-docker ${{ secrets.GCP_REGISTRY }} --quiet
- name: "Build target"
if: github.event.inputs.polkadot_binaries == 'true'
working-directory: ./zombienet/docker
run: make polkadot_binary
- name: "Push Polkadot APT Package"
if: github.event.inputs.polkadot_binaries == 'true'
working-directory: ./zombienet/docker
run: make upload_apt_package
- name: "Debian package Info"
if: always()
working-directory: ./zombienet/docker
run: |
make polkadot_deb_package_info
# build_zombie_tester:
# runs-on: ubuntu-latest
# needs: [building_binaries]
# timeout-minutes: 60
# steps:
# - name: "Checkout repository"
# uses: actions/checkout@v4
# - name : "Authenticate with Google Cloud"
# uses: 'google-github-actions/auth@v2'
# with:
# credentials_json: ${{ secrets.GCP_SERVICE_ACCOUNT_KEY }}
# - name: "Set up Cloud SDK"
# uses: 'google-github-actions/setup-gcloud@v2'
# - name: "Configure Docker for GCR"
# run: |
# gcloud auth configure-docker --quiet
# gcloud auth configure-docker ${{ secrets.GCP_REGISTRY }} --quiet
# - name: "Get Polkadot and Zombienet versions"
# working-directory: ./zombienet/docker
# run: make get_versions
# - name: "Download Variables Artifact"
# uses: actions/download-artifact@v4
# with:
# name: variables-artifact
# path: .
# - name: "Load Variables"
# id: load-variables
# run: |
# source variables.env
# echo "POLKADOT_BINARY_PACKAGE_VERSION=${POLKADOT_BINARY_PACKAGE_VERSION}" >> $GITHUB_ENV
# - name: "Check if image tag exists"
# id: check-tag
# working-directory: ./zombienet/docker
# run: |
# 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)
# ZOMBIE_TESTER_IMAGE=${DOCKER_REGISTRY_PATH}zombie_tester:${POLKADOT_SDK_RELEASE}_${ZOMBIENET_RELEASE}
# TAG_EXISTS=$(docker manifest inspect ${ZOMBIE_TESTER_IMAGE} > /dev/null 2>&1 && echo "true" || echo "false")
# echo "exists=$TAG_EXISTS" >> $GITHUB_ENV
# echo "zombie_tester_image=$ZOMBIE_TESTER_IMAGE" >> $GITHUB_OUTPUT
# - name: "Build Zombie Tester"
# working-directory: ./zombienet/docker
# if: env.exists == 'false' || github.event.inputs.zombie_tester_image_rebuild == 'true'
# run: make zombie_tester \
# DOCKER_REGISTRY_PATH=${DOCKER_REGISTRY_PATH} \
# GOOGLE_APPLICATION_CREDENTIALS=${GOOGLE_APPLICATION_CREDENTIALS} \
# PROJECT_ID=${{ secrets.GCP_PROJECT }} \
# TESTER_LATEST_TAG=${{ env.TESTER_LATEST_TAG }} \
# POLKADOT_BINARY_PACKAGE_VERSION="${POLKADOT_BINARY_PACKAGE_VERSION}"
# - name: "Push Zombie Tester"
# working-directory: ./zombienet/docker
# if: env.exists == 'false' || github.event.inputs.zombie_tester_image_rebuild == 'true'
# run: make zombie_tester_push \
# DOCKER_REGISTRY_PATH=${DOCKER_REGISTRY_PATH} \
# - name: "Versions Info"
# if: always()
# run: |
# echo "Zombie Tester Image: ${{ steps.check-tag.outputs.zombie_tester_image }}"