diff options
Diffstat (limited to 'files/clever-wait-deploy.sh')
-rwxr-xr-x | files/clever-wait-deploy.sh | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/files/clever-wait-deploy.sh b/files/clever-wait-deploy.sh new file mode 100755 index 0000000..98c5c37 --- /dev/null +++ b/files/clever-wait-deploy.sh | |||
@@ -0,0 +1,80 @@ | |||
1 | #!/usr/bin/env bash | ||
2 | |||
3 | set -ueo pipefail | ||
4 | |||
5 | VERBOSE=${VERBOSE:-} | ||
6 | lastCleverActivity="" | ||
7 | |||
8 | function cleverActivity { | ||
9 | lastCleverActivity=$(clever activity) | ||
10 | } | ||
11 | |||
12 | function ensure { | ||
13 | if [ "$?" == "1" ] | ||
14 | then | ||
15 | echo "✗ Deployment failed!" | ||
16 | fi | ||
17 | VERBOSE=true | ||
18 | verbose | ||
19 | } | ||
20 | |||
21 | trap ensure EXIT ERR | ||
22 | |||
23 | function deploying { | ||
24 | checkStatus "$1" "IN PROGRESS" | ||
25 | } | ||
26 | |||
27 | function deployed { | ||
28 | checkStatus "$1" "OK" | ||
29 | } | ||
30 | |||
31 | function inactive { | ||
32 | checkStatus "$1" "" "-v" | ||
33 | } | ||
34 | |||
35 | function checkStatus { | ||
36 | local commit="$1" | ||
37 | local status="$2" | ||
38 | |||
39 | cleverActivity | ||
40 | echo "${lastCleverActivity}" | tail -n1 | grep ${3:+ "${3}"} -q -E "${status}.*DEPLOY.*${commit}" | ||
41 | } | ||
42 | |||
43 | function verbose { | ||
44 | if [ -n "${VERBOSE}" ]; then | ||
45 | echo -e "\\nLast clever activity:" | ||
46 | echo -e "${lastCleverActivity}\\n" | ||
47 | fi | ||
48 | } | ||
49 | |||
50 | function check { | ||
51 | local commit="$1" | ||
52 | local samplingTime=5 | ||
53 | |||
54 | echo "️▫ Waiting for deployment to start..." | ||
55 | while inactive "$commit" | ||
56 | do | ||
57 | verbose | ||
58 | sleep $samplingTime | ||
59 | done | ||
60 | |||
61 | # Wait for completion | ||
62 | echo "▪ Deployment in progress..." | ||
63 | while deploying "$commit" | ||
64 | do | ||
65 | verbose | ||
66 | sleep $samplingTime | ||
67 | done | ||
68 | |||
69 | deployed "$commit" | ||
70 | echo "✓ Deployment done." | ||
71 | } | ||
72 | |||
73 | function getHeadRev { | ||
74 | local chdir="$1/.git" | ||
75 | |||
76 | git --git-dir="$chdir" rev-parse HEAD | ||
77 | } | ||
78 | |||
79 | workdir="$(pwd)" | ||
80 | check "$(getHeadRev "${workdir}")" | ||