-
Notifications
You must be signed in to change notification settings - Fork 15
71 lines (59 loc) · 1.73 KB
/
docker-network-health.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
name: Docker Network Health Check
on:
workflow_dispatch:
pull_request:
paths:
- '**'
- '!documentation/**'
- '!scripts/**'
- '!tools/**'
- 'tools/genesis-snapshot/**'
push:
branches:
- develop
concurrency:
group: run-and-check-group
cancel-in-progress: false
jobs:
run-and-check:
runs-on: self-hosted
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Run network, wait and check health
run: |
set -x
# Run network
cd ./tools/docker-network
timeout 10m ./run.sh &
RUN_PID=$!
# Wait for node-4 to be created before querying it
timeout 10m bash -c 'until docker ps | grep docker-network-node-4; do sleep 5; done' &
# Wait for any of the two processes to exit
wait -n || exit 1
# Additional 10 seconds wait to allow the API to come up
sleep 10
# Health check
SUCCESS=false
while true; do
OUTPUT=$(curl -o /dev/null -s -w "%{http_code}\n" http://localhost:8080/health)
if [[ $OUTPUT -eq 200 ]]; then
SUCCESS=true
kill -s SIGINT $RUN_PID
break
# curl will return a connection refused when the network is tear down from the timeout.
elif [[ $OUTPUT -eq 000 ]]; then
echo "Connection refused. Failing the action."
break
fi
sleep 5
done
if [[ ! $SUCCESS ]]; then
echo "Health check never returned 200. Failing the action."
exit 1
fi
- name: Cleanup
run: |
cd ./tools/docker-network
docker compose kill || true
docker compose down -t 1 -v || true