1
+ name : Build, test, release and deploy
2
+
3
+ on :
4
+ workflow_dispatch :
5
+ inputs :
6
+ partner_chains_sha :
7
+ description : " partner-chains commit SHA or branch to build from"
8
+ partner-chains-tag :
9
+ description : " partner-chains release tag"
10
+ required : true
11
+
12
+ jobs :
13
+ partner-chains-linux :
14
+ runs-on : ubuntu-latest
15
+ steps :
16
+ - name : Set filename variables
17
+ id : set-filenames
18
+ run : |
19
+ echo "PARTNER_CHAINS_CLI_X86_64_LINUX=partner-chains-cli-${{ github.event.inputs.partner-chains-tag }}-x86_64-linux" >> $GITHUB_ENV
20
+ echo "PARTNER_CHAINS_NODE_X86_64_LINUX=partner-chains-node-${{ github.event.inputs.partner-chains-tag }}-x86_64-linux" >> $GITHUB_ENV
21
+
22
+ - name : Checkout code
23
+ uses : actions/checkout@v4
24
+ with :
25
+ ref : ${{ github.event.inputs.partner_chains_sha }}
26
+
27
+ - name : Acquire AWS credentials
28
+ uses : aws-actions/configure-aws-credentials@v4
29
+ with :
30
+ role-to-assume : ${{ secrets.AWS_ROLE_ARN_SECRET }}
31
+ aws-region : ${{ env.AWS_REGION }}
32
+
33
+ - name : Login to ECR
34
+ uses : docker/login-action@v3
35
+ with :
36
+ registry : ${{ secrets.ECR_REGISTRY_SECRET }}
37
+
38
+ - name : Install dependencies
39
+ run : |
40
+ sudo apt-get update
41
+ sudo apt-get install -y protobuf-compiler
42
+ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
43
+ source $HOME/.cargo/env
44
+ rustup target add x86_64-unknown-linux-gnu
45
+
46
+ - name : Build partner-chains-node
47
+ run : |
48
+ rustup target add x86_64-unknown-linux-gnu
49
+ cargo build -p partner-chains-node --locked --release --target x86_64-unknown-linux-gnu
50
+ cp target/x86_64-unknown-linux-gnu/release/partner-chains-node $PARTNER_CHAINS_NODE_X86_64_LINUX
51
+ chmod +x $PARTNER_CHAINS_NODE_X86_64_LINUX
52
+
53
+ - name : Run tests
54
+ run : cargo test --locked --release --target x86_64-unknown-linux-gnu
55
+
56
+ - name : Generate Chain Specs
57
+ run : |
58
+ chmod +x ./partner-chains-node
59
+ source ./devnet/.envrc
60
+ ./partner-chains-node build-spec --chain local --disable-default-bootnode --raw > devnet_chain_spec.json
61
+ source ./staging/.envrc
62
+ ./partner-chains-node build-spec --chain staging --disable-default-bootnode --raw > staging_chain_spec.json
63
+
64
+ - name : Create and Configure Docker Container
65
+ id : create-container
66
+ run : |
67
+ container_id=$(docker run -d debian:bullseye-slim sleep infinity)
68
+ echo "container_id=$container_id" >> $GITHUB_ENV
69
+ docker exec $container_id useradd -m -u 1000 -U -s /bin/sh -d /substrate substrate
70
+ docker exec $container_id mkdir -p /data /substrate/.local/share/partner-chains-node
71
+ docker exec $container_id chown -R substrate:substrate /data /substrate
72
+ docker exec $container_id rm -rf /usr/bin/apt* /usr/bin/dpkg*
73
+ docker exec $container_id ln -s /data /substrate/.local/share/partner-chains-node
74
+ docker cp ./partner-chains-node $container_id:/usr/local/bin/partner-chains-node
75
+ docker commit --change='EXPOSE 30333 9615 9933 9944' --change='ENTRYPOINT ["/usr/local/bin/partner-chains-node"]' $container_id substrate-node:${{ github.sha }}
76
+
77
+ - name : Cleanup Docker Container
78
+ if : always()
79
+ run : |
80
+ docker rm -f ${{ env.container_id }}
81
+
82
+ - name : Build partner-chains-cli
83
+ run : |
84
+ rustup target add x86_64-unknown-linux-gnu
85
+ cargo build -p partner-chains-cli --locked --release --target x86_64-unknown-linux-gnu
86
+ cp target/x86_64-unknown-linux-gnu/release/partner-chains-cli $PARTNER_CHAINS_CLI_X86_64_LINUX
87
+ chmod +x $PARTNER_CHAINS_CLI_X86_64_LINUX
88
+
89
+ - name : Push to ECR
90
+ run : |
91
+ docker tag substrate-node:${{ github.sha }} ${{ secrets.ECR_REGISTRY_SECRET }}/substrate-node:${{ github.sha }}
92
+ docker push ${{ secrets.ECR_REGISTRY_SECRET }}/substrate-node:${{ github.sha }}
93
+
94
+ - name : Upload partner-chains-cli-x86_64-linux
95
+ uses : actions/upload-artifact@v4
96
+ with :
97
+ name : ${{ env.PARTNER_CHAINS_CLI_X86_64_LINUX }}
98
+ path : ${{ env.PARTNER_CHAINS_CLI_X86_64_LINUX }}
99
+
100
+ - name : Upload partner-chains-node-x86_64-linux
101
+ uses : actions/upload-artifact@v4
102
+ with :
103
+ name : ${{ env.PARTNER_CHAINS_NODE_X86_64_LINUX }}
104
+ path : ${{ env.PARTNER_CHAINS_NODE_X86_64_LINUX }}
105
+
106
+ - name : Upload chain spec artifacts
107
+ uses : actions/upload-artifact@v4
108
+ if : ${{ github.event.pull_request.merged == true && !contains(github.event.pull_request.labels.*.name, 'ci-off') }}
109
+ with :
110
+ name : chain-specs
111
+ path : |
112
+ ./devnet_chain_spec.json
113
+ ./staging_chain_spec.json
114
+
115
+ partner-chains-macos-x86_64 :
116
+ runs-on : macos-latest
117
+ steps :
118
+ - name : Set filename variables
119
+ id : set-filenames
120
+ run : |
121
+ echo "PARTNER_CHAINS_CLI_X86_64_APPLE_DARWIN=partner-chains-cli-${{ github.event.inputs.partner-chains-tag }}-x86_64-apple-darwin" >> $GITHUB_ENV
122
+ echo "PARTNER_CHAINS_NODE_X86_64_APPLE_DARWIN=partner-chains-node-${{ github.event.inputs.partner-chains-tag }}-x86_64-apple-darwin" >> $GITHUB_ENV
123
+
124
+ - name : Checkout code
125
+ uses : actions/checkout@v4
126
+ with :
127
+ ref : ${{ github.event.inputs.partner_chains_sha }}
128
+
129
+ - name : Install protoc
130
+ run : |
131
+ curl -LO https://github.com/protocolbuffers/protobuf/releases/download/v21.3/protoc-21.3-osx-x86_64.zip
132
+ unzip protoc-21.3-osx-x86_64.zip -d $HOME/protoc
133
+ sudo mv $HOME/protoc/bin/protoc /usr/local/bin/protoc
134
+
135
+ - name : Build partner-chains-node
136
+ run : |
137
+ rustup target add x86_64-apple-darwin
138
+ cargo build -p partner-chains-node --locked --release --target x86_64-apple-darwin
139
+ cp target/x86_64-apple-darwin/release/partner-chains-node $PARTNER_CHAINS_NODE_X86_64_APPLE_DARWIN
140
+ chmod +x $PARTNER_CHAINS_NODE_X86_64_APPLE_DARWIN
141
+
142
+ - name : Build partner-chains-cli
143
+ run : |
144
+ rustup target add x86_64-apple-darwin
145
+ cargo build -p partner-chains-cli --locked --release --target x86_64-apple-darwin
146
+ cp target/x86_64-apple-darwin/release/partner-chains-cli $PARTNER_CHAINS_CLI_X86_64_APPLE_DARWIN
147
+ chmod +x $PARTNER_CHAINS_CLI_X86_64_APPLE_DARWIN
148
+
149
+ - name : Upload partner-chains-cli-x86_64-apple-darwin
150
+ uses : actions/upload-artifact@v4
151
+ with :
152
+ name : ${{ env.PARTNER_CHAINS_CLI_X86_64_APPLE_DARWIN }}
153
+ path : ${{ env.PARTNER_CHAINS_CLI_X86_64_APPLE_DARWIN }}
154
+
155
+ - name : Upload partner-chains-node-x86_64-apple-darwin
156
+ uses : actions/upload-artifact@v4
157
+ with :
158
+ name : ${{ env.PARTNER_CHAINS_NODE_X86_64_APPLE_DARWIN }}
159
+ path : ${{ env.PARTNER_CHAINS_NODE_X86_64_APPLE_DARWIN }}
160
+
161
+ partner-chains-macos-arm64 :
162
+ runs-on : macos-latest
163
+ steps :
164
+ - name : Set filename variables
165
+ id : set-filenames
166
+ run : |
167
+ echo "PARTNER_CHAINS_CLI_AARCH64_APPLE_DARWIN=partner-chains-cli-${{ github.event.inputs.partner-chains-tag }}-aarch64-apple-darwin" >> $GITHUB_ENV
168
+ echo "PARTNER_CHAINS_NODE_AARCH64_APPLE_DARWIN=partner-chains-node-${{ github.event.inputs.partner-chains-tag }}-aarch64-apple-darwin" >> $GITHUB_ENV
169
+
170
+ - name : Checkout code
171
+ uses : actions/checkout@v4
172
+ with :
173
+ ref : ${{ github.event.inputs.partner_chains_sha }}
174
+
175
+ - name : Install protoc
176
+ run : |
177
+ curl -LO https://github.com/protocolbuffers/protobuf/releases/download/v21.3/protoc-21.3-osx-aarch_64.zip
178
+ unzip protoc-21.3-osx-aarch_64.zip -d $HOME/protoc
179
+ sudo mv $HOME/protoc/bin/protoc /usr/local/bin/protoc
180
+
181
+ - name : Build partner-chains-node
182
+ run : |
183
+ rustup target add aarch64-apple-darwin
184
+ cargo build -p partner-chains-node --locked --release --target aarch64-apple-darwin
185
+ cp target/aarch64-apple-darwin/release/partner-chains-node $PARTNER_CHAINS_NODE_AARCH64_APPLE_DARWIN
186
+ chmod +x $PARTNER_CHAINS_NODE_AARCH64_APPLE_DARWIN
187
+
188
+ - name : Build partner-chains-cli
189
+ run : |
190
+ rustup target add aarch64-apple-darwin
191
+ cargo build -p partner-chains-cli --locked --release --target aarch64-apple-darwin
192
+ cp target/aarch64-apple-darwin/release/partner-chains-cli $PARTNER_CHAINS_CLI_AARCH64_APPLE_DARWIN
193
+ chmod +x $PARTNER_CHAINS_CLI_AARCH64_APPLE_DARWIN
194
+
195
+ - name : Upload partner-chains-cli-aarch64-apple-darwin
196
+ uses : actions/upload-artifact@v4
197
+ with :
198
+ name : ${{ env.PARTNER_CHAINS_CLI_AARCH64_APPLE_DARWIN }}
199
+ path : ${{ env.PARTNER_CHAINS_CLI_AARCH64_APPLE_DARWIN }}
200
+
201
+ - name : Upload partner-chains-node-aarch64-apple-darwin
202
+ uses : actions/upload-artifact@v4
203
+ with :
204
+ name : ${{ env.PARTNER_CHAINS_NODE_AARCH64_APPLE_DARWIN }}
205
+ path : ${{ env.PARTNER_CHAINS_NODE_AARCH64_APPLE_DARWIN }}
206
+
207
+ partner-chains-smart-contracts-x86_64-linux :
208
+ runs-on : [self-hosted, nixos]
209
+ steps :
210
+ - name : Checkout repository
211
+ uses : actions/checkout@v4
212
+ with :
213
+ ref : ${{ github.event.inputs.partner_chains_smart_contracts_sha }}
214
+
215
+ - name : Build
216
+ run : nix build ./#sidechain-release-bundle
217
+
218
+ - name : Upload Artifact
219
+ uses : actions/upload-artifact@v4
220
+ with :
221
+ name : partner-chains-smart-contracts-x86_64-linux
222
+ path : result/release.zip
223
+
224
+ partner-chains-smart-contracts-process :
225
+ runs-on : ubuntu-latest
226
+ needs : [partner-chains-smart-contracts-x86_64-linux]
227
+ steps :
228
+ - name : Download x86_64-linux artifact
229
+ uses : actions/download-artifact@v4
230
+ with :
231
+ name : partner-chains-smart-contracts-x86_64-linux
232
+ path : ./x86_64-linux
233
+
234
+ - name : Unzip release.zip
235
+ run : |
236
+ mkdir -p ./x86_64-linux/unzipped
237
+ unzip ./x86_64-linux/release.zip -d ./x86_64-linux/unzipped
238
+
239
+ local-environment :
240
+ runs-on : ubuntu-latest
241
+ needs : [partner-chains-linux, partner-chains-macos-x86_64, partner-chains-macos-arm64]
242
+ steps :
243
+
244
+
245
+
246
+ release :
247
+ runs-on : ubuntu-latest
248
+ needs : [local-environment]
249
+ steps :
250
+ - name : Set filename variables
251
+ id : set-filenames
252
+ run : |
253
+ echo "PARTNER_CHAINS_CLI_X86_64_LINUX=partner-chains-cli-${{ github.event.inputs.partner-chains-tag }}-x86_64-linux" >> $GITHUB_ENV
254
+ echo "PARTNER_CHAINS_NODE_X86_64_LINUX=partner-chains-node-${{ github.event.inputs.partner-chains-tag }}-x86_64-linux" >> $GITHUB_ENV
255
+ echo "PARTNER_CHAINS_CLI_X86_64_APPLE_DARWIN=partner-chains-cli-${{ github.event.inputs.partner-chains-tag }}-x86_64-apple-darwin" >> $GITHUB_ENV
256
+ echo "PARTNER_CHAINS_NODE_X86_64_APPLE_DARWIN=partner-chains-node-${{ github.event.inputs.partner-chains-tag }}-x86_64-apple-darwin" >> $GITHUB_ENV
257
+ echo "PARTNER_CHAINS_CLI_AARCH64_APPLE_DARWIN=partner-chains-cli-${{ github.event.inputs.partner-chains-tag }}-aarch64-apple-darwin" >> $GITHUB_ENV
258
+ echo "PARTNER_CHAINS_NODE_AARCH64_APPLE_DARWIN=partner-chains-node-${{ github.event.inputs.partner-chains-tag }}-aarch64-apple-darwin" >> $GITHUB_ENV
259
+
260
+ - name : Download Linux CLI artifact
261
+ uses : actions/download-artifact@v4
262
+ with :
263
+ name : ${{ env.PARTNER_CHAINS_CLI_X86_64_LINUX }}
264
+ path : artifact-linux/
265
+
266
+ - name : Download Linux NODE artifact
267
+ uses : actions/download-artifact@v4
268
+ with :
269
+ name : ${{ env.PARTNER_CHAINS_NODE_X86_64_LINUX }}
270
+ path : artifact-linux/
271
+
272
+ - name : Download macOS x86_64 CLI artifact
273
+ uses : actions/download-artifact@v4
274
+ with :
275
+ name : ${{ env.PARTNER_CHAINS_CLI_X86_64_APPLE_DARWIN }}
276
+ path : artifact-macos-x86_64/
277
+
278
+ - name : Download macOS x86_64 NODE artifact
279
+ uses : actions/download-artifact@v4
280
+ with :
281
+ name : ${{ env.PARTNER_CHAINS_NODE_X86_64_APPLE_DARWIN }}
282
+ path : artifact-macos-x86_64/
283
+
284
+ - name : Download macOS ARM64 CLI artifact
285
+ uses : actions/download-artifact@v4
286
+ with :
287
+ name : ${{ env.PARTNER_CHAINS_CLI_AARCH64_APPLE_DARWIN }}
288
+ path : artifact-macos-arm64/
289
+
290
+ - name : Download macOS ARM64 NODE artifact
291
+ uses : actions/download-artifact@v4
292
+ with :
293
+ name : ${{ env.PARTNER_CHAINS_NODE_AARCH64_APPLE_DARWIN }}
294
+ path : artifact-macos-arm64/
295
+
296
+ - name : Check if release already exists
297
+ id : check_release
298
+ run : |
299
+ tag="${{ github.event.inputs.partner-chains-tag }}"
300
+ release_response=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
301
+ "https://api.github.com/repos/${{ github.repository }}/releases/tags/$tag")
302
+ if echo "$release_response" | grep -q '"message": "Not Found"'; then
303
+ echo "release_exists=false" >> $GITHUB_ENV
304
+ echo "::set-output name=release_exists::false"
305
+ else
306
+ echo "release_exists=true" >> $GITHUB_ENV
307
+ echo "::set-output name=release_exists::true"
308
+ echo "release_id=$(echo $release_response | jq -r .id)" >> $GITHUB_ENV
309
+ echo "::set-output name=release_id::$(echo $release_response | jq -r .id)"
310
+ fi
311
+
312
+ - name : Create draft release
313
+ id : create_release
314
+ if : ${{ steps.check_release.outputs.release_exists == 'false' }}
315
+ run : |
316
+ tag="${{ github.event.inputs.partner-chains-tag }}"
317
+ release_response=$(curl -s -X POST -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
318
+ -d '{"tag_name": "'$tag'", "name": "'$tag'", "body": "Draft release for '$tag'", "draft": true}' \
319
+ "https://api.github.com/repos/${{ github.repository }}/releases")
320
+ echo "release_id=$(echo $release_response | jq -r .id)" >> $GITHUB_ENV
321
+ echo "::set-output name=release_id::$(echo $release_response | jq -r .id)"
322
+
323
+ - name : Upload artifacts to release
324
+ if : ${{ steps.check_release.outputs.release_exists == 'true' || steps.create_release.outputs.release_id != '' }}
325
+ run : |
326
+ release_id="${{ steps.create_release.outputs.release_id }}"
327
+ if [ -z "$release_id" ]; then
328
+ release_id="${{ steps.check_release.outputs.release_id }}"
329
+ fi
330
+
331
+ for artifact in "artifact-linux/${{ env.PARTNER_CHAINS_CLI_X86_64_LINUX }}" \
332
+ " artifact-linux/${{ env.PARTNER_CHAINS_NODE_X86_64_LINUX }}" \
333
+ " artifact-macos-x86_64/${{ env.PARTNER_CHAINS_CLI_X86_64_APPLE_DARWIN }}" \
334
+ " artifact-macos-x86_64/${{ env.PARTNER_CHAINS_NODE_X86_64_APPLE_DARWIN }}" \
335
+ " artifact-macos-arm64/${{ env.PARTNER_CHAINS_CLI_AARCH64_APPLE_DARWIN }}" \
336
+ " artifact-macos-arm64/${{ env.PARTNER_CHAINS_NODE_AARCH64_APPLE_DARWIN }}" ; do
337
+ chmod +x "$artifact"
338
+ curl -s -X POST \
339
+ -H "Authorization : token ${{ secrets.GITHUB_TOKEN }}" \
340
+ -H "Content-Type : application/octet-stream" \
341
+ --data-binary @"$artifact" \
342
+ " https://uploads.github.com/repos/${{ github.repository }}/releases/$release_id/assets?name=$(basename $artifact)"
343
+ done
0 commit comments