Skip to content

Zombie Builder

Zombie Builder #241

#
# 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:
polkadot_builder:
description: 'Build the polkadot builder image'
required: false
default: 'false'
type: 'boolean'
polkadot_binaries:
description: 'Build the polkadot binaries'
required: false
default: 'true'
type: 'boolean'
polkadot_builder_tag:
description: 'Polkadot Builder tag'
default: 'latest'
required: false
type: 'string'
polkadot_sdk_tag:
description: 'Custom Polkadot SDK tag (e.g. polkadot-stable2412)'
required: false
type: 'string'
polkadot_sdk_repo:
description: 'Custom Polkadot SDK repo'
default: 'https://github.com/paritytech/polkadot-sdk.git'
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 }}
PROJECT_ID: ${{ secrets.GCP_PROJECT }}
SCCACHE_GCS_BUCKET: ${{ secrets.SCCACHE_GCS_BUCKET }}
POLKADOT_SDK_TAG: ${{ github.event.inputs.polkadot_sdk_tag }}
BUILDER_LATEST_TAG: ${{ github.event.inputs.polkadot_builder_tag || 'latest' }}
POLKADOT_REPO_URL: ${{ github.event.inputs.polkadot_sdk_repo || 'https://github.com/paritytech/polkadot-sdk.git' }}
DOCKER_BUILD_DIR_NAME: build_docker_ci
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: "Сheck if polkadot_builder is required"
run: |
if [ "${{ github.event.inputs.polkadot_builder }}" != "true" ]; then
echo "Polkadot Builder is not required"
echo "skip=true" >> $GITHUB_ENV
fi
- name: Checkout repository
if: env.skip != 'true'
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Fetch master branch
if: env.skip != 'true'
run: |
git fetch origin master:master
- name : "Authenticate with Google Cloud"
if: env.skip != 'true'
uses: 'google-github-actions/auth@v2'
with:
credentials_json: ${{ secrets.GCP_SERVICE_ACCOUNT_KEY }}
- name: "Set up Cloud SDK"
if: env.skip != 'true'
uses: 'google-github-actions/setup-gcloud@v2'
- name: "Configure Docker for GCR"
if: env.skip != 'true'
run: |
gcloud auth configure-docker --quiet
gcloud auth configure-docker ${{ secrets.GCP_REGISTRY }} --quiet
- name: "Check if image tag exists using Makefile"
if: env.skip != 'true'
id: check-tag
working-directory: ./zombienet/docker
run: |
make configure
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' || env.skip != 'true'
run: |
make polkadot_builder && make polkadot_builder_push
- name: "Versions Info"
if: always() && env.skip != 'true'
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: "Сheck if polkadot_builder is required"
run: |
if [ "${{ github.event.inputs.polkadot_builder }}" != "true" ]; then
echo "Polkadot Builder is not required"
echo "skip=true" >> $GITHUB_ENV
fi
- name: Checkout repository
if: env.skip != 'true'
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Fetch master branch
if: env.skip != 'true'
run: |
git fetch origin master:master
- name : "Authenticate with Google Cloud"
if: env.skip != 'true'
uses: 'google-github-actions/auth@v2'
with:
credentials_json: ${{ secrets.GCP_SERVICE_ACCOUNT_KEY }}
- name: "Set up Cloud SDK"
if: env.skip != 'true'
uses: 'google-github-actions/setup-gcloud@v2'
- name: "Configure Docker for GCR"
if: env.skip != 'true'
run: |
gcloud auth configure-docker --quiet
gcloud auth configure-docker ${{ secrets.GCP_REGISTRY }} --quiet
- name: "Check if image tag exists using Makefile"
if: env.skip != 'true'
id: check-tag
working-directory: ./zombienet/docker
run: |
make configure
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' || env.skip != 'true'
run: |
make polkadot_builder_push_manifest
- name: "Versions Info"
if: always() && env.skip != 'true'
working-directory: ./zombienet/docker
run: |
make polkadot_builder_image_info
building_binaries:
if: github.event.inputs.polkadot_binaries == 'true'
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
include:
- platform: linux/amd64
runner: [ actions-runner-controller ]
- platform: linux/arm64
runner: [ self-hosted, qdrvm-arm64 ]
needs:
- build_polkadot_builder
- docker_manifest
timeout-minutes: 120
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: "Build target"
working-directory: ./zombienet/docker
run: |
make configure
make polkadot_binary
- name: "Push Polkadot APT Package"
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