Skip to content

Commit 1b3c487

Browse files
author
Skylar Simoncelli
committed
feat: cicd.yml
1 parent 8bfa30d commit 1b3c487

File tree

1 file changed

+343
-0
lines changed

1 file changed

+343
-0
lines changed

.github/workflows/cicd.yml

+343
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,343 @@
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

Comments
 (0)