Zombie Builder #237
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# 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 |