-
Notifications
You must be signed in to change notification settings - Fork 37
291 lines (266 loc) · 11.3 KB
/
deploy.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
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
# Deploy the miden node for testnet and devnet.
#
# testnet is deployed manually using `workflow_dispatch`, and devnet is deployed
# on every push to the `next` branch.
#
# All previous node data is removed during deployment i.e. an update restarts the
# node from genesis again.
name: Node deployment fix
on:
push:
branches:
- Fix-deployment-workflow
workflow_dispatch:
# workflow_dispatch:
# inputs:
# network:
# required: true
# default: 'devnet'
# type: choice
# options:
# - devnet
# # temporarily disabled until we are happy this works on devnet
# # - testnet
permissions:
id-token: write
contents: write
jobs:
deploy:
runs-on: ubuntu-latest
steps:
# Configure AWS credentials based on network.
- name: Checkout Code Repository
uses: actions/checkout@v3
# Configure the `NETWORK` env variable based on the trigger type.
#
# This is then used by subsequent steps to switch on devnet | testnet,
# instead of switching on trigger type which is less readible.
- name: Configure for testnet
if: ${{ inputs.network == 'testnet' }}
env:
INSTANCE_ID: ${{ secrets.TESTNET_INSTANCE_ID }}
run: echo "NETWORK=testnet" >> $GITHUB_ENV
- name: Configure for devnet
if: ${{ inputs.network == 'devnet' }}
env:
INSTANCE_ID: ${{ secrets.DEVNET_INSTANCE_ID }}
run: echo "NETWORK=devnet" >> $GITHUB_ENV
# - name: Configure testnet AWS credentials
# if: env.NETWORK == 'testnet'
# uses: aws-actions/configure-aws-credentials@v1
# with:
# aws-region: us-west-1
# role-to-assume: arn:aws:iam::211125515935:role/midentest-GithubActionsRole
# role-session-name: GithubActionsSession
- name: Configure devnet AWS credentials
# if: env.NETWORK == 'devnet'
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: eu-west-1
role-to-assume: arn:aws:iam::657556092833:role/midendev-GithubActionsRole
role-session-name: GithubActionsSession
- name: Stop services
id: stop_services
run: |
COMMAND_ID=$(aws ssm send-command \
--instance-ids i-0d50212756bccc552 \
--document-name "AWS-RunShellScript" \
--parameters '{"commands":["sudo systemctl stop miden-node", "sudo systemctl stop miden-faucet"]}' \
--output text \
--query "Command.CommandId")
echo "command_id=$COMMAND_ID" >> $GITHUB_OUTPUT
- name: Check stop services command status and retrieve output
run: |
sleep 5
STATUS=$(aws ssm list-command-invocations \
--command-id ${{ steps.stop_services.outputs.command_id }} \
--details \
--query "CommandInvocations[0].Status" \
--output text)
echo "Command Status: $STATUS"
OUTPUT=$(aws ssm list-command-invocations \
--command-id ${{ steps.stop_services.outputs.command_id }} \
--details \
--query "CommandInvocations[0].CommandPlugins[0].Output" \
--output text)
echo "Command Output: $OUTPUT"
if [ "$STATUS" != "Success" ]; then
echo "Command failed with status: $STATUS"
exit 1
fi
- name: Install prerequisites
id: install_prereq
run: |
COMMAND_ID=$(aws ssm send-command \
--instance-ids i-0d50212756bccc552 \
--document-name "AWS-RunShellScript" \
--parameters '{"commands":[
"sudo apt-get update -y",
"sudo apt-get install -y git gcc openssl libbz2-dev libffi7 make cargo",
"sudo apt install -y build-essential",
"curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y",
"source $HOME/.cargo/env",
"rustup update",
"sudo apt-get install -y clang cmake"
]}' \
--output text \
--query "Command.CommandId")
echo "command_id=$COMMAND_ID" >> $GITHUB_OUTPUT
- name: Poll command status and retrieve live logs from install prereqs
run: |
while true; do
STATUS=$(aws ssm list-command-invocations \
--command-id ${{ steps.install_prereq.outputs.command_id }} \
--details \
--query "CommandInvocations[0].Status" \
--output text)
echo "Command Status: $STATUS"
OUTPUT=$(aws ssm list-command-invocations \
--command-id ${{ steps.install_prereq.outputs.command_id }} \
--details \
--query "CommandInvocations[0].CommandPlugins[0].Output" \
--output text)
echo "Command Output: $OUTPUT"
if [ "$STATUS" == "Success" ]; then
echo "Command completed successfully."
break
elif [ "$STATUS" == "Failed" ] || [ "$STATUS" == "Cancelled" ]; then
echo "Command failed with status: $STATUS"
exit 1
else
sleep 30 # Wait for 30 seconds before checking again
fi
done
- name: Install devnet
id: install_devnet
run: |
COMMAND_ID=$(aws ssm send-command \
--instance-ids i-0d50212756bccc552 \
--document-name "AWS-RunShellScript" \
--parameters '{"commands":[
"/usr/bin/bash",
"cd /home/ubuntu",
"rustc --version",
"cargo install --git https://github.com/0xPolygonMiden/miden-node miden-node --branch next --bin miden-node --locked --features testing",
"cargo install --git https://github.com/0xPolygonMiden/miden-node miden-faucet --branch next --bin miden-faucet --locked --features testing"
]}' \
--output text \
--query "Command.CommandId")
echo "command_id=$COMMAND_ID" >> $GITHUB_OUTPUT
- name: Poll command status and retrieve live logs
run: |
while true; do
STATUS=$(aws ssm list-command-invocations \
--command-id ${{ steps.install_devnet.outputs.command_id }} \
--details \
--query "CommandInvocations[0].Status" \
--output text)
echo "Command Status: $STATUS"
OUTPUT=$(aws ssm list-command-invocations \
--command-id ${{ steps.install_devnet.outputs.command_id }} \
--details \
--query "CommandInvocations[0].CommandPlugins[0].Output" \
--output text)
echo "Command Output: $OUTPUT"
if [ "$STATUS" == "Success" ]; then
echo "Command completed successfully."
break
elif [ "$STATUS" == "Failed" ] || [ "$STATUS" == "Cancelled" ]; then
echo "Command failed with status: $STATUS"
exit 1
else
sleep 30 # Wait for 30 seconds before checking again
fi
done
# - name: Check install devnet command status and retrieve output
# run: |
# sleep 1800
# STATUS=$(aws ssm list-command-invocations \
# --command-id ${{ steps.install_devnet.outputs.command_id }} \
# --details \
# --query "CommandInvocations[0].Status" \
# --output text)
# echo "Command Status: $STATUS"
# OUTPUT=$(aws ssm list-command-invocations \
# --command-id ${{ steps.install_devnet.outputs.command_id }} \
# --details \
# --query "CommandInvocations[0].CommandPlugins[0].Output" \
# --output text)
# echo "Command Output: $OUTPUT"
# if [ "$STATUS" != "Success" ]; then
# echo "Command failed with status: $STATUS"
# exit 1
# fi
- name: Configure devnet
id: configure_devnet
run: |
COMMAND_ID=$(aws ssm send-command \
--instance-ids i-0d50212756bccc552 \
--document-name "AWS-RunShellScript" \
--parameters '{"commands":[
"rm -rf ~/miden-node; mkdir ~/miden-node",
"rm -rf ~/miden-faucet; mkdir ~/miden-faucet",
"miden-node init -c ~/miden-node/miden-node.toml -g ~/miden-node/genesis.toml",
"miden-node make-genesis -i ~/miden-node/genesis.toml -o ~/miden-node/genesis.dat",
"miden-faucet init -c ~/miden-faucet/miden-faucet.toml",
"cat > /etc/systemd/system/miden-node.service << 'END_OF_CAT' ... END_OF_CAT",
"cat > /etc/systemd/system/miden-facuet.service << 'END_OF_CAT' ... END_OF_CAT"
]}' \
--output text \
--query "Command.CommandId")
echo "command_id=$COMMAND_ID" >> $GITHUB_OUTPUT
- name: Check configure devnet command status and retrieve output
run: |
sleep 50
STATUS=$(aws ssm list-command-invocations \
--command-id ${{ steps.configure_devnet.outputs.command_id }} \
--details \
--query "CommandInvocations[0].Status" \
--output text)
echo "Command Status: $STATUS"
OUTPUT=$(aws ssm list-command-invocations \
--command-id ${{ steps.configure_devnet.outputs.command_id }} \
--details \
--query "CommandInvocations[0].CommandPlugins[0].Output" \
--output text)
echo "Command Output: $OUTPUT"
if [ "$STATUS" != "Success" ]; then
echo "Command failed with status: $STATUS"
exit 1
fi
- name: Start services
id: start_services
run: |
COMMAND_ID=$(aws ssm send-command \
--instance-ids i-0d50212756bccc552 \
--document-name "AWS-RunShellScript" \
--parameters '{"commands":[
"sudo systemctl daemon-reload",
"sudo systemctl enable miden-node",
"sudo systemctl enable miden-faucet",
"sudo systemctl start miden-node",
"sleep 5",
"sudo systemctl start miden-faucet"
]}' \
--output text \
--query "Command.CommandId")
echo "command_id=$COMMAND_ID" >> $GITHUB_OUTPUT
- name: Check Start services command status and retrieve output
run: |
sleep 10
STATUS=$(aws ssm list-command-invocations \
--command-id ${{ steps.start_services.outputs.command_id }} \
--details \
--query "CommandInvocations[0].Status" \
--output text)
echo "Command Status: $STATUS"
OUTPUT=$(aws ssm list-command-invocations \
--command-id ${{ steps.start_services.outputs.command_id }} \
--details \
--query "CommandInvocations[0].CommandPlugins[0].Output" \
--output text)
echo "Command Output: $OUTPUT"
if [ "$STATUS" != "Success" ]; then
echo "Command failed with status: $STATUS"
exit 1
fi