-
Notifications
You must be signed in to change notification settings - Fork 36
230 lines (193 loc) · 8.7 KB
/
zombie-builder.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
#
# 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_image_rebuild:
description: 'Rebuild the polkadot builder image'
required: false
default: 'false'
type: 'boolean'
polkadot_binaries_rebuild:
description: 'Rebuild the polkadot binaries'
required: false
default: 'true'
type: 'boolean'
zombie_tester_image_rebuild:
description: 'Rebuild the zombie tester image'
required: false
default: 'false'
type: 'boolean'
env:
DOCKER_REGISTRY_PATH: ${{ secrets.GCP_REGISTRY }}/${{ secrets.GCP_PROJECT }}/kagome-dev/
GITHUB_HUNTER_USERNAME: ${{ secrets.HUNTER_USERNAME }}
GITHUB_HUNTER_TOKEN: ${{ secrets.HUNTER_TOKEN }}
CACHE_VERSION: v001
CACHE_PATHS: ./zombienet/docker/cargo
jobs:
build_polkadot_builder:
runs-on: ubuntu-latest
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: "Check if image tag exists"
id: check-tag
working-directory: ./zombienet/docker
run: |
POLKADOT_VERSION=$(grep 'polkadot_format_version:' polkadot-sdk-versions.txt | cut -d ' ' -f 2)
POLKADOT_BUILDER_IMAGE=${DOCKER_REGISTRY_PATH}polkadot_builder:${POLKADOT_VERSION}
TAG_EXISTS=$(docker manifest inspect ${POLKADOT_BUILDER_IMAGE} > /dev/null 2>&1 && echo "true" || echo "false")
echo "exists=$TAG_EXISTS" >> $GITHUB_ENV
echo "polkadot_builder_image=$POLKADOT_BUILDER_IMAGE" >> $GITHUB_OUTPUT
- name: "Build Polkadot Builder"
working-directory: ./zombienet/docker
if: env.exists == 'false' || github.event.inputs.polkadot_image_rebuild == 'true'
run: make polkadot_builder \
DOCKER_REGISTRY_PATH=${DOCKER_REGISTRY_PATH}
- name: "Push Polkadot Builder"
working-directory: ./zombienet/docker
if: env.exists == 'false' || github.event.inputs.polkadot_image_rebuild == 'true'
run: make polkadot_builder_push \
DOCKER_REGISTRY_PATH=${DOCKER_REGISTRY_PATH}
- name: "Versions Info"
if: always()
run: |
echo "Polkadot Builder Image: ${{ steps.check-tag.outputs.polkadot_builder_image }}"
building_binaries:
runs-on: [ actions-runner-controller ]
needs: [build_polkadot_builder]
timeout-minutes: 120
steps:
- name: Checkout repository
uses: actions/checkout@v4
- 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: "Get Polkadot and Zombienet versions"
working-directory: ./zombienet/docker
run: make get_versions
- name: "Setup package version if not rebuilding"
if: github.event.inputs.polkadot_binaries_rebuild == 'false'
working-directory: ./zombienet/docker
run: |
ARTIFACTS_REPO=$(grep '^ARTIFACTS_REPO ?=' Makefile | sed 's/ARTIFACTS_REPO ?= //')
REGION=$(grep '^REGION ?=' Makefile | sed 's/REGION ?= //')
gcloud config set artifacts/repository $ARTIFACTS_REPO
gcloud config set artifacts/location $REGION
POLKADOT_BINARY_PACKAGE_VERSION=$(gcloud artifacts versions list --package=polkadot-binary --format=json | \
jq -r 'sort_by(.createTime) | .[-1] | {version: (.name | split("/") | last), createTime: .createTime} | .version')
echo "POLKADOT_BINARY_PACKAGE_VERSION=${POLKADOT_BINARY_PACKAGE_VERSION}" | tee -a variables.env
- name: "Build target"
if: github.event.inputs.polkadot_binaries_rebuild == 'true'
working-directory: ./zombienet/docker
run: make polkadot_binary \
DOCKER_REGISTRY_PATH=${DOCKER_REGISTRY_PATH} \
SCCACHE_GCS_BUCKET=${{ secrets.SCCACHE_GCS_BUCKET }} \
- name: "Push Polkadot APT Package"
if: github.event.inputs.polkadot_binaries_rebuild == 'true'
working-directory: ./zombienet/docker
id: push_apt_package
run: |
SHORT_COMMIT_HASH=$(grep 'short_commit_hash:' commit_hash.txt | cut -d ' ' -f 2)
POLKADOT_RELEASE_GLOBAL_NUMERIC=$(grep 'numeric_version:' polkadot-sdk-versions.txt | cut -d ' ' -f 2)
POLKADOT_BINARY_PACKAGE_VERSION="${POLKADOT_RELEASE_GLOBAL_NUMERIC}-${SHORT_COMMIT_HASH}"
echo "POLKADOT_BINARY_PACKAGE_VERSION=${POLKADOT_BINARY_PACKAGE_VERSION}" | tee -a variables.env
make upload_apt_package
- name: "Upload Variables Artifact"
uses: actions/upload-artifact@v4
with:
name: variables-artifact
path: ./zombienet/docker/variables.env
# - name: Archive build outputs
# uses: actions/upload-artifact@v4
# with:
# name: build-output
# path: ./zombienet/docker/polkadot_binary/
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 Polkadot Builder"
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 }} \
POLKADOT_BINARY_PACKAGE_VERSION="${POLKADOT_BINARY_PACKAGE_VERSION}"
- name: "Push Polkadot Builder"
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 }}"